Part I: The ROS 2 stack · §9 of 43
ros2 launch openarm_bimanual_moveit_config demo.launch.py arm_type:=v10 # sim
ros2 launch openarm_bimanual_moveit_config demo.launch.py arm_type:=v10 use_fake_hardware:=false # realPlanning groups (SRDF config/openarm_v1.0/openarm_bimanual.srdf):
| Group | Joints | Named states |
|---|---|---|
left_arm | openarm_left_joint1…7 | home (all 0), hands_up (joint4 = 2.0) |
right_arm | openarm_right_joint1…7 | home, hands_up |
left_gripper | openarm_left_finger_joint1 | closed (0), half closed (0.022) |
right_gripper | openarm_right_finger_joint1 | closed, half_closed |
- IK: KDL (
kdl_kinematics_plugin), 5 ms timeout. Planner: OMPL. - Execution goes to
left/right_joint_trajectory_controllerviafollow_joint_trajectory.
Using RViz:
- In the MotionPlanning panel → Planning tab, choose Planning Group (
left_arm/right_arm). - Drag the interactive marker (or choose a named Goal State, e.g.
hands_up). - Plan, check the ghost trajectory, then Execute (or Plan & Execute).
- In the Planning tab, lower Velocity Scaling and Acceleration Scaling (e.g. 0.1) before executing on the real robot.
Programmatic access:
- Action
/move_action(moveit_msgs/action/MoveGroup) to plan and execute. - Action
/execute_trajectoryto execute an already-planned trajectory. - From C++, use
moveit::planning_interface::MoveGroupInterface. From Python, usemoveit_py(packageros-jazzy-moveit-py, needs its own config/launch).
Gripper caveat: MoveIt is configured to drive the grippers as GripperCommand controllers on /left_gripper_controller/gripper_cmd, but the gripper controllers are JointTrajectoryControllers, which only serve follow_joint_trajectory. Arm planning works, but executing a plan for a gripper group from MoveIt will fail. Command the grippers as in §8.1, or change the gripper entries in config/openarm_v1.0/moveit_controllers.yaml to type: FollowJointTrajectory with action_ns: follow_joint_trajectory, then rebuild.