Willow Garage Blog
Matt Reynolds of Duke was at Willow Garage last week to speak about RFID for Mobile Manipulation. Matt has been collaborating with Charlie Kemp's Healthcare Robotics Lab (HRL) at Georgia Tech. They have been researching various uses of UHF RFID tags to provide inexpensive solutions to hard robotics problems. With a cost as low as $0.20 a piece, UHF RFID tags can provide a high degree of certainty in an uncertain environment. Several research groups have already investigated their use in SLAM -- HRL's innovation is combining the use of the same RFID tags to do both far-field (6m+) localization of objects and near-field (0.5-10cm) grasping. They've also been able to use multipath calculations based on the manufacturer's antenna model to provide localization without cumbersome training.
You can find out more about their work at HRL's RFID project page.
A lot of you have been interested in seeing video of the arm in action. We dug this one out of the vault -- it was shot in early November when we were first bringing it up. As you can see, it's still mounted to the test rack and we're using a spaceball to put it through its range of motions. We've had the arm mounted to one of our PR2 alphas for several weeks now and we've been putting it through its paces -- picking up objects, dragging people around in office chairs, and turning over tables. Inspite of all the abuse, it's doing well. We'll have some more videos of it in action soon.
Willow Garage CEO Steve Cousins will be speaking at Robo Development on Tuesday about developing open source software for robotics. Steve will be talking about the current state of the PR2 and ROS programs as well as our collaborations with academic institutions. Be sure to stop by at 2pm on Tuesday to hear the talk and watch some demos.
Update: Slides from the talk
We are currently building up three full PR2 Alpha Units. We currently have three base/spine/heads assembled and running around Willow Garage. The first Alpha arm, the production of which is staggered about 6 weeks behind the rest of the robot, just came together. In this picture you can see the sensor head in the background, with the stereo camera and tilting laser scanner. In the foreground you can see the gripper on the wrist with the fingertips (grey rubber section), which is covered on all sides with a pressure sensor array.
One of the problems we've tried to simplify in ROS is keeping track of coordinate frames for robot data. The ROS platform is a distributed system and our PR2 robot has many sensors and manipulators in different spatial positions and orientations. We don't want sources of data to have to publish their data under different permutations of transforms, nor do we want subscribers to manually keep track of transforms. Instead we want to publish the data once and have the rest of the system automatically know how to interpret it.
The tf ('transform') package enables ROS nodes to keep track of coordinate frames and transform data between coordinate frames. Like ROS, it works in a distributed manner: a node that knows a transform between frames publishes it to a ROS topic; nodes that are interested use tf to subscribe to the transforms. tf can then efficiently compose the net transform between requested frames. Using linear algebra classes and methods from the open source Bullet Physics library, the tf package works a variety of data types: points, vectors, point clouds, orientations, and poses. ROS makes sure that the transforms are easily associated with this data by including a special "frame identifier" header field that stays with messages as they are passed around.
We're committed to providing you debugging tools to help you understand what's going on with the transform system. One of these tools is our rviz, which is our 3D viewer that we are actively developing. The ogre_visualizer helps you understand the structure of the transforms by displaying the transforms in space with names and values. It also helps you understand a series of transforms by including arrows that point to the parent coordinate frame.
We've also designed the tf package to be used with or without ROS, so you're free to try it out on its own or as part of our ROS ecosystem. You'll find the code over at our Personal Robots Sourceforge project and you can find out more technical details about the tf package, including code APIs, at our tf wiki page.
Here's a video of the tf package in action. We used optical markers to control the position of the arm. The position of the arm is fed to our robot head controller, which is able to transform it to its local coordinate frame and follow the motion.
Three sets of bases, spines and heads have been assembled and are under intensive testing at Willow Garage. These robots are complete except for the modular arms, which will be finished next month. The navigation stack from ROS has been implemented and is currently being refined. The robots are already able to navigate the hallways in the building autonomously. Meanwhile the prototype "breadboard" arm is attached to the old breadboard body, so that the arm control software can be developed and tested in advance.
First photos of Base+Spine+Head (no arms yet!)
New pictures of the PR2 Forearm...
Keep reading for more photos...
by Brian Gerkey
While Steve Cousins and I were visiting the University of Sherbrooke, I noticed that they have a Hokuyo UTM on a robot, and I mentioned that we have code in ROS to control it. One of the students in the lab said, "Of course, that's what we're using. It's a nice, self-contained library." They were able to find the code for the driver library, pull it out, and use it without using the rest of ROS.
We put a lot of thought into how to offer an integrated framework with lots of components, without requiring users of a component to use the framework. Taking inspiration from projects like CARMEN and Gearbox,our approach is to create a standalone library for each component, and then build a ROS wrapper that incorporates the library. The library can be used with or without ROS. With ROS, it immediately plays with all the other ROS nodes, and can take advantage of the ROS frameworks (e.g. for testing, system configuration, etc.). Without ROS, it's simply a library with a clean API that provides some basic robotics functionality. In the long run, as the standalone libraries stabilize, we may contribute them to a project like Gearbox, which is becoming a clearinghouse for robotics libraries.
We haven't advertised this aspect of our software architecture, or encouraged people to use ROS or its component libraries yet, but it feels great that this approach to system architecture seems to achieve our goal of code reuse by others.