ROS Resources: Documentation | Support | Discussion Forum | Service Status | Q&A

ROS 2 port of "TRAC-IK": An alternative IK solver

Hi all,

Over the past few days I’ve done some work to write a ROS 2 port of TRACLabs’ IK solver, TRAC-IK. TRAC-IK is an “alternative Inverse Kinematics solver to the popular inverse Jacobian methods in Orocos’ KDL”. I’d used TRAC-IK for robotics research before, and thought it would be nice to have ROS 2 support for it.

So far, I’ve completed porting trac_ik_lib and trac_ik_examples with minimal changes to the API (documented here). As such, the TRAC-IK project is technically ready for use in a ROS 2 project! :slight_smile:

Link to my fork: GitHub - aprotyas/trac_ik: ROS 2 port of `trac_ik`, an alternative Inverse Kinematics solver to the popular inverse Jacobian methods in KDL.
Link to the upstream repository: Bitbucket
Link to ROS 2 port progress tracker: Add ROS 2 support · Issue #1 · aprotyas/trac_ik · GitHub

To the community, please feel free to leave feedback/requests through Github issues on my fork - I will try my best to engage with things as they come up. I’ve written this port in a short time, and hence there are some shortcomings to address:

  • ROS 2 support for trac_ik_kinematic_plugin and trac_ik_python is WIP. I recognize support for the former would be quite high impact because the moveit2 supports plugins already.
  • TracIK is not composable. Well, it doesn’t instantiate a rclcpp::Node object anyway, because I used static loggers and because the API change involves constructing TracIK with the full URDF XML of a robot in string form. This is not a problem unless I decide to add a subscription mechanism to capture URDF XMLs in trying to replicate how data flows using robot_state_publisher.
  • Documentation is lacking. Really. If someone could help out with this…