As part of our 10-year anniversary, we've selected a few key early contributors and asked them about their experiences with ROS.
Name: Ian McMahon
Company: Rethink Robotics
Favorite Fictional Robot: Probably C-3PO. Despite the fact that he is a worrywart, he always tells the main characters their exact odds of failure.
How did you get into robotics?
I have wanted to work in robotics for nearly as long as I can remember. I found myself intrigued about robotics after watching the Star Wars trilogy on loop for the entire winter holiday when I was about 8 years old. I remember being thoroughly surprised to find out that complex robots like C-3P0 didn't exist (yet) in the real world. Over the years, this interest was fed with the Lego Mindstorms Robotics Invention System with the RCX programmable brick. Then in high school, robotics turned into a full-blown passion of mine through FIRST Robotics. My dad (who is not an engineer) and I started the FIRST Team 1143 Cruzin' Comets in 2002 with the help of the community and three Lockheed Martin engineers who donated their time. After finishing my undergraduate degree in engineering, I came back as the electrical & programming mentor to the team in 2010. Now in its fifteenth year, Team 1143 is still going strong!
What is your current area of ROS development?
I am currently developing the ROS and Gazebo simulator interfaces for Rethink Robotics' Sawyer. These interfaces are used both by Rethink's developers to build Sawyer's Manufacturing software stack, as well as for end-users to program the robot in Research and Education mode. ROS runs down to the core of Rethink's robots: after receiving the state of the robot from the joint control boards, a ROS process then serves as our communication medium with the higher level motion planning framework and behavior tree. Our team wrote a new ROS Client Library for this purpose, which we recently open sourced: rosnodejs. Rethink's behavior tree and user interfaces are based on web technology with JavaScript and Node.js, so we built a new client library to facilitate integrating that technology into our ROS framework. The engineer who leads this development, Chris Smith, actually gave a talk on rosnodejs at ROSCon 2017.
How did you first hear about ROS?
I first heard about ROS from a May 2010 IEEE article outlining the institutions that were selected for the PR2 Beta program. Immediately intrigued by the humanoid PR2 robot, I was also a bit shocked that it was programmed with the completely open source software framework, ROS. As a budding roboticist and open source enthusiast, I was thrilled that both complex robotics and open source code could exist in the same platform. This article came at a critical moment for me as in May 2010 I was in the middle of deciding between schools for my masters degree. I made my grad school choice after seeing that one of the schools on my list, the University of Pennsylvania, was selected for the PR2 Beta program. While at Penn, I focused on visual and haptic perception research with the PR2.
How long have you been working with ROS?
Just about seven and a half years now. After reading about ROS in 2010, I downloaded Box Turtle on my Mac, discovered it was non-trivial to install on anything other than Linux, and installed Ubuntu on my computer for the first time. Discovering that I loved Linux was just a happy side effect of using ROS. Since then, I've used ROS with several platforms over the years, including the PR2, Lego NXT & EV3, Atlas, Baxter and Sawyer robots.
What's your favorite thing about ROS? Least favorite?
Far and away my favorite thing about ROS is the community's ethos of working together rather than against each other on hard robot problems. For far too long, robot software has been developed in isolation, with each new generation of roboticists needing to reinvent the wheel with a monolithic program that does everything. While no individual piece of ROS will give you a fully functional robot software stack, taken together, and massaged a bit, a roboticist can "apt-get install" their way to a viable robotics software architecture, and then spend more time focusing on building their own robot applications. My least favorite aspect of ROS is its lack of support at the embedded layer. Larger robots typically usually use embedded hardware for commanding actuators and reading sensor values before communicating back with a more powerful host computer. Although ROS is fine if you're running on an embedded computer as powerful as a Raspberry Pi, it is not as useful for smaller (16 or 32-bit) microcontrollers. With smaller microcontrollers, ROS' memory and CPU footprint are too large to run properly, which is further compounded by ROS' lack of ability to communicate with the rest of the system in real time. At Rethink we built our own communications protocol to interface with the distributed Joint Control Boards (JCB's) of Baxter and Sawyer. The robot's ROS communication begins only after the JCB data reaches the robot's computer. It would be wonderful to have a lightweight and real time compatible implementation of ROS. I believe this is one of the goals for FastRTPS in ROS 2, to provide system-level ROS communication while running on things as small as 16-bit microcontrollers.
What do you do differently because of ROS? Or How would you do things differently if you didn't have ROS?
ROS and the ROS community touch several aspects of my day-to-day work, so this is actually a tough question. If I didn't have access to ROS, maintaining a complete and fully-featured researcher's interface to the Baxter and Sawyer robots would be significantly more difficult. As it is currently written, I am able to expose some of the same interfaces on Baxter and Sawyer for researchers that the manufacturing software stack uses to control the robot, without modifying much of the robot's source code. This means I can focus my development resources on the open source framework that surrounds and interfaces with the robot (which we call the Intera SDK). I also count on the community resources and tutorials on the ROS Wiki and ROS Answers to explain the underlying mechanisms of communication to users of the Rethink Robots. All too often, I find myself visiting these resources for my own development work.
What has been your favorite ROS-based project you've worked on and why?
My favorite ROS project is MoveIt!. I have worked with the MoveIt! team for the last three years in supporting Baxter and Sawyer. MoveIt! is a motion planning framework that enables complex robot arms to effectively plan arm motion paths in space while avoiding obstacles using sensor data. This framework is generic enough to function on most robot arms and yet complex enough to allow robots to complete tasks akin to the Amazon Picking Challenge. The MoveIt! project is used both in research and in industry through ROS-Industrial. Through its plugin framework, one can swap in different Inverse Kinematics Solvers and Motion Planners, and use a variety of vision sensors. This gives users giant amounts of flexibility to integrate MoveIt! with a new robot. All of this brings robot manipulators closer to being useful in arbitrary real-world scenarios, which every roboticist knows is a tall order.
This is part of an ongoing series: ROS Contributor Spotlight
Have your own ROS story to tell? Let us know at comm@openrobotics.org. And be sure to check back when we celebrate the 25th, 50th, and 100-year anniversaries of ROS.