September 2009 Archives

image_common 0.3.0

| No Comments | No TrackBacks


This release is mainly for final testing before the 0.9.0 release. We expect no significant changes between 0.3.0 and 0.9.0 other than removal of already deprecated APIs. A reminder: please switch from image_transport::ImagePublisher and image_transport::ImageSubscriber to image_transport::Publisher and image_transport::Subscriber.

Changes in this release are primarily of interest to image_transport plugin developers; see the full changelist.

A couple notes on compatibility with outside packages (trunk versions):

  • compressed_image_transport has been updated for compatibility with post-0.1 image_common.
  • image_view now allows you to specify a transport name on the command line. The default transport is "raw".


  • image_transport:
    • Fixed bug in SimplePublisherPlugin making it unusable for non-trivial transports
    • Added internal subscription callback support to SimplePublisherPlugin
    • Parts of the documentation have been moved to the wiki


geometry 0.3.0 released

| No Comments | No TrackBacks


There are a number of changes. Most notably the usage of frame_id and parent_id, in Transform datatypes,have changed to child_frame_id and frame_id respectively to be consistent with all other data types.

There have been a few modifications to the bullet API. The goal is to converge onto bullet's API without patches. To get there please read about the patches applied.

Also, in geometry-0.2.0, the topic on which tf operates was changed from /tf_message to /tf. The library will continue listening on the old topic name for backwards compatibility.

Major Changes

  • tf:
    • Usage of tf::Stamped deprecated in favor of tf::StampedTransform
    • parent_id -> frame_id
    • frame_id -> child_frame_id
    • transform_sender replaced by static_transform_publisher to allow backwards compatibility with this change
  • bullet:
  • Updated patches. Highlights below.
  • Deprecated set/getEulerZYX methods
  • Added get/setRPY methods
  • cleaned up documentation
  • various bug fixes

Minor Changes

  • clean up of ~params
  • removal of deprecated Node API usage
  • tf_echo printouts cleaner
  • tf_monitor is working and has better display


Hand Detection and Image Descriptors

| No Comments | No TrackBacks

crossposted from

This summer, Alex Teichman of Stanford University worked on an image descriptor library, and used this library to develop a new method for people to interact directly with the PR2. Using a keyboard or a joystick is great for directly controlling a robot, but what if an autonomous robot wanders into a group of people -- how can they affect its behavior?

Alex's approach allows the PR2 to "talk to the hand," as many of us cruelly experienced in middle school. In the video, Alex demonstrates that the PR2 can be made to stop and go by simply holding a hand up to the stereo camera. To accomplish this, Alex used a machine-learning algorithm called Boosting along with image descriptors, such as the color of local regions and object edges. He was able to train his algorithm on a data set that was labelled using the Amazon Mechanical Turk library that Alex Sorokin developed. This Mechanical Turk library harnesses the power of paid volunteers on the Internet to perform tasks, like identifying hands in images so that algorithms like Boosting can be trained.

Hand detection is part of a larger effort that Alex Teichman has been working on, developing a library with a common interface to image descriptors. This library, descriptors_2d, enables ROS developers to use easily use descriptors like SURF, HOG, Daisy, and Superpixel Color Histogram.

You can learn more about the hand detection techniques and image descriptors in Alex's final summer presentation (download PDF from

Hand Detection

Hand Detection

Is the Bottle Half Full or Half Empty?

| No Comments | No TrackBacks

crossposted from

Matt Piccoli (University of Pennsylvania) and Jürgen Sturm (University of Freiburg) did a lot more than break eggs and learn about how things move. They also tested the limits of PR2's fingertip pressure sensors with a seemingly simple task: identifying, without looking, if a juice bottle is open or closed, and full or empty.

Tactile information is invaluable when determining properties of objects that are visually inaccessible. In this vein, Matt and Jürgen developed a tactile perception strategy that can be used to detect the internal state of liquid containers. By measuring a bottle's reaction to a force applied by a gripper, their system can recognize whether the bottle is full or empty, and open or closed. The system learned this information from a set of training experiments carried out on different types of bottles and soda cans. Knowing whether a bottle is open or closed can help a robot determine the level of care required when manipulating the object.

You can find the code for Matt and Jürgen's work in the pr2_gripper_controller package on

Migration to complete

| No Comments | No TrackBacks

