A computer science professor of mine, “back in the day,” once said that the greatest challenge in the future of software development will rest in the realm of integration. This is certainly true in robotics, if nowhere else. Due to the complexity involved with robotics, developers typically focus on very specific problems and develop very specific solutions to meet those challenges, accordingly. Path planning, SLAM, edge finding, handle manipulation, road recognition, planning with resource constraints, pattern and object recognition, D*, data mining algorithms, reinforcement learning, Kalman and particle filters are just some examples of “specialty” subjects in robotics and AI which people have developed pivotal software solutions to. An immense opportunity has existed, and will continue to exist, in bringing these together into more generalized solutions which are able to reap the benefits of the more specialized solutions within a cohesive whole.
An obstinate challenge in doing just that has been the technical complexities involved with integrating the plethora of solutions into a grouping which facilitates seamless communications among these solutions. If someone were to attempt at integrating more than a handful of specialized solutions and frameworks, the time involved would be nearly prohibitive to accomplishing the desired goal. Robot Operating System (ROS) seems to be changing the game a bit to allow just such an endeavor to be more tractable. Now that core ROS development has stabilized, a large number of groups have been feverishly working on providing their “specialty” solutions as packages which seamlessly integrate with ROS. And that means that they are then much more inter-operable with just about any other package that works with ROS.
There is truly a dizzying number of packages that have been provided for ROS (navigable at http://www.ros.org/browse/list.php). The packages range from algorithms for SLAM to hardware communication packages to wrappers for programming languages to wrappers for off the shelf systems and other existing software. It is this last category that gets me really jazzed. With such wrappers being introduced (not to be confused with “rappers,” a slightly different breed) , we’re now able to leverage a number of very solid and mature tools and frameworks without being bogged down with low level integration and communication issues. I’d like to briefly highlight a few ROS packages which provide just such accessibility to existing tools and frameworks:
- trex_ros for trex-autonomy: The Teleo-Reactive Executive (T-REX) is a hybrid executive combining goal-driven and event-driven behavior in a unified framework based on temporal plans and temporal planning. (I’ve been tearing through the documentation here and here with the hopes of trying it out soon on my home projects.) A cool did-ya-know about T-REX is that it leverages the europa-pso planning framework available from NASA Ames Research Center.
- antlr for ANTLR: ANTLR is a language tool that provides a framework for constructing recognizers, interpreters, compilers, and translators from grammatical descriptions containing actions. There’s a mouthfull! Really what ANTLR provides is a means to formalize and create your own domain-specific language…imagine a language specifically geared towards commanding your robot in a particular domain, ANTLR enables you to do just that.
- rosglue for RL-Glue: Recently highlighted via ROS News, RL-Glue (Reinforcement Learning Glue) provides a standard interface that allows you to connect reinforcement learning agents, environments, and experiment programs together, even if they are written in different languages.
- openrave for OpenRAVE: OpenRAVE is targeted for real-world autonomous robot applications, and includes a seamless integration of 3-D simulation, visualization, planning, scripting and control. OpenRAVE is particularly useful for planning movements for robotic arms and manipulators.
- thea for Thea OWL Parser: Thea is an Prolog library that provides complete support for querying and processing OWL2 ontologies directly from within Prolog programs. (Honestly, I can’t say that I know much about this, but I keep reading more and more about OWL2…it seems that this is gaining and maintaining widespread interest in AI and autonomous robotics.)
- karto for Karto Mapping: Karto has been around for a while and came around to open sourcing their mapping libraries earlier this year. The karto ROS package provides a means to leverage this solid library with ROS.
- vision_opencv for OpenCV: I don’t think I need to say much about this…just use it!
- gmapping for GMapping: GMapping is a SLAM (Simultaneous Localization and Mapping) solution using particle filters; the gmapping ROS package wraps the entire application for use within ROS. (If you’d like to learn more about SLAM, there’s no better resource that Sebastian Thrun’s Probabilistic Robotics.)
- While I’ve been focusing on integration with software packages, I’ve got to mention nxt for Lego NXT: Recently announced on ROS News, this stack provides a number of tools for integrating NXT with ROS along with a novel use of NXT’s Lego Digital Designer for use within the rviz simulator…very slick.
The sampling above highlights just a few of the efforts by various groups to facilitate the integration of solid, existing tools and frameworks into ROS for easier communications with other packages and custom development. Ultimately, these efforts are lowering the barrier to integrate many great ideas and solutions into a more cohesive whole. This seems like a great indication of the current state of robotics…a sign that the industry is finally maturing enough that we’re now working towards integrating existing solutions – rather than re-inventing the wheel – in order to more aggressively push the envelope of what’s attainable and what’s imaginable.