Dynamixel_control: ros2_control implementation for ROBOTIS Dynamixel robots

Today I would like to introduce the dynamixel_control package.

It’s a ros2_control implementation for any kind of ROBOTIS Dynamixel robots. It contains two packages:

  • dynamixel_hardware: the SystemInterface implementation for the multiple ROBOTIS Dynamixel servos.
  • open_manipulator_x_robot: the reference implementation of the ros2_control robot using ROBOTIS OpenManipulator-X.

The dynamixel_hardware package is hopefully compatible any configuration of ROBOTIS Dynamixel servos thanks to the ros2_control’s flexible architecture.

Demo with real ROBOTIS OpenManipulator-X

  • Terminal 1

Launch the ros2_control manager for the OpenManipulator-X.

$ ros2 launch open_manipulator_x_robot open_manipulator_x_robot.launch.py
  • Terminal 2

Start the joint_trajectory_controller and send a /joint_trajectory_controller/follow_joint_trajectory goal to move the OpenManipulator-X.

$ ros2 control switch_controllers --start-controllers joint_trajectory_controller
$ ros2 action send_goal /joint_trajectory_controller/follow_joint_trajectory control_msgs/action/FollowJointTrajectory -f "{
  trajectory: {
    joint_names: [joint1, joint2, joint3, joint4, gripper],
    points: [
      { positions: [0.1, 0.1, 0.1, 0.1, 0], time_from_start: { sec: 2 } },
      { positions: [-0.1, -0.1, -0.1, -0.1, 0], time_from_start: { sec: 4 } },
      { positions: [0, 0, 0, 0, 0], time_from_start: { sec: 6 } }
    ]
  }
}"

If you would like to use the velocity control instead, switch to the velocity_controller and publish a /velocity_controller/commands message to move the OpenManipulator-X.

$ ros2 control switch_controllers --start-controllers velocity_controller
$ ros2 topic pub /velocity_controller/commands std_msgs/msg/Float64MultiArray "data: [0.1, 0.1, 0.1, 0.1, 0]"

TODO

  • Apply effort control
  • Use transmission_interface
  • Use joint_limits_interface
10 Likes

Finally the dynamixel_control package has been updated to the ROS 2 Humble and Rolling.

Thank you @Kenji_Brameld!

I hope I’m going to release the package soon.

1 Like

Nice one! I haven’t actually used your package but I referenced it in a tutorial on ros2_control just this week. When I went to put the link in the description, I specifically checked to make sure the one I linked to was foxy-compatible (since my tutorial is in foxy), and found it interesting that you didn’t have a humble release (in case someone was trying to follow my tutorial with humble). I better go update my link now!

Thanks for putting in the time and effort to maintain the package. I am hoping at some point in the future to do a tutorial specifically on working with Dynamixels, and if I do I’ll let you know :wink:

2 Likes

@joshnewans The tutorial is great! Thank you for your reference.

1 Like

I’ve been using it over the last couple of months and it works amazingly, thanks @youtalk for developing and maintaining this.

1 Like