We have successfully completed migration of our ROS ( and "Personal Robots" ( code from SourceForge to Both projects remain available under the same open source licenses as before and use the SourceForge-inspired GForge platform, but they are now hosted on dedicated servers.

As part of this move, we took the opportunity to split personalrobots into two new projects: ros-pkg and wg-ros-pkg. ros-pkg contains software for a general robotics platform and has contributions from many external collaborators. From navigation to drivers to visualizations, this software runs on a variety of robots and enables researchers to focus on cutting-edge capabilities. wg-ros-pkg builds on top of ros-pkg to provide the software for the PR2 robot platform. We hope that the PR2 platform will accelerate collaboration between researchers by providing both common software and hardware. In addition to ros-pkg and wg-ros-pkg, we encourage you to checkout the many other repositories of open source ROS code available from other institutions.

You may be wondering why we chose to move from SourceForge. We were stunned to discover that the Personal Robots project was consistently ranking either #1 or #2 in daily SVN activity, out of more than 230,000 projects hosted at SourceForge. The ROS project was also highly ranked, often in the top 20. This heavy use was putting strain on SourceForge's infrastructure and it was unfair to expect an external organization to support such heavy use. We are grateful to SourceForge for the support they have provided, as well as the tools we have needed to foster the ROS community. Now that we have launched, it was time to for us to support the community using our own infrastructure.

The pace of activity with ROS software has increased these past several weeks, which reflects our progress towards completing Milestone 3. We have done initial releases of nearly all the software we expect to deploy with the PR2 robot. We have launched as a new home for documentation, tutorials, and news about ROS. And now we have launched, which will strengthen the infrastructure used to share code. There's still much more to do, from hardening the software to improving documentation. We will also need tools to bring all the pieces together with new tools for installing and managing these platforms. We looking forward to sharing more with you as these become ready.

Detecting Tabletop Objects

| No Comments | No TrackBacks

crossposted from

Marius Muja of University of British Columbia began his internship in the middle of Milestone 2 excitement. For several weeks, he worked on two important perception components: detecting outlets from far away, and detecting door handles.

Thereafter, Marius focused on tabletop object detection and wrote the tabletop_objects package. Determining the exact position and orientation of an object, as well as its identity, is very important if a robot is grasping objects, and especially crucial if the object in question is fragile. Tabletop_objects uses a two-stage approach. In the bottom-up stage, initial estimations of possible object locations are made, and in the top-down stage, 3D models are fit into the estimated locations. After fitting the correct 3D model, the object's identity, position and orientation can be determined with high confidence. This approach can even distinguish between similar-looking drinking glasses. Marius worked with Ioan Sucan to integrate tabletop_objects and motion planning (move_arm), and together, they were able to successfully detect, grasp and manipulate fragile glass objects.

In addition to his work with tabletop_objects, Marius integrated FLANN (Fast Library for Nearest Neighbors) into OpenCV, and developed a phone-based teleoperation mode for PR2 based on Asterisk, an open source PBX.

Here are Marius's end-of-summer slides, where you can find more details about his work.

Marius Muja: Tabletop Object Detection (Download PDF from

Indoor Object Detection

| No Comments | No TrackBacks

crossposted from

This summer, Dan Munoz of Carnegie Mellon University worked on helping the PR2 understand its environment using its 3-D sensors. Improving 3-D perception is important because it can help the PR2 with many tasks such as localization and object grasping. At CMU, Dan and collaborators are developing techniques to improve 3-D perception for an unmanned vehicle in outdoor natural and urban environments. These techniques first take in a cloud of 3-D points, usually collected from a laser scanner, and a label associated with each point. These labels identify such objects as buildings, tree trunks, plants, power lines, and the ground. Then, various local and more global features that describe the local shape and distribution of each object are extracted for each point and region of points. These labeled examples are then used to train an advanced machine learning tool that reasons the best way to combine the local and global features that describe each object. In new environments, this feature extraction process is repeated and given to the machine learning tool to determine what objects are present in the novel scene.

While at Willow Garage, Dan integrated this learning framework into ROS. As shown in the video, Dan experimented with helping the PR2 perceive objects on the room-sized scale, such as tables and chairs, as well as objects at the table-top-sized scale, including mugs and staplers. During the Intern Challenge, Dan also applied this same framework to distinguish between the three different types of bottles being served: Odwalla, Naked, and water. Dan developed the descriptors_3d package, the library used to compute various 3-D features for a point or region of points from a stereo camera or laser scanner. Additionally, he developed the functional_m3n package (Functional Max-Margin Markov Networks), the advanced machine learning tool that learns how to combine low-level and high-level feature information for each object.

Below are Dan's final presentation slides.

Daniel Munoz: Indoor Object Detection on Scribd (Download PDF from

CHOMP Motion Planner

| No Comments | No TrackBacks

cross posted from

Mrinal Kalakrishnan, one of three motion planning interns here at Willow Garage, is finishing up his summer project and returning to the University of Southern California. Mrinal has been working on a smooth motion planning and control pipeline for the PR2, introducing a new approach to object manipulation The key component of this work was the implementation of CHOMP (Covariant Hamiltonian Optimization and Motion Planning), a motion planner developed at CMU and Intel Research. You can find this implementation in the chomp_motion_planner package for ROS.

Mrinal chose to implement this motion planner on the PR2 because CHOMP's method of planning away from obstacles produces very smooth, natural-looking movements. You can see in the video that the PR2's arm trajectory is rather fluid and avoids unusual or awkward joint angles. The animation shows the arm optimizing the trajectory away from the bookshelf, while maintaining a smooth motion plan. Mrinal's work with CHOMP allowed for informative comparisons to be made with the two other motion planners being researched and implemented here, ompl and sbpl_arm_planner. All three motion planners use the same interface, making switches between the three systems very simple.

In addition to his work with CHOMP, Mrinal wrote the distance_field package for ROS which performs 3-D obstacle inflation to generate a cost-map for arm planners. He also wrote spline_smoother, a library of algorithms which can convert a set of waypoints, as typically generated by motion planners, into a smooth spline trajectory suitable for execution on a robot.

Below is Mrinal's end-of-summer presentation, where you can find additional details about his work here at Willow Garage.

Mrinal Kalakrishnan: CHOMP Motion Planner on Scribd (Download PDF from

With the releases of visualization 0.1 and robot_model 0.1, we are near the end of our core, robot-generic stack releases for ROS. With the initial release of pr2_mechanism 0.1, we are beginning our transition into PR2-specific capabilities. The 0.1 designation indicates that these stacks are still undergoing user testing and may have some API instability.

  • visualization contains the important rviz visualization tool. rviz is a 3D visualization environment that shows everything from the position of individual robot joints to the 3D sensor data to custom visualization markers for algorithms.
  • robot_model contains packages relating to representing information about the robot itself, including the robot description (urdf) and the current pose state of the robot (robot_state_publisher).
  • pr2_mechanism provides the lower-level software APIs for controlling the hardware of the PR2 robot.
visualization_common has also been updated to 0.9.1.



The slam_gmapping and navigation stack releases have been updated as part of today's release of the perception-related stacks.


Today we are releasing many of our perception-related libraries for ROS: image_common, image_pipeline, laser_pipeline, and opencv. All of these releases are 0.1 releases, which means that they are currently being user-tested for potential improvements.

  • image_common provides lower-level image-related dependencies, including image_transport, which provides a plugin architecture for transporting raw and compressed image data.
  • image_pipeline and laser_pipeline have very similar capabilities. laser_pipeline processes sensor data from laser range finders and can turn it into 3D point clouds. image_pipeline processes sensor data from mono and stereo cameras and can perform common image-processing tasks, like rectification and color processing. In the case of stereo, it can output 3D disparity images. These 3D representations can then be used in higher-level libraries.
  • opencv is a ROS wrapper for the popular OpenCV computer vision toolkit. OpenCV is heavily used in higher-level libraries to perform many common perception-related tasks. The version we are using in ROS is a pre-release version of the upcoming OpenCV 2.0 release.

rf_detector: 3D Object Recognition

| No Comments | No TrackBacks

crossposted from

Min Sun is returning to University of Michigan at Ann Arbor, where he does computer vision research with particular interest in 3-D object recognition. During his summer here at Willow Garage, he focused on recognizing table-top objects like mice, mugs, and staplers in an office environment. Min is the the primary creator of rf_detector (Random Forest), which recognizes objects and their poses. The detector uses the stereo camera along with the texture light projector to collect images and the corresponding dense stereo point clouds. From there, rf_detector predicts the object type (i.e. mouse, mug, stapler) and its location and orientation. This information can be crucial to have before attempting object manipulation, as many object types, such as mugs, require careful handling.

In the future, Min will be looking for ways to scale up this approach to a wider range of object classes. Min continues to look for other features and model representations that make object recognition more robust.

Min also wrote the geometric_blur package, which calculates geometric blur descriptors.

Here are the slides from Min's final internship presentation describing his work on rf_detector and the detection pipeline.

Min Sun: 3D Object Detection on Scribd (Download PDF from

Find this blog and more at

Monthly Archives

About this Archive

This page is an archive of entries from September 2009 listed from newest to oldest.

August 2009 is the previous archive.

October 2009 is the next archive.

Find recent content on the main index or look in the archives to find all content.