Willow Garage Blog

August 31, 2009


We've been moving announcements of software releases over to ROS.org. In case you missed the accouncements there, here are some recent updates:


August 27, 2009

White Lab Progress

Part 1: Building a New Lab

Last Friday, construction of the manufacturing area was completed, electrostatic dissipative (ESD) flooring was installed, and the stockroom cage and shelving went up. The interns attempted to move in and claim the area as their own, but quickly realized the cage had a lock and, upon hearing they could not get out until their summer projects were completed, attempted to escape.

Intern BunksIntern Escape

Once the fun was over, the manufacturing materials group began bringing in raw materials. None too soon, as we now have 91% of all the PR2 build materials on order, and over 350 of these components already in the building. We are expecting a sharp increase in parts shipments in the coming weeks as we continue to prepare for the upcoming PR2 builds.

The PR2 has over 6,000 parts which must fit into the stockroom, necessitating the need for high-density shelving. These racks were erected earlier this week, and we've been busy boxing up and organizing all of the received parts. Larger or heavier PR2 components are stored on pallet racks or larger shelving units. The stockroom also has an area for incoming part inspection, as well as a workstation to enter part data into the manufacturing system.

Our team continues to purchase the final parts for the PR2, as well as specialized assembly fixtures, torque drivers, and additional ESD equipment. Soon, the production floor will be configured with work cells, and we'll be ready to build some robots.

-- John Blazek

August 24, 2009

Ioan Sucan is headed back to Rice University after his third stay here at Willow Garage. Ioan is a motion planning researcher and is the author of Open Motion Planning Library (OMPL), a library of sampling-based motion planning algorithms. These algorithms are important for the PR2 because they enable the arm to grasp and manipulate objects, while simultaneously avoiding collisions with people and other still or moving objects.

This past winter, Ioan and Radu Rusu used OMPL to do dynamic collision avoidance. This summer, Ioan was able to make many improvements to OMPL so that the PR2 can grasp and manipulate objects in cluttered indoor environments. In the video, you can see how the PR2 is able to grasp objects while moving its arm through complex obstacle courses. Data from the tilting laser scanner is used to construct and update a 3D-representation of the environment, allowing the arm to avoid even moving obstacles.

Ioan also improved the robot_self_filter and the collision_map. When the PR2's arm moves in front of the sensors, two problems occur: the arm looks like an obstacle in the environment, and the arm blocks the robot's view of the environment behind the arm. The robot_self_filter, in combination with the collision_map, allows the PR2 to disregard its arm as an obstacle, and "remember" objects behind the arm.

Here are the slides from Ioan's end-of-summer presentation describing his work on OMPL and other projects.

Ioan Sucan: Motion Planning for the PR2 Arm on Scribd (Download PDF from ROS.org)

August 24, 2009

Alex Sorokin of University of Illinois, Urbana-Champaign has been hacking on many projects this summer. Alex is the author of the CV Web Annotation Toolkit, which is an open source tool that helps researchers in computer perception collect and classify data, with the help of workers on Amazon's Mechanical Turk. If you're a researcher collecting a data set, you can use this toolkit to submit images to Mechanical Turk and pay people to label them for you. For example, you can instruct Mechanical Turk users to draw boxes around all of the people in an image, or draw polygons around people's hands. These manually-labeled datasets allow researchers to test their own algorithms and compare them against what a person sees. If you're worried about the quality of results that random Turkers might give you, you can easily let an additional set of users grade the results that you get back, and increase the likelihood of accurate responses.

In addition to helping our researchers collect data sets, this toolkit is also very useful for our robots. For just a couple of dollars, you can easily submit images to Mechanical Turk and have users teach the robot where your refrigerator and dishwasher are, what your cups look like, or where your power outlets are.  We're a long way from having robots that can identify objects in an environment as well as humans can, but toolkits like Alex's help us to bridge that gap by allowing humans to lend their abilities to robots.

In addition to his work with Mechanical Turk, Alex came up with many great extensions to ROS. These include bagserver, which enables random-access into ROS bag files, and bag_image_view, which lets you visually scan through images in a bag file and play them back.

Below is Alex's end-of-summer presentation, which discusses his various contributions in greater detail.

Alex Sorokin: CV/Mechanical Turk Presentation (Download PDF from ros.org)

August 20, 2009


ROS.org is the new home of ROS. This is a major step for us and speaks to our changing perspective now that we are marching towards Milestone 3. Whereas Milestone 1 and Milestone 2 focused on what we could accomplish as a company with our PR2 prototype robots, Milestone 3 is about looking beyond Willow Garage and enabling the ROS and future PR2 community to do even greater things. Developing ROS as open source with Stanford from the early stages has been an exciting, informative experiment for us as a company. We're pleased that it has shown such great promise, as it has allowed others to extend ROS beyond our own capability. The decision to go open source has also enabled the ROS Community to grow substantially over the past year. There are already eight open-source code repositories of ROS code outside of Willow Garage and we hope to see even more in the future as ROS matures.

