ROS Groovy Galapagos
ROS Groovy Galapagos is the sixth ROS distribution release and was released December 31st 2012. In this release we have focused on the core infrastructure of ROS to make it easier to use, more modular, more scalable, work across a larger number of operating systems/hardware architectures/robots and most importantly to further involve the ROS community.
ROS Groovy Galapagos
- Major Updates
- Change Lists of Note
- Plans and Special Interest Groups
ROS Groovy Galapagos will be primarily targeted at the Ubuntu 12.04 (Precise) release, though compatibility with other Linux systems as well as Mac OS X, Android, and Windows is anticipated. For more information on compatibility, please see REP 3: Target Platforms.
Groovy supports releasing, documenting and integration testing of catkin-based packages as well as rosbuild-based packages.
Please see the installation instructions. There are binary packages available for Ubuntu distributions, Oneiric, Precise, and Quantal for both 32 and 64 bit architectures. There is also improved infrastructure for building from source, most heavily tested on OSX. And experimental instructions for other platforms.
Ubuntu Users: Please make sure to use the Python tools from apt and not pip. The pip based installs tend to go out of date and not get updated with the rest of the system.
Mass migration of code to GitHub
Traditionally, ROS code has been scattered across numerous version control systems (git, svn, hg, etc) across different hosting services throughout the world. Though the ROS wiki has acted as a central point of documentation, issue/ticket tracking has been just as disparate as the usage of VCS tools.
With ROS Groovy, an effort has been made to move core packages to GitHub along with all issue tracking. This has brought several benefits including making ROS more available to the wider open source community and providing VCS consistency for ROS packages. Most importantly, utilizing GitHub has involved the ROS community more and given it more ownership of the codebase. GitHub's pull requests have made it much easier for the core ROS development team to apply patches from the community as well as respond to design feedback more rapidly. In the last development cycle there have been 71 people who have contributed to the rosdistro file, using 239 pull requests and there exist 115 public forks of the rosdistro project on GitHub. The ease of forking and submitting pull requests has made this higher level of community engagement possible. GitHub additionally provides excellent tools for navigating code, managing issues/milestones, and increasing developer communication. All ROS package developers are highly encouraged, but not required, to utilize GitHub for their own repositories so as to further unify both the ROS codebase and community.
On GitHub, ROS repositories are spread across several GitHub "organizations" to group related repositories in an intuitive manner:
ROS Perception - Tools for perception and vision
ROS Drivers - Drivers for sensors and other hardware
Turtlebot - Turtlebot drivers, software, and apps
New Build System - catkin
The most striking and significant change in Groovy is the introduction of a new build system called catkin which will eventually fully replace the original rosbuild build system. catkin was developed to address several drawbacks in rosbuild so that ROS can continue to grow and scale. As opposed to rosbuild catkin promotes Filesystem Hierarchy Standard (FHS) compliance, making it much easier to distribute ROS packages on other operating systems and architectures.
Though a prototype version was already introduced in fuerte for a only few packages, catkin is now the official build system of ROS. rosbuild will continue to be supported for the forseeable future, but in time will be deprecated. catkin has been designed to be backwards compatible with existing rosbuild packages and stacks that have not yet migrated. Most of the core packages have already been migrated and new packages should utilize catkin.
catkin - Main wiki page
catkin/conceptual_overview - Reasoning behind the move from rosbuild to catkin
catkin/Tutorials - Tutorials
catkin/migrating_from_rosbuild - Migrating from rosbuild to catkin
Removal of Stacks
With the new version of catkin in Groovy, the concept of Stacks has been removed. One of the main reasons for this was that there was a duplication of dependency tracking between packages and stacks. Previously packages only depend on packages, and stacks only depend on stacks, so the stack which contains a package must depend on all of the stacks which contain the dependencies of that package. Additionally, by removing stacks the code base has become more modular because you can install any package and its dependencies, where as in the past a package would often unnecessarily pull in its stack and other unused dependencies.
To preserve some of the benefits of stack, the concept of "metapackages" replaces the concept of stacks. A metapackage is not a container of packages like rosbuild stacks were, but a named set of references to packages. It can be used to preserve some structure using a catkin metapackage replacing an old rosbuild stacks (this helps with for backwards compatibility of documentation with rosbuild, e.g. in wikis). A metapackage can depend on packages which don't necessarily reside in the same folder or source repository. This allows for more flexibility of development workflows, allowing to have separate repositories for packages that belonged to a single stack.
This is captured more formally in REP 127
New Package Release System - bloom
With catkin also comes a new package release system known as bloom. bloom not only simplifies your workflow when releasing ROS packages to the world, but also provides features to make it easier to maintain released packages, version them, and patch/backport changes.
bloom takes your catkin packages and releases them to a "release repository". All of the ROS release repositories are hosted in the ros-gbp organization on https://github.com: https://github.com/ros-gbp. The release repository contains snapshots of your source repository (the repository you develop on) and provides tags to the snapshots. Additionally it creates a "release" branch for each package in your upstream repository on which you can make patches and it provides tags for each released version of your packages. Finally, bloom can generate files for building Debian .debs on the ROS build farm. Because we host our release repositories on https://github.com, there are known urls for each release of each package. This makes the release repositories a good source for building released ros packages from source.
bloom allows a source code repository to contain any number of packages, related or not. The only caveat to having multiple packages in a single repository is that they must be released with a common version number, i.e. one release version number per repository.
New GUI Tools - rqt
In Groovy, core ROS GUI tools (rxconsole, rxgraph, etc) have been significantly refined. These tools have been replaced by a single new tool called rqt. rqt is a software framework that implements the various GUI tools in the form of plugins. One can run all the existing GUI tools as dockable windows within rqt -- even rviz! The tools can still run in a traditional standalone method, but rqt makes it easier to manage all the various windows on the screen at one moment.
To run the reconfigure tool, either load it from rqt or run the following:
rosrun rqt_reconfigure rqt_reconfigure
rviz has been significantly redesigned with a cleaner user interface and and a new plugin API covering all major functions. RViz is now "on its own" and so can be installed directly (on Ubuntu for example) as ros-groovy-rviz. It no longer depends on visualization_common, instead depends directly on standard OS installations of OGRE, easing compilation from source. Python support has been greatly expanded, so rviz windows, displays, viewpoints, and tools can all be manipulated from Python now.
The "save" file format has also changed: it now saves into "*.rviz" files which are in YAML format, easing manual editing, comparison, and automatic generation.
pluginlib and class_loader
pluginlib, the library for creating plugins in C++ code, has been almost completely rewritten while retaining 100% backwards compatibility. New features include thread-safety, simplified API, and true library class introspection. pluginlib is now built on top of a new ROS-independent package called class_loader which can be used to work with plugins in software that does not utilize the ROS build system.
The Gazebo simulator project, the simulation engine used within the simulator_gazebo ros stack, has recently undergone major improvements and re-factoring as it went from version 1.0 to 1.3. The Groovy release of Gazebo has been updated to run with gazebo 1.2.x with pending updates to upgrade to gazebo 1.3.x in the near future.
All changes in the underlying simulator can be found on gazebosim.org, as well as commonly asked questions and answers for gazebo via gazebo answers page.
With the conversion to Catkin, a new method for including the TinyXML XML parser is required. See the TinyXML Documentation.
Other New Packages
depthimage_to_laserscan replaces pointcloud_to_laserscan
The significant overhaul of core ROS infrastructure has meant a significant change in fundamental ROS documentation, primarily in the tutorials. It is recommended to review them again, even if you are a ROS veteran, at http://www.ros.org/wiki/ROS/Tutorials. All the Tutorials beyond Creating A Package have been converted to support the new and old build system.
Automatic Documentation Jobs
One of the valuable services provided to the ROS community is the public indexing of packages and automatic documentation generation onto ros.org. The entire system has been overhauled to parallelize and isolate failures of individual repositories from stopping other repositories from being documented. The new infrastructure now also provides properly versioned documentation for each ROS distro. For more information on how to be indexed in the new system see the Get Involved page.
As with any release there have been some areas which will require updating. In this cycle most of the changes have been adding APIs while maintaining backwards compatibility for the old APIs.
Moving From rosbuild To catkin
The biggest change is the switch from rosbuild to catkin. This switch has been done while providing backwards compatibility, such that legacy packages can depend on converted packages without being changed. However catkin based packages cannot depend on rosbuild based packages. This leads to what has been called the rising tide where the conversion to catkin must propogate up the dependency tree. Wet packages, catkin based, are always below the dry packages, rosbuild based, as the tide rises.
A detailed guide to converting packages can be found in the catkin documentation. catkin/migrating_from_rosbuild
Change from Wx to Qt
One significant change is the transition from Wx to Qt. If you have been using Wx graphical toolkits it is recommended to switch. Most of our primary visualization tools have been ported to Qt. And there are many plugins for them. There are tutorials on the rqt page on how to write new Qt based plugins.
laser_drivers REP 117 Deprecation Completed
If you have been using the laser_drivers the changes made by REP 117 have now become the default option. For more information see REP 117
Change Lists of Note
Plans and Special Interest Groups
The planning for the Groovy release was coordinated on the planning page.
A significant amount of the Groovy development was coordinated by Special Interest Groups. These groups are summarized at the bottom of the planning page.
ROS Enhancement Proposals (REP)
Four REPs have been finalized during the Groovy development cycle: