We updated PR2’s Arm Kinematics plug-in to hard-code our passive elbow joints based on the shoulder
angle of the upper arm. Simple changes were made so
that the IK seed state input satisfies our parallelogram
Once we got the parallelogram arms supported, the
Arm Navigation Warehouse tutorial worked great in
simulation. Getting the arm navigation to work on the
real robot was much harder. Our configuration to
execute arm navigation on a real robot was derived from
• The Dynamixel controller by Anton Rebgun (UofA)
which evolved from the simple arm controller.
• The Dynamixel joint state publisher from Pi Robot
which maps the Dynamixel controller to the joint
names, and then puts them into an array of
joint_states as required by the joint_states
message. To make coding easier, we implemented
a naming convention for the joints, controllers,
and left/right sides.
• The Arbotix follow_joint
_trajectory. This is the key missing piece that
maps the ROS electric arm navigation to the
Dynamixel state/commands. The baud rate and
read/write characteristics for the USB2Dynamixel
have to be set correctly. To satisfy the precise arm
movements required for chess, for example, we
extensively rewrote this node for PR2Lite’s
configuration to check for joint status to ensure
precise following of trajectories while compensating
for motor stalls.
• The fake_pos.py from Turtlebot. The warehouse
viewer will hang if the non-fixed joints in the URDF
are not sending out fake positions. To get the list of
missing joints, use rxconsole and rxloggerlevel to
obtain the DEBUG messages for the environment
• A transform publisher to send out the quaternion for
• The launch file for the ROS planning scene
warehouse visualizer required not using sim_time or
fake_time; setting use_monitor to true; setting
execute_left_trajectory; and setting use_robot_data
FIGURE 7. You won't be able to read the graph, but it gives
you an idea of the complexity of the configuration
of the arm navigation.
make the solutions simpler but, if necessary, it can rotate
360 degrees while still pointing downwards.
MoveIt! is the next generation arm navigation software
for ROS. It has been recently released and solves many of
these final issues, but this early release of MoveIt!
introduces new ones. It may be time for us to upgrade. Up
to now, we have deferred the upgrade from Electric to
Groovy to avoid the very different build infrastructure and
The rxgraph for PR2Lite for both arm navigation and
the base is shown in the graph in Figure 7 where each of
the nodes is a different package (written in C++ or Python)
with messages being passed between them. You won’t be
able to read the graph, but it gives you an idea of the
complexity of the configuration.
We modified a GUI by Patrick Goebel for Pi Robot that
can be used both by tablets and laptops. Figure 8 shows a
sample screenshot. Further enhancements are planned.
Each of the above requires their own configuration that
needs to be consistent with all of the others. If one thing is
not perfect, the ROS warehouse viewer will hang and
require debugging using rxgraph, rxconsole, rxloggerlevel,
roswtf, the tf tools, etc. It’s not easy and there is a learning
Once the arm planning worked in the visualizer, for the
real robot, the arm planning was still not effective enough
for PR2Lite to play chess. The generic arm planner in
arm_navigation generally failed to find a valid plan due to a
lack of a good analytic solver.
For chess, we had to make many incremental plans
using the numeric solver based on current or projected
position. The wrist points the grippers straight down to
SERVO 08.2013 37