I have only used the Robot Operating System (ROS) for several small things so I wanted to review a book on learning ROS both so that I could learn more about ROS and because ROS is increasingly being used for more robotics applications and is good for all of us to become familiar with it.
ROS is a framework that sits on top of a standard operating system (typically Ubuntu) and provides modules that are typically used in a robot including drivers, messaging, visualizations, and computer vision.
This book Learning ROS for Robotics Programming by Martinez and Fernandez (published September 2013) starts from the beginning with the installation of ROS, explaining the format of the framework, visualizations, adding and using sensors, putting a navigation layer on top of that, and concludes with a bunch of sample projects. The English in the book is a little bit off grammatically and with some of the word choices (this could be based on non-native speakers or non-american styles of writing), however it is still clear and easy to understand; so not a problem.
I imagine that they started writing this book a few years before it was published since this book uses a version of ROS called Fuerte, which is only supported in Ubuntu 12.04 and prior and is no longer supported in the Ubuntu 12.10 (October 2012) version. The book also goes through setting up a virtual machine with virtual box as an alternative to installing Ubuntu natively. This is interesting since there is a growing trend to use virtual machines for running robots (and other systems) since they are easy to backup, recover, port to new hardware, and run local instances to aid in development. The big downside to using a virtual machine is interfacing with hardware. Passing hardware device ports into the VM can sometimes be difficult, unreliable, and have increased latency.
Chapter 2 of the book jumps into the different components that form ROS. It goes through the different types of bags, nodes, messages, etc.. in detail and does a good job explaining each topic and the differences between them. One interesting thing is how the authors divide ROS into three different sections. The first two are all about how ROS is organized and the different types of components. The third section of ROS that they enumerate is community; the community is all of the resources out there online for getting code and support. It is interesting that they included that as one of the three core section to ROS. People often forget about the support a community can provide and how much time it can save to post a question on a forum as opposed to struggling through the problem (I recognize struggle can be good).
I like the approach of putting debugging and visualizing data early on in the book. Many books save this for the end.
The sections on how to add sensors and actuators is good for basic sensors but does not have a good coverage of actuators. The sensors and actuators that were selected are mostly hobbyist level and higher quality sensors are not touched. Sensors of note that were covered was the Hokuyo LIDAR and the Xsens IMU. There are good discussion on adding firewire (IEEE 1394) and USB cameras (which is not trivial to add in ROS). Gig-E cameras are blaringly missing from the discussion and needs to be added! It would have been nice if the authors provided a section on developing a driver for a random device (they touched upon this in the interfacing with an arduino section). It also would have been nice if they provided the links to get sensors that they did not talk about, but are available via apt-get.
There are two sections on adding navigation (basic autonomy ability) to the robot. The first section is kind of a section on how to tie all the sensor data together, work out the transforms, and create the core controller for your robot. Some of this stuff such as the broadcaster and listener for inter process communication probably should have been introduced earlier on. The second navigation section is where you actually get into navigation and planning.
The book concludes with an overview of some existing robots and how they use ROS. I think the cases are interesting, however it might have been better for the authors to use less examples and put more details into each of the examples they present.
I would recommend this book and I think it can be useful to have. It provides a good introduction to ROS and frames ROS around the various systems that form a robot. Overall I give this book 4.2 out of 5 stars. I would also encourage the authors (who might never read this, but I will still say this) to release an updated version in a few years as technology continues to change and ROS continues to evolve.
I would like to thank the publisher PACKT Publishing for providing an ebook version of this book.
Some words of disclaimer:
I have never met the author of this book and the opinions are mine.