One of the new features in ROS C Turtle
was a critical component of our recent "hackathons." When fetching a
drink out of a refrigerator, for example, a robot has to perform
numerous tasks such as grasping a handle, opening a door, and scanning
for drinks. These tasks have to be carefully orchestrated to deal with
unexpected conditions and errors. We've previously used complex
task-planning systems to orchestrate these actions, but our developers
and researchers needed something more rapid for prototyping robot
behaviors.
One of our interns came up with an answer. SMACH
("State MACHine", pronounced "smash") is a task-specification and
coordination architecture that was developed by Jonathan Bohren as part
of his second internship here at Willow Garage. Jonathan came to us from
the GRASP Lab at University
of Pennsylvania and is now headed off to the Laboratory for
Computational Sensing and Robotics (LCSR) at Johns Hopkins. During his
extended stay here, SMACH was used in a variety of PR2 projects.
SMACH was first used in the rewrite of our plugging and doors code, then further refined during our billiards, cart-pushing, and drink-fetching
hackathons. In all of these projects, the ability to code these
behaviors quickly was critical, as was the ability to create more robust
behaviors for dealing with failure.
SMACH is a ROS-independent
Python library, so it can be used with and without ROS infrastructure.
It comes with important developer tools like a visualizer for the current SMACH plan and introspection tools to
monitor the internal state and data flow. There are already many SMACH tutorials that can be found on the ROS wiki, and we hope to see SMACH used to produce many more cool robotics apps!
Our Gazebo engineers have been hard at work bringing improvements to the Gazebo user interface and the simulation quality of the PR2 robot. These improvements will be available with the forthcoming release of ROS C-Turtle. Included will be the option to create simple shapes (boxes, spheres, and cylinders) and light sources (point, spot, and
directional) within the GUI, while a simulation is running. This
capability lets a developer dynamically change and even create a
simulation environment on the fly. These modifications can be saved to
file, and reloaded as needed.
You will be able to use the mouse to select and manipulate every object in the simulation. Once an object is selected, three rings and six boxes
appear around the object. The rings allow you to rotate the object in
all three axes, and the boxes provide a mechanism for translation. This
manipulation interface provides a convenient and intuitive tool
with which to modify a simulation. It's also possible to pause and
modify the world by pressing the space bar, or simply selecting the
pause button.
In addition to these GUI
improvements, more ROS service and topic interfaces will be added in the new Gazebo release. For details on the proposed Gazebo ROS
API, please check out this tutorial.
The upcoming version of Gazebo will also include improvements to the model of the PR2 robot. With the help of some graphic artists, we've added detailed meshes and textures to the PR2 model. These new meshes not only improve the appearance of the PR2 in simulation, but also improve the way sensors such as laser range finders interact with the robot. These new details, along with GPU shaders, create a realistic simulation of the PR2.
Gazebo's enhanced representations of the real world
demonstrate the power of developing and debugging algorithms using
Gazebo. Check out the videos below to see the new features in action!
We just released robot_model 1.1.0. This is an unstable development branch to prepare new features for the next ROS distribution. The most exciting new feature is the URDF to COLLADA conversion tool. For more details, check out the stack documentation and change list.
I Heart Robotics has released a rovio stack for ROS, which contains a controller, a joystick teleop node, and associated launch files for the WowWee Rovio. There are also instructions and configuration for using the probe package from brown-ros-pkg to connect to Rovio's camera.
You can download the rovio stack from iheart-ros-pkg:
All code is fully compatible with ROS 1.0. On the robot side, this will probably be the last release compatible with the NaoQI API 1.3.17, as the new version 1.6.0 became available recently.
Additionally, extended documentation for all nodes in the stack is now available at http://www.ros.org/wiki/nao/.
One of the new libraries we're working on for ROS is a web infrastructure that allows you to control the robot and various applications via a normal web browser. The web browser is a powerful interface for robotics because it is ubiquitous, especially with the availability of fully-featured web browsers on smart phones.
The web_interface stack for ROS allows you to connect to a Web-enabled ROS robot, see through its cameras, and launch applications. Beneath the hood is a Javascript library that is capable of sending and receiving ROS messages, as well as calling ROS services.
With just a couple of clicks from any web browser, you can start and calibrate a robot. We've written applications for basic capabilities like joystick control and tucking the arms of the PR2 robot. We've also written more advanced applications that let you select the locations of outlets on a map for the PR2 to plug into. We hope to see many more applications available through this interface so that users can control their robot easily with any web-connected device.
We're also developing 3D visualization capabilities based on the O3D extension that is available with upcoming versions of Firefox and Chrome. This 3D visualization environment is already being tested as a user interface for grasping objects that the robot sees.
All of these capabilities are still under active development and not recommended for use yet, but we hope that they will become useful platform capabilities in future releases.
Over the past month we've been working hard on PR2's capability to autonomously recharge itself. We developed a new vision-based approach for PR2 to locate a standard outlet and plug itself in, and integrated this capability into a web application you can run from your browser. We've developed this code to be compatible with ROS Box Turtle.
The following stacks have been released for Box Turtle:
Bosch's Research and Technology Center (RTC) has a Segway-RMP based robot that they have been using with ROS for the past year to do exploration, 3D mapping, and telepresence research. They recently released version 0.1 of their exploration stack in the bosch-ros-pkg repository, which integrates with the ROS navigation stack to provide 2D-exploration capabilities. You can use the bosch_demos stack to try this capability in simulation.
The RTC robot uses:
1 Mac Mini
2 SICK scanners
1 Nikon D90
1 SCHUNK/Amtec Powercube pan-tilt unit
1 touch screen monitor
1 Logitech webcam
1 Bosch gyro
1 Bosch 3-axis acceleromoter
Like most research robots, it's frequently reconfigured: they added an additional Mac mini, Flea camera, and Videre stereo camera for some recent work with visual localization.
Bosch RTC has been releasing drivers and libraries in the bosch-ros-pkg repository. They will be presenting their approach for mapping and texture reconstruction at ICRA 2010 and hope to release the code for that as well. This approach constructs a 3D environment using the laser data, fits a surface to the resulting model, and then maps camera data onto the surfaces.
Researchers at Bosch RTC were early contributors to ROS, which is remarkable as bosch-ros-pkg is the first time Bosch has ever contributed to an open source project. They have also been involved with the ros-pkg repository to improve the SLAM capabilities that are included with ROS Box Turtle, and they have been providing improvements to a visual odometry library that is currently in the works.
Efforts are underway to develop a navigation stack for the arms analogous to the navigation stack for mobile bases. This includes a wide range of libraries that can be used for collision detection, trajectory filtering, motion planning for robot manipulators, and specific implementations of kinematics for the PR2 robot.
Significant contributions were made to this set of stacks by our collaborators and interns over the past two years:
Ioan Şucan (from Lydia Kavraki's lab at Rice) developed the initial version of this framework while an intern at Willow Garage over the summer of 2008 and 2009 and has continued to contribute significantly since. His contributions include the OMPL planning library that contains a variety of probabilistic planners including ones developed by Lydia Kavraki's lab over the years.
Maxim Likhachev's group at Penn (including Ben Cohen, who was a summer intern at Willow Garage in 2009) contributed the SBPL planning library that incorporates the latest techniques in search based motion planning.
Mrinal Kalakrishnan from USC developed the CHOMP motion planning library while he was an intern at Willow Garage in 2009. This library is based on the work of Nathan Ratliff, Matthew Zucker, J. Andrew Bagnell and Siddhartha Srinivasa.
These stacks are currently classified as research stacks, which means that they have unstable APIs and are expected to change. We expect the core libraries to reach maturity fairly quickly and be released as stable software stacks, while other stacks will continue to incorporate the latest in motion planning research from the world-wide robotics community. We encourage the community to try them out to provide feedback and contribute. A good starting point for is the arm_navigation wiki page. There is also a growing list of tutorials.
Here are some blog posts of demos that show these stacks in use:
You can also watch the videos below that feature the work of Ben Cohen, Mrinal Kalakrishnan, and Ioan Şucan.
The individual stack and package wiki pages have descriptions of the current status. We have undergone a ROS API review for most packages, but the C++ APIs have not yet been reviewed. We encourage you to use the ROS API -- we will make our best effort to keep this API stable. The C++ APIs are being actively worked on (see the Roadmap on each Wiki page for more details) and we expect to be able to stabilize a few of them in the next release cycle.
Please feel free to point out bugs, make feature requests, and tell us how we can do better. We particularly encourage developers of motion planners to look at integrating their motion planners into this effort. We have made an attempt to modularize the architecture of this system so that components developed by the community can be easily plugged in. We also encourage researchers who may use these stacks on other robots to get back to us with feedback about their experience.
Best Regards,
Your friendly neighborhood arm navigation development team
Sachin Chitta, Gil Jones (Willow Garage)
Ioan Sucan (Rice University)
Ben Cohen (University of Pennsylvania)
Mrinal Kalakrishnan (USC)
In recent posts, we've showcased the rviz 3-D visualizer and navigation stack, two of the many useful libraries and tools included in the ROS Box Turtle
distribution. Now, we'd like to highlight what we're developing for
future distribution releases.
The first is the PR2 calibration
stack. The PR2 has two stereo cameras, two forearms cameras, one
high-resolution camera, and both a tilting and base laser rangefinder.
That's a lot of sensor data to combine with the movement of the robot.
The PR2 calibration stack recently made our lives simpler when updating our plugging-in code. Eight months ago, without accurate calibration between the PR2
kinematics and sensors, the original plugging-in code applied
a brute force spiralling approach to determining an outlet's position. Our new calibration capabilities give the PR2 the
new-found ability to plug into an outlet in one go.
The video above shows how we're making calibration a
simpler, more automated process for researchers. The PR2 robot can calibrate many of its sensors automatically by moving a small
checkerboard through various positions in front of its sensors. You can
start the process before lunch, and by the time you get back, there's
a nicely calibrated robot ready to go. We're also working on tools to help researchers understand how well each individual sensor is calibrated.
The PR2 calibration
stack is still under active development, but can be used by PR2 robot
users with Box Turtle. In the future, we hope this stack will become a mature
ROS library capable of supporting a wide variety of hardware platforms.
Now that the ROS Box Turtle release is out, we'd like to highlight some of its core capabilities, and share some of the features that are in the works for the next release.
First up is the ROS Navigation stack, perhaps the most broadly used ROS library. The Navigation stack is in use throughout the ROS community, running on robots both big and small. Many institutions, including Stanford University, Bosch, Georgia Tech, and the University of Tokyo, have configured this library for their own robots.
The ROS Navigation stack is robust, having completed a marathon -- 26.2 miles -- over several days in an indoor office environment. Whether the robot is dodging scooters or driving around blind corners, the Navigation stack provides robots with the capabilities needed to function in cluttered, real-world environments.
You can watch the video above for more details about what the ROS Navigation stack has to offer, and you can read documentation and download the source code at: ros.org/wiki/navigation.
We are excited to announce that our first ROS Distribution, "Box Turtle", is ready for you to download. We hope that regular distribution releases will increase the stability and adoption of ROS.
A ROS Distribution is just like a Linux distribution: it provides a broad set of libraries that are tested and released together. Box Turtle contains the many 1.0 libraries that were recently released. The 1.0 libraries in Box Turtle have stable APIs and will only be updated to provide bug fixes. We will also make every effort to maintain backwards-compatibility when we do our next release, "C Turtle".
There are many benefits of a distribution. Whether you're a developer trying to choose a consistent set of ROS libraries to develop against, an instructor needing a stable platform to develop course materials against, or an administrator creating a shared install, distributions make the process of installing and releasing ROS software a more straightforward process. The Box Turtle release will allow you to easily get bug fixes, without worry about new features breaking backwards compatibility.
With this Box Turtle release, installing ROS software is easier than ever before with Ubuntu debian packages. You can now "apt-get install" ROS and its many libraries. We've been using this capability at Willow Garage to install ROS on all of our robots. Our plugs team was able to write their revamped code on top of the Box Turtle libraries, which saved them time and provided greater stability.
Box Turtle includes two variants: "base" and "pr2". The base variant contains our core capabilities and tools, like navigation and visualization. The pr2 variant comes with the libraries we use on our shared installs for the PR2, as well as the libraries necessary for running the PR2 in simulation. Robots vary much more than personal computers, and we expect that future releases will include variants to cover other robot hardware platforms.
We have new installation instructions for ROS Box Turtle. Please try them out and let us know what you think!
Development on ROS began a little over two years ago. There have been many changes since those early days, and what started as a little project with a couple of developers has blossomed into a vibrant community supporting a wide variety of robots, big and small, academia and industry.
We hope that this 1.0 release will help the community even more and that you all will continue to participate and contribute.
While ROS 1.0 is an important step, we're even more excited by the many other libraries that have reached 1.0, including:
We look forward to your feedback and improvements on these building blocks.
-- your friendly neighborhood ROS 1.0 team
Changes
The focus of changes for this release was on bug fixes, cleanup, and resolving any remaining API issues.
There was one deprecated API removed in this final release, and will require migration for code not yet updated:
* roscpp: Removed deprecated 3-argument versions of param::get() and NodeHandle::getParam()
rospy now also warns on illegal names. We have been introducing more name strictness in ROS. ROS auto-generates source code of messages and services. The name strictness ensures that source code can be validly generated for these types. There are also potential features in our roadmap that will require name strictness as well.
For a complete list of changes in this release, please see the change list.
We are making these releases in advance of our first ROS "Distribution" (Box Turtle), which will package our stable stacks together. Much like a Linux distribution (e.g. Ubuntu's Karmic Koala), the software stacks in the distribution will have a stable set of APIs for developers to build upon. We will release patch updates into the distribution, but otherwise keep these stacks stable. We've heard the needs from the community for a stable version of libraries to build upon, whether it be for research lab setups or classroom teaching, and we hope that these well-documented and well-tested distributions will fit that need. We will separately continue work on development of new features so that subsequent distributions will have exciting new capabilities to try out.
We're very excited to be nearing the end of our milestone 3 process. These 1.0 releases represent several months of coding, user testing, and documentation, so that the ROS community can use a broad set of stable robotics libraries to build upon. We appreciate the many contributions the community has made to these releases, from code, to bug reports, to participating in user tests. These releases also build upon many thirdparty robotics-related open source libraries.
For these releases, you will find links to "releases" and "change list", where you can find information about downloading these releases as well as information on what has changed:
In most cases, the 1.0 releases will only contain minor updates from previous releases.
NOTE: not every stack in the final distribution will attain 1.0 status. We are reserving the 1.0 label for libraries that we believe to be the most mature and stable.