Servo Magazine (April 2012)
Dynamixel and ROS: Towards Affordable Manipulators — Part 1
Most robot builders have at some point envisioned a human scale robot wandering around their house, cleaning up after them or doing the laundry. Videos of robots such as Willow Garage's PR2 doing just these tasks bring further life to the dream. While most people could not afford the $400,000 price tag of a PR2, there are some very interesting developments in lower cost robots that can run some of the same software that made the PR2 so awesome. In this article, we will introduce some of the cool technology that is already out there on the shelves, and in some cases, available for free in open source platforms such as ROS.
The robotics community has seen a quick increase in the capabilities of lower cost robots since the release of the Microsoft Kinect. I think that the MX-series of Dynamixel servos from Robotis might just be able to spur on a similar increase in the capabilities of low cost ROS-enabled arms.
ROS: The Robot Operating System
The Robot Operating System (ROS) is an open source project started at Willow Garage. The project aims to develop an ecosystem of software that makes robots more useful and easier to build and program.
ROS uses a distributed approach in which developers write many smaller, self-contained programs that carry out specific tasks. Rather than having to compile all of the robot code into a single program, users configure which programs do which parts. This greatly encourages code reuse and because of the open source ecosystem, you can actually download a number of free-to-use programs.
A large number of stable ROS packages already exist. These include things like hardware drivers for Kinect and other Primesense devices (www.ros.org/wiki/openni_camera). With low cost sensors such as the Kinect — which provides both a traditional 2D camera and a 3D camera — robots can see objects around them and sense the exact location to grab that object.
Higher level packages offer things like speech recognition (www.ros.org/wiki/pocketsphinx) or navigation with a Kinect (www.ros.org/wiki/navigation). Some up and coming work offers things like collision aware arm planning or object recognition.When writing your own nodes, ROS integrates well with other popular frameworks such as the open source vision framework OpenCV and its 3D counterpart, the Point Cloud Library (PCL). ROS even has bindings to real time robot controllers such as Orocos. Finally, ROS includes a very nice 3D visualization tool called RVIZ (shown in Figure 1) which allows users to fuse the visualization of robot state and sensor data; you can finally see exactly what your robot thinks it is seeing. ROS has an excellent set of tutorials which can be found at www.ros.org/wiki/ROS/Tutorials.
FIGURE 1. A screenshot of RVIZ showing the robot's arm, Kinect point cloud data, and colored results of object segmentation.
Dynamixel Family of Servos
Most people involved in robotics are aware of the Robotis Dynamixel AX-12 servo. This 'smart' servo incorporates a small microcontroller which gives much finer control over the servo than a traditional hobby servo. Dynamixel servos have long been known for their half-duplex TTL serial bus, precise joint position measurement, over-torque and over-temperature shutdown protections, and the ability to tune the torque output.
For years, many have drooled over the higher end RX- and EX-series servos which boast even more torque. Until recently, those higher end servos required an RS-485 bus to communicate, meaning you had to either build your robot entirely out of high end and more expensive servos or you had to have two buses. However, Robotis has their MX-series of servos (shown in Figure 2), starting with the MX-28.
FIGURE 2. Dynamixel MX-series servos.
The MX series uses the original half-duplex TTL serial bus, making it easier than ever to upgrade a servo when you need more torque. The brackets have a number of mounting patterns, meaning that most brackets can be connected. You can finally build an arm with a variety of mixed-size servos using only off-the-shelf components.
The MX-series servos improve things in a number of other areas which are essential for building robot arms. The original AX- and RX-series servos had 10-bit resolution over a 300 degree range of motion. This meant that you had 1,024 positions, or a resolution of 0.3 degrees. While 0.3 degrees sounds nice, that can cause a huge displacement at the end of a longer robot arm. The MX-series servos have 12-bit resolution encoders giving 4,096 positions over 360 degrees of motion, or a resolution of 0.087 degrees. This greatly improves our ability to place the robot gripper exactly where we want it.
The MX-servos also have a 32-bit microcontroller in them, unlike the older eight-bit controller found in previous series. This allows a maximum bus rate of up to 3 MBps which could be useful if you want to very finely control your robot arm. The improved controller also offers real PID control and access to the individual P, I, and D term gains which opens up a number of cool possibilities for tweaking the servo performance. In all cases, the MX-series servo has mechanical dimensions compatible with its equally-sized RX predecessor. The MX-28, MX-64, and MX-106 servos are available.
Since the Dynamixel servos have a serial bus, you can actually connect them directly to a serial port or to a USB port using a USB-to-serial adapter such as the Robotis USB2Dynamixel. However, we can get even better performance by placing a stand-alone controller in between the USB and Dynamixel buses.
Several years ago (when I helped start the Mech Warfare competition at RoboGames), I found myself wanting an easy-to-use microcontroller board with integrated XBEE wireless radio and the ability to control Dynamixel servos. Out of this need grew the ArbotiX RoboController. After Mech Warfare that year, I found that a number of other people had a similar need. The ArbotiX RoboController is available from Trossen Robotics, and all of the software is released under an open source license.
Why do I bring this up? Because I have been using the ArbotiX to connect my robot hardware to a laptop running ROS. I have stopped using the XBEE radio connection (as was used for remote control in Mech Warfare) and started using a direct hard-link wire (a USB-to-serial cable from FTDI) to achieve a more robust connection, and I have added larger motor drivers to support a larger drivetrain for my 25 pound, 5 ft tall mobile manipulator, Maxwell (Figure 3).
FIGURE 3. An early photo of Maxwell, a human-scale mobile manipulator using Dynamixel and ROS.
Maxwell is undergoing a series of upgrades after which he will have a new arm consisting of mostly MX-64 servos, instead of the original mix of both AX and RX servos which has caused a nightmare of wiring issues. I'll have more details about Maxwell in the next part of this series.
I built the ArbotiX-ROS drivers from the ground up with the intention that users could quickly configure a robot using only a few lines of a configuration file without writing much (if any) code. The drivers are documented at www.ros.org/wiki/arbotix and are released under an open source license. The controllers offer code that allows Dynamixel-based robots to easily leverage the navigation and arm navigation capabilities of ROS.
There are a number of mobile manipulators out there using Dynamixel servos and ROS. A number of these robots use the ArbotiX. Patrick Goebel (of pirobot.org) has used the ArbotiX drivers to power his robot which recently completed a two hour long navigation endurance test. The ArbotiX+ROS combo is also behind the recently released TurtleBot arm (Figure 4) — an AX-12 based arm which was originally developed for my Mini-Maxwell robot (Figure 5). It uses the iRobot Create and many of the TurtleBot drivers. All of these robots make use of ROS's arm navigation capabilities which allow the arm to move around, avoiding obstacles seen by the Kinect.
FIGURE 4. The TurtleBot arm.
FIGURE 5. Mini-Maxwell.
This article just barely scraped the surface of what is out there today for people wanting to build a sophisticated, sensor-based robot arm.
In the next part, we'll take an in-depth look at the construction of my robot Maxwell, who participated in the RoboGames Symposium and won the 2011 AAAI Small-Scale Manipulation Challenge by playing a number of awesome games of robot vs. robot chess. SV