|Note: This tutorial assumes that you have completed the previous tutorials: URDFs for Industrial Robots, MoveIt Installation, Create a MoveIt Pkg for an Industrial Robot.|
|Please ask about problems and questions regarding this tutorial on answers.ros.org. Don't forget to include in your question the link to this page, the versions of your OS & ROS, and also add appropriate tags.|
Creating a Dual-Arm System (Indigo+)Description: This tutorial is related to the setup and configuration for a Dual-Arm system(Multi-Groups) using the Motoman driver
Respect Robot Safety Practices
WARNING: INDUSTRIAL ROBOTS ARE VERY DANGEROUS AND CAN SERIOUSLY INJURE OR KILL. THE ROS-INDUSTRIAL SOFTWARE IS PROVIDED UNDER THE TERMS OF THE BSD LICENSE (I.E. AS-IS AND WITH NO WARRANTY). WHEN OPERATING AN INDUSTRIAL ROBOT UNDER ROS-INDUSTRIAL CONTROL, MAKE CERTAIN THAT NO ONE IS WITHIN THE ROBOT WORKSPACE AND THE E-STOP IS UNDER OPERATOR CONTROL.
This tutorial is based on the Motoman SDA10F with a FS100 controller. However, it should be adaptable to any Multi-groups using MOTOROS.
This information is for the ROS 1 interface. If you are looking for ROS 2 support, please visit Yaskawa-Global/motoros2.
The basic steps to create the URDF are described at Create a URDF for an Industrial Robot.
For the Motoman SDA10F robot, a arm xacro was defined and used for both arms. Also, a common_torso_macro was created to represent the central torso. An important note for the SDA10F and most Motoman robots like the BMDA3 is that a single physical torso is logically linked two distinct control-groups, the groups B1/B2. Therefore, a mimic joint rotating on the same direction was needed.
The MoveIt! configuration for the SDA10F was done by following the Create a MoveIt Pkg for an Industrial Robot tutorial. The following groups were defined:
- arm_left: This is responsible for controlling the corresponding joints of the left arm.
- arm_right: This is responsible for controlling the corresponding joints of the right arm.
- torso: This controls only the central torso.
- sda10f: This controls all the joints of the robot.
Motion Interface Configuration
The mapping of the various motion groups on the controller must be defined, for both state information and motion control. The motion interface config file captures this information. The config file is loaded by various driver nodes on startup. If this file is missing or not formatted correctly, the driver will default to a single arm mapping.
The current version of the motoman_driver does not work correctly with controllers with > 1 and < 4 motion groups. This is a known issue, and will be fixed. Dual arm robots are not affected by this.
See the issue tracker for more information.
The following shows an example motion_interface.yaml file for an SDA10F (from here):
topic_list: - name: sda10f_r1_controller ns: sda10f group: 0 joints: ['arm_left_joint_1_s','arm_left_joint_2_l','arm_left_joint_3_e','arm_left_joint_4_u','arm_left_joint_5_r','arm_left_joint_6_b','arm_left_joint_7_t'] - name: sda10f_r2_controller ns: sda10f group: 1 joints: ['arm_right_joint_1_s','arm_right_joint_2_l','arm_right_joint_3_e','arm_right_joint_4_u','arm_right_joint_5_r','arm_right_joint_6_b','arm_right_joint_7_t'] - name: sda10f_b1_controller ns: sda10f group: 2 joints: ['torso_joint_b1'] - name: sda10f_b2_controller ns: sda10f group: 3 joints: ['torso_joint_b2']