As part of this growth, we feel that ROS.org will represent a new home for the ROS community. It's not about us anymore -- it's about you and the things that you can do with ROS on your robots. As part of this transition, we've worked hard to clean up the ROS Wiki and develop new features to help you discover new ROS software more easily. There is also a new ROS blog,  where we will announce future releases of ROS Stacks. We hope that you'll register for an account on the Wiki and start contributing software content of your own. We're very excited to see where the community takes ROS.

August 17, 2009


Above: Team Won's PR2 gets ready (L). Willow Garage CEO Steve Cousins and Advisory Board Member Larry Page get a kick out of their waiter (R).

Last week we held Willow Garage's inaugural Intern PR2 Challenge. We divided the interns into teams and presented them with this year's challenge: use a PR2 to serve drinks to judges positioned around the cafeteria and clean up their mess. Teloperation was allowed, though each team would be scored on technical merit. The teams were given 72 hours, starting Friday afternoon, to build and test their PR2 waiters.

On the following Monday, the teams were each given 20 minutes to run the challenge. What resulted far exceeded our expectations. Not only had they achieved the objectives of the challenge, but they had taken the time to create entertaining presentations that demonstrated great service quality. Team Two put together a User's Manual (see below) that described their system in detail. Team Won followed a partly improvisational script that had the audience frequently laughing.

While both teams mixed autonomy and teloperation in their final systems, including sophisticated motion-planning algorithms for grasping the bottles, they took very different approaches overall. Team Won focused on humor-driven human-robot interaction, using pre-recorded sayings to create a live theatrical performance with the PR2. Team Two focused more on autonomy and created a Web application on a touch-screen phone to enable the judges to place their orders. Both teams also put together their own interfaces for controlling the PR2 behind the scenes: Team Two used a GUI to switch between various goals while Team Won used a LISP-based scripting system. Their approaches taught us a lot about how we can extend our codebase and even gave us some new packages, like an Ogg-Theora-based streaming video package for ROS.

Our judges -- CEO Steve Cousins, Founder Scott Hassan, HRI reseacher Leila Takayama, and Advisory Board Member Larry Page -- had a hard time judging a winner. Both teams took such vastly different approaches to solving the challenge that they had to call it a tie! This was fun and sucessful event that we plan to hold in coming summers.

-- Melonee Wise

Team Two Manual on Scribd (Download PDF from ros.org)

August 13, 2009

Group photo


This week we are starting to wrap up our second successful summer internship program with the typical summer internship presentations and goodbye celebrations. Our recent posts about Detecting Planar Objects and Articulation Models and Breaking Eggs highlight just two of the many research projects that are starting to come to a close.

It has been a great summer -- we've had the pleasure of hosting and working with twenty-one talented students. This summer's students came from domestic and international universities, including Berkeley, Carnegie Mellon, ETH Lausanne, Princeton, University of British Columbia, University of Freiburg, University of Illinois Urbana-Champaign, University of Southern California, University of Pennsylvania, Rice University, and Stanford.

Since beginning the internship program two years ago, it's been exciting to watch the program grow from one student to the twenty-one we had this summer. I have enjoyed not only collaborating with the interns on projects, but also getting out of the office to have some fun. This year we caught some waves river rafting, tried to fly with indoor sky diving, and chased each other around in intern vs. mentor laser tag. I have made many friends this summer and hope to make many more in the coming years of the internship program.

--Melonee Wise

Currently we are accepting applications for our fall, winter, and spring internships, apply now at jobs@willowgarage.com. Please make sure to link to any cool or relevant projects in your application.

Group photo

August 13, 2009


It took over a year of development and our first Milestone to develop and release the first stable version of ROS, our robot software framework. Now, six months later and with another Milestone behind us, we're ready to start committing to same level of stability with the software we're building on top of ROS. Today we are launching the first of our ROS "Stack" releases: common_msgs 0.9 (download/SVN tag), simulator_stage 0.1 (download/SVN tag), and visualization_common 0.9 (download/SVN tag). In the coming weeks there will be many more releases, including our navigation software, drivers, controller and geometry libraries. This is all part of our Milestone 3 efforts, which focus on the ROS and PR2 User Experience.

Stacks can be thought of as libraries for ROS. Some will be specific to our PR2 robot, but many are already in use on other robot hardware as diverse as the iRobot Create, Kawada HRP2-V, and Videre Erratic. This first set of releases contains some of the most general libraries that we are developing. common_msgs defines many basic ROS message types that are useful in robotics-related software. visualization_common defines ROS message types for use in our visualization tools as well as providing wrappers around the popular open-source 3D engine, Ogre. simulator_stage allows you to use the popular open-source 2D simulator, Stage, with ROS.

The release of these stacks begins a shift in how we expect ourselves and others to develop on top of ROS. ROS started off as experimental software in how a robot software framework could take advantage of networked computer resources. The various ROS stacks started off as research, with a far-off goal of an integrated software platform on a brand new robot platform. Now both the software and hardware have taken shape: the lab to build the final PR2s is nearly complete and we are starting the first of our many stack releases. As we've experienced with our own prototypes, it's hard to develop against a moving target, but now we are transitioning to stable platforms. These stable platforms will help accelerate development and make it easier to share and exchange code.

