-
 
No version for distro humble. Known supported distros are highlighted in the buttons above.
No version for distro iron. Known supported distros are highlighted in the buttons above.
No version for distro jazzy. Known supported distros are highlighted in the buttons above.
No version for distro rolling. Known supported distros are highlighted in the buttons above.

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

Defines a hardware interface to send Cartesian commands to a robot hardware and read Cartesian states.

Additional Links

Maintainers

  • Felix Exner
  • Stefan Scherzinger

Authors

No additional 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:

Universal Robots A/S   and   FZI Research Center for Information Technology.


rosin_logo

Supported by ROSIN - ROS-Industrial Quality-Assured Robot Software Components. More information: rosin-project.eu

eu_flag

This project has received funding from the European Union’s Horizon 2020 research and innovation programme under grant agreement no. 732287.

CHANGELOG

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

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Package Dependencies

System Dependencies

No direct system dependencies.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged cartesian_interface at Robotics Stack Exchange

No version for distro galactic. Known supported distros are highlighted in the buttons above.

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

Defines a hardware interface to send Cartesian commands to a robot hardware and read Cartesian states.

Additional Links

Maintainers

  • Felix Exner
  • Stefan Scherzinger

Authors

No additional 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:

Universal Robots A/S   and   FZI Research Center for Information Technology.


rosin_logo

Supported by ROSIN - ROS-Industrial Quality-Assured Robot Software Components. More information: rosin-project.eu

eu_flag

This project has received funding from the European Union’s Horizon 2020 research and innovation programme under grant agreement no. 732287.

CHANGELOG

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

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Package Dependencies

System Dependencies

No direct system dependencies.

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged cartesian_interface at Robotics Stack Exchange