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
: theSystemInterface
implementation for the multiple ROBOTIS Dynamixel servos. -
open_manipulator_x_robot
: the reference implementation of theros2_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