For these initial releases, we will be using two version number indicators: 0.1 and 0.9. We are using 0.9 for stacks that are stable. They will be released as 1.0 when they have more complete documentation. We are using 0.1 for stacks that are still undergoing review. While we believe that they are mostly stable, we are also conducting user testing here at Willow Garage to verify that this is true. These, too, will receive 1.0 designation once our user testing is complete and feedback is integrated into our APIs and documentation.

If you were an early adopter of ROS, you might be asking, "so what do I do with these releases?" The answer for most is: if you are using code from a stack that has hit 0.9, now is a good time to migrate any out-of-date code. Otherwise, we recommend waiting until we have made some of our higher-level stack releases (e.g. navigation stack) before changing your installation process to use these releases instead. We will also be releasing tools soon to help you manage and install stack-based releases.

 -- your friendly neighborhood ROS and ROS Stacks team

August 13, 2009

Milestone 3

Our goal with the Personal Robotics Program at Willow Garage is to create a platform for researchers and developers to more quickly advance the state of the art in robotics. We established four Milestones towards this goal and are now halfway there. In December, we completed Milestone 1, which was to autonomously navigate for 2π kilometers. This demonstrated basic hardware and software functionality for everything except the arms. In June, we completed Milestone 2, which required the robot to open doors, plug into different outlets, and autonomously navigate for 26.2 miles. This tested the manipulation capabilities of the PR2 hardware and further stressed the sensing and executive capabilities of the ROS software.

Milestone 3 is our PR2 and ROS User Experience Milestone. This requires us to shift our focus away from our own internal research accomplishments and instead focus on the ROS and PR2 community. We have created a list of open source software components that will be available when the robot ships and a collection of almost a hundred use cases for ROS and the PR2. Components range from high-level groups of software like the Navigation Stack to our lower-level common message structures. ROS/PR2 use cases range from driving the robot to writing and sharing new algorithms in ROS. This Milestone will make sure that the user experience around the components and use cases meets a high standard. Each item on the list of use cases has an owner who is responsible for thoroughly testing and improving the components to the point where our internal "user experience board" is convinced that the components and use cases have been sufficiently tested and have successfully passed.

We are committed to creating a platform that will accelerate advances in the field. Robustness and usability are the keys to ensuring that the platform will be successful. We hope the community won't be shy about making suggestions about how to continually improve ROS and the PR2. As for Milestone 4? That will be when we ship out the first 10 robots for researchers and developers to build on.

August 13, 2009

ROSROS 0.7.2 has been released (SVN tag)! This is a patch release that fixes various issues in preparation for our upcoming ROS Stack releases. We have also been focusing on improving error messages and performance based on ongoing user testing. The detailed change list is below.

-- Your friendly neighborhood ROS team


  • Fixed subscription callbacks to not starve other callbacks in a certain case.
  • Doxygen fixes for deprecated functions that were not pointing at the correct new locations.
  • Fixed `_param:=value` on anonymous nodes when `__name:=` was specified
  • Fixed race condition that would cause a "call to empty boost::function" exception


  • fixed bug with Time objects jumping to zero with simulated time on publish in certain cases
  • bug fix to numpy_msg
  • suppress error message stack trace for common case of connection refused


  • Fixed bug where checkbag incorrectly reports that a bag is up to date if it has moved without md5sum changing
  • Fixed bug where messages including messages from other packages where not populating migration rules fully
  • Stop displaying redundantly auto-generated rules boundary conditions where multiple scenarios lead to the same parallel generation
  • Programmatic use of checkbag/fixbag within a single script now cache initial load of message migrator.  This gives huge savings when checking/fixing large numbers bags in batch, such as during testing.
  • Added "fixbag_batch.py" script which operates on multiple bags more easily and efficiently


  • fixed major issues with generate_dynamic and Header messages
  • better error message in generate_dynamic
  • better cleanup of dynamically generated .py / .pyc files in roslib
  • Fixed manifest for rosrecord so external users can use librosrecorder now that it's been broken out from just a header. 

roslib: fixed cache use of ROS_PACKAGE_PATH when it is not set
rostopic: bug fix to bw command and better error reporting
roswtf: numerous updates, including better offline behavior, and fix to duplicate node rule
topic_tools: export MuxSelect header
rosmsg: bug fix to indentation of constants with rosmsg show
roslaunch-deps: better handling of bad xml
rostest: suppress output from master during tests

  • Fixed assertion on page up/arrow up when the number of messages in the list control is 0
  • Fixed high CPU utilization when no new messages have arrived

rosdep: festival, libusb (r5530)
rosstack: bug fixes so that it works again, and handles unversioned stack dependencies. uses ROS_ROOT and ROS_PACKAGE_PATH if ROS_STACK_PATH is not defined. Expose librosstack via package manifest and moving rosstack.h into the package include directory