- Version 1.0 of the Baxter Cooperative and Kinematics Tracking
The Baxter Cooperative and Kinematics Tracking project is based on the cooperative dual task space (CDTS) [1-4] for cooperative manipulation among multiple robotic arms. The project is implemented as a ROS package which works with the Baxter Research Robot from Rethink Robotics. Besides offering simple kinematic control of each individual arm, the package adds a kinematic tracking capability, where one of the Baxter arms tracks the pose of the other arm so that it maintains the original relative pose between the end-effectors.
This is the first version of the Baxter Cooperative and Kinematics Tracking package. Additional features based on the results on unit dual quaternion control for manipulators and on the cooperative dual task space, such as defining CDTS absolute/relative pose (as well as translation/orientation/distance) between arms, flexible control capabilities and human-robot relative pose controller, will be incorporated in future versions.
The video illustrates the Baxter Cooperative and Kinematics Tracking package.
Unit dual quaternion representation
The dual quaternion algebra describes rigid body motion algebraically in a similar way that quaternions represent rotations in three-dimensional space. A unit quaternion r = cos(θ/2) + sin(θ/2)n represents a rotation with angle θ around the axis n. A rigid motion in is represented by the unit dual quaternion element x = r + ε(1/2)pr, where r is a unit quaternion that represents the rotation, p is a pure quaternion that represents the translation, and ε is the nilpotent Clifford unit; that is, ε≠0 but ε*ε = 0.
As a sequence of rigid motions can be represented by a sequence of unit dual quaternion multiplications, the description of the Baxter end-effector pose, that is, position and orientation for each arm, can be derived by a series of unit dual quaternion multiplications. The unit dual quaternion xi+1 is a function of the current joint value and represents the rigid transformation between the extremities of link i and i+1 from each Baxter arm. The forward kinematics relates the configuration of all joints to the configuration x of the end-effector; that is, x := x1...*x7
Cooperative dual task spaceCooperative manipulation enables a broad set of practical applications that would be restricted
To cope with such complexities, the project relies on the cooperative dual task space (CDTS) [1-4] which provides a compact and easy to derive representation of the cooperative elements without representation singularities and without decoupling orientation and translation dynamics. The figure on the right illustrates the CDTS for two-arms manipulation. The relative dual position determines the configuration of the left end-effector with respect to the right one, whereas the absolute dual position corresponds to a frame located between the end-effectors.
Baxter Tracking Controller
The Baxter Cooperative and Kinematics Tracking package implements a tracking capability where one of the arms tracks the kinematics and the pose of the other. For this purpose, one of the Baxter arms shall be automatically controlled by a ROS node, and will move so that the same initial pose (distance and orientation) is maintained between the end-effectors. This feature is completely different from simply copying the joint vector from one to other, as the algorithm relies on the end-effector pose from each arm regardless from their joint configuration. This feature allows advanced remote control from arm to the other (initial poses may differ as the user wishes), cooperative tracking, cooperative lifting and assembly of complex shaped payloads, among others.
Please before starting, verify that the Baxter Robot is enabled, and that the grippers and that the joint trajectory action server had been initialized
$ rosrun baxter_tools enable_robot.py -e; $ rosrun baxter_interface joint_trajectory_action_server.py 2>&1 &
To start the Baxter Cooperative and Kinematics Tracking, just run the baxter_dq_control node from the dq_robotics package
$ rosrun dq_robotics baxter_dq_control
To control the grippers using the button cuffs located in the Baxter arms, we recommend the use of the node gripper_cuff_control from the baxter_examples. This allows an easy an interesting interface with the grippers during the cooperative manipulation
$ rosrun baxter_examples gripper_cuff_control.py
Enabling Tracking Control
It is very simple to start the Baxter Tracking Controller. First, the user must define an original pose for both arms. Please note the end-effectors configuration since that is the original relative pose.
Now, the only thing the user must do is to press the itb button in one of the arms, as shown in the Figure below. The Baxter arm will be automatically controlled as to maintain the same relative pose between both arms end-effectors. In this sense, as you move one of the end-effectors, the other arm will track the kinematics and the pose of the end-effector configuration in order to hold that original relative pose.
To disable the tracking mode, just press the same itb button. Then both arms will be idle in gravity compensation mode.
ROS Services and Topics
The Baxter Cooperative and Kinematics Tracking also provides the user with specific ROS Services in order to allow more advanced tasks. Basically, the user can input three different services: idle mode, which yields in a gravity compensation mode for the arms, the tracking mode which implements the same Baxter Tracking Controller described above, and the set point controller, which allows the user to in put particular pose configuration for the arms
$ rosservice call /baxter_dqcontrol/set_control/idle $ rosservice call /baxter_dqcontrol/set_control/point $ rosservice call /baxter_dqcontrol/set_control/track
In the later mode, the user can use the following topics to input the desired pose for the end-effector of the Baxter arms
$ rostopic pub /baxter_dqcontrol/left(right)/control/pose (Type: geometry_msgs/Pose) $ rostopic pub /baxter_dqcontrol/left(right)/control/position (Type: geometry_msgs/Point) $ rostopic pub /baxter_dqcontrol/left(right)/control/add_translation (Type: geometry_msgs/Point)
The last topic allows the user to add a translation setpoint to the current position. This is useful when the user is interested in relative position control instead of controlling the absolute pose.
Moreover, the user can also subscribe to the topics pose and error_info, which returns the end-effector current pose for each Baxter arm (geometry_msgs/Pose) and the control error given the desired setpoint (or track objective)
$ rostopic echo /baxter_dqcontrol/left(right)/pose $ rostopic echo /baxter_dqcontrol/left(right)/error_info
It uses the Baxter SDK 1.0 and above, but has only been tested on version 1.0.
$ roscd; cd ../src/ $ git clone -b baxter_iros_subm https://gitlab.com/figueredo/ros_dqrobotics.git $ roscd $ cd .. $ catkin_make --pkg dq_robotics
The Baxter Cooperative and Kinematics Tracking has been developed and tested on 32 and 64 bit Linux systems running ROS Hydro --- it uses catkin builder --- but could be easily adapted for previous versions using rosbuild.
That's it! I hope you enjoy it!
-  Figueredo, L.F.C. and Adorno B.V., "Switching Strategy for Flexible Task Execution using the Cooperative Dual Task Space Framework", in Proceedings of 2014 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS), 2014. (Accepted for publication)
-  L.F.C. Figueredo, B.V. Adorno, J.Y. Ishihara, and G.A. Borges, "Robust kinematic control of manipulator robots using dual quaternion representation", in Proceedings of 2013 IEEE International Conference on Robotics and Automation (ICRA), 2013.
-  Adorno, B. V., Two-arm manipulation: from manipulators to enhanced human-robot collaboration [Contribution à la manipulation à deux bras : des manipulateurs à la collaboration homme-robot], Université Montpellier 2, Montpellier, France, 2011.
-  Adorno, B. V., A. P. L. Bó, and P. Fraisse. 2014. “Kinematic Modeling and Control for Human-Robot Cooperation Considering Different Interaction Roles.” Robotica (Feb. 28):1–18. doi:10.1017/S0263574714000356.