cartesian_interface package from ros_controllers_cartesian repocartesian_interface cartesian_trajectory_controller cartesian_trajectory_interpolation ros_controllers_cartesian twist_controller |
|
Package Summary
Tags | No category tags. |
Version | 0.1.7 |
License | Apache-2.0 |
Build type | CATKIN |
Use | RECOMMENDED |
Repository Summary
Checkout URI | https://github.com/UniversalRobots/Universal_Robots_ROS_controllers_cartesian.git |
VCS Type | git |
VCS Version | main |
Last Updated | 2024-10-14 |
Dev Status | DEVELOPED |
CI status |
|
Released | RELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (0)
Good First Issues (0) Pull Requests to Review (0) |
Package Description
Additional Links
Maintainers
- Felix Exner
- Stefan Scherzinger
Authors
Cartesian Interface
This package provides new hardware interfaces to implement Cartesian ROS control for robot manipulators.
Rationale
Several OEMs provide native Cartesian interfaces in their robot drivers. By offering new according hardware interfaces, implementers of ROS controllers get direct access to Cartesian buffers for reading and writing. Whether this provides advantages over the classic joint-based interfaces of course depends on personal use cases. The main difference is that in the Cartesian case the robot takes care of Inverse Kinematics.
Usage
This package provides PoseCommandInterface
and TwistCommandInterface
for read/write access and CartesianStateInterface
for pure read access.
You would add them to your hardware abstraction like this:
#include <cartesian_interface/cartesian_command_interface.h>
#include <cartesian_interface/cartesian_state_handle.h>
class YourRobot : public hardware_interface::RobotHW
{
...
// New interfaces for Cartesian ROS-controllers
ros_controllers_cartesian::CartesianStateInterface cart_interface_;
ros_controllers_cartesian::TwistCommandInterface twist_interface_;
ros_controllers_cartesian::PoseCommandInterface pose_interface_;
...
// Buffers for read/write access
geometry_msgs::Pose cart_pose_;
geometry_msgs::Twist cart_twist_;
geometry_msgs::Accel cart_accel_;
geometry_msgs::Accel cart_jerk_;
geometry_msgs::Twist twist_command_;
geometry_msgs::Pose pose_command_;
...
}
Registering them could look like this:
YourRobot::YourRobot()
{
...
ros_controllers_cartesian::CartesianStateHandle cart_state_handle("base", "tip", &cart_pose_, &cart_twist_,
&cart_accel_, &cart_jerk_);
cart_interface_.registerHandle(cart_state_handle);
twist_interface_.registerHandle(
ros_controllers_cartesian::TwistCommandHandle(cart_interface_.getHandle("tip"), &twist_command_));
twist_interface_.getHandle("tip");
pose_interface_.registerHandle(
ros_controllers_cartesian::PoseCommandHandle(cart_interface_.getHandle("tip"), &pose_command_));
pose_interface_.getHandle("tip");
// Register interfaces
registerInterface(&twist_interface_);
registerInterface(&pose_interface_);
...
}
Note the two strings base
and tip
during instantiation of the Cartesian state handle.
They represent frames in your robot kinematics and their names will vary from robot to robot.
There’s a convention behind that assumes that base
is the reference frame in which tip
is given.
tip
is the end-point of the robot we want to control and represents a unique identifier for the handle.
You can think of it as resource names in joint-based ROS control.
Cartesian ROS controllers
When implementing a ROS controller, you would add the according handle for read/write access, e.g. in the case of Cartesian pose control:
#include <cartesian_interface/cartesian_command_interface.h>
...
class YourController : public controller_interface::Controller<ros_controllers_cartesian::PoseCommandInterface>
{
...
private:
ros_controllers_cartesian::PoseCommandHandle handle_;
...
}
During instantiation of the handle, you ask for the end-point you want to control:
handle_ = hw->getHandle("tip");
and then use that handle to implement your control loop in update(...)
:
// Get current state from the robot hardware
geometry_msgs::Pose pose = handle_.getPose();
geometry_msgs::Twist twist = handle_.getTwist();
geometry_msgs::Accel accel = handle_.getAccel();
geometry_msgs::Pose target;
// Implement your control law here
handle_.setCommand(target);
...
Acknowledgement
Developed in collaboration between:
Supported by ROSIN - ROS-Industrial Quality-Assured Robot Software Components. More information: rosin-project.eu
This project has received funding from the European Union’s Horizon 2020 research and innovation programme under grant agreement no. 732287.
Changelog for package cartesian_interface
0.1.7 (2024-07-29)
0.1.6 (2024-06-12)
- Clean up package.xml files (#13)
- Contributors: Felix Exner
0.1.5 (2021-12-02)
0.1.4 (2021-08-05)
- Add websites to package.xml files
- Update image paths of partner logos (#4)
- Contributors: Felix Exner
0.1.3 (2021-06-23)
0.1.2 (2021-06-15)
0.1.1 (2021-06-15)
- Removed trailing whitespaces from README's
- Contributors: Felix Exner
0.1.0 (2021-06-15)
- Initial release
- Contributors: Felix Exner
Wiki Tutorials
Package Dependencies
Deps | Name |
---|---|
catkin | |
rosunit | |
roscpp | |
hardware_interface | |
geometry_msgs |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged cartesian_interface at Robotics Stack Exchange
cartesian_interface package from ros_controllers_cartesian repocartesian_interface cartesian_trajectory_controller cartesian_trajectory_interpolation ros_controllers_cartesian twist_controller |
|
Package Summary
Tags | No category tags. |
Version | 0.1.7 |
License | Apache-2.0 |
Build type | CATKIN |
Use | RECOMMENDED |
Repository Summary
Checkout URI | https://github.com/UniversalRobots/Universal_Robots_ROS_controllers_cartesian.git |
VCS Type | git |
VCS Version | main |
Last Updated | 2024-10-14 |
Dev Status | DEVELOPED |
CI status |
|
Released | RELEASED |
Tags | No category tags. |
Contributing |
Help Wanted (0)
Good First Issues (0) Pull Requests to Review (0) |
Package Description
Additional Links
Maintainers
- Felix Exner
- Stefan Scherzinger
Authors
Cartesian Interface
This package provides new hardware interfaces to implement Cartesian ROS control for robot manipulators.
Rationale
Several OEMs provide native Cartesian interfaces in their robot drivers. By offering new according hardware interfaces, implementers of ROS controllers get direct access to Cartesian buffers for reading and writing. Whether this provides advantages over the classic joint-based interfaces of course depends on personal use cases. The main difference is that in the Cartesian case the robot takes care of Inverse Kinematics.
Usage
This package provides PoseCommandInterface
and TwistCommandInterface
for read/write access and CartesianStateInterface
for pure read access.
You would add them to your hardware abstraction like this:
#include <cartesian_interface/cartesian_command_interface.h>
#include <cartesian_interface/cartesian_state_handle.h>
class YourRobot : public hardware_interface::RobotHW
{
...
// New interfaces for Cartesian ROS-controllers
ros_controllers_cartesian::CartesianStateInterface cart_interface_;
ros_controllers_cartesian::TwistCommandInterface twist_interface_;
ros_controllers_cartesian::PoseCommandInterface pose_interface_;
...
// Buffers for read/write access
geometry_msgs::Pose cart_pose_;
geometry_msgs::Twist cart_twist_;
geometry_msgs::Accel cart_accel_;
geometry_msgs::Accel cart_jerk_;
geometry_msgs::Twist twist_command_;
geometry_msgs::Pose pose_command_;
...
}
Registering them could look like this:
YourRobot::YourRobot()
{
...
ros_controllers_cartesian::CartesianStateHandle cart_state_handle("base", "tip", &cart_pose_, &cart_twist_,
&cart_accel_, &cart_jerk_);
cart_interface_.registerHandle(cart_state_handle);
twist_interface_.registerHandle(
ros_controllers_cartesian::TwistCommandHandle(cart_interface_.getHandle("tip"), &twist_command_));
twist_interface_.getHandle("tip");
pose_interface_.registerHandle(
ros_controllers_cartesian::PoseCommandHandle(cart_interface_.getHandle("tip"), &pose_command_));
pose_interface_.getHandle("tip");
// Register interfaces
registerInterface(&twist_interface_);
registerInterface(&pose_interface_);
...
}
Note the two strings base
and tip
during instantiation of the Cartesian state handle.
They represent frames in your robot kinematics and their names will vary from robot to robot.
There’s a convention behind that assumes that base
is the reference frame in which tip
is given.
tip
is the end-point of the robot we want to control and represents a unique identifier for the handle.
You can think of it as resource names in joint-based ROS control.
Cartesian ROS controllers
When implementing a ROS controller, you would add the according handle for read/write access, e.g. in the case of Cartesian pose control:
#include <cartesian_interface/cartesian_command_interface.h>
...
class YourController : public controller_interface::Controller<ros_controllers_cartesian::PoseCommandInterface>
{
...
private:
ros_controllers_cartesian::PoseCommandHandle handle_;
...
}
During instantiation of the handle, you ask for the end-point you want to control:
handle_ = hw->getHandle("tip");
and then use that handle to implement your control loop in update(...)
:
// Get current state from the robot hardware
geometry_msgs::Pose pose = handle_.getPose();
geometry_msgs::Twist twist = handle_.getTwist();
geometry_msgs::Accel accel = handle_.getAccel();
geometry_msgs::Pose target;
// Implement your control law here
handle_.setCommand(target);
...
Acknowledgement
Developed in collaboration between:
Supported by ROSIN - ROS-Industrial Quality-Assured Robot Software Components. More information: rosin-project.eu
This project has received funding from the European Union’s Horizon 2020 research and innovation programme under grant agreement no. 732287.
Changelog for package cartesian_interface
0.1.7 (2024-07-29)
0.1.6 (2024-06-12)
- Clean up package.xml files (#13)
- Contributors: Felix Exner
0.1.5 (2021-12-02)
0.1.4 (2021-08-05)
- Add websites to package.xml files
- Update image paths of partner logos (#4)
- Contributors: Felix Exner
0.1.3 (2021-06-23)
0.1.2 (2021-06-15)
0.1.1 (2021-06-15)
- Removed trailing whitespaces from README's
- Contributors: Felix Exner
0.1.0 (2021-06-15)
- Initial release
- Contributors: Felix Exner
Wiki Tutorials
Package Dependencies
Deps | Name |
---|---|
catkin | |
rosunit | |
roscpp | |
hardware_interface | |
geometry_msgs |