Our goal has always been to create the best autonomous driving software possible on a small scale. A critical component of that goal is to write conventional code and use industry standard libraries. This is one of the reasons why I am working on integrating ROS into the self-driving golf cart. Once the project is fully integrated to ROS, the code base can be scaled up to other vehicles.
More than a decade ago, folks at Stanford A.I. lab and Willow Garage began developing the Robot Operating System, which is a robotics middleware (a collection of software frameworks for robot software development). Technically, ROS is not an operating system, it provides services such as hardware abstraction, low-level device control, implementation of commonly used functionality, message-passing between processes, and package management. All of these functionalities are used in the self-driving car and they allow our software to be modular and scalable.
Sets of ROS-based processes take place in nodes that may receive, post and multiplex sensor, control, state, planning, actuator and other messages. Despite the importance of reactivity and low latency in robot control, ROS, itself, is not a real-time OS (RTOS), though it is possible to integrate ROS with real-time code. The lack of support for real-time systems is being addressed in the creation of ROS 2.0.
The main ROS client libraries (C++, Python, and Lisp) are designed for Unix system. For these client libraries, Ubuntu Linux is the primary Operating System.
The Development Process
Here I will outline the roadmap for integrating ROS into our self-driving system. ROS migration started on April 22nd, and the estimated end date is June 1st. The crossed out parts are already done. I will update this list as the project moves forward. You can also keep track of the migration process on Github.
Experiment with ROS nodes write a data collecting node collect some data with it
- Begin migrating whole code base to ROS
create the necessary ROS packages Implement the steering control package Implementrviz & launch files Test out steering control package with rviz Integrate GPS into the project
- Implement the detection package
object detection node
- traffic light detection node
- lane detection node
- Use ROS to gather some data in rosbag format
Implement cruise control node System integration Test driving system
In the beginning, I thought of using ROS as a daunting and impossible task. There is just too much to learn. However, as I moved through the Udacity ROS lessons, I realized ROS is simple once I can pick it up. And of course, there is a lot of online resources on ROS Wiki. I really hope that this migration will bring the code base to the next level. The functionalities of ROS will unlock many doors for us. In the future, we could scale the system to and perhaps implement it on a real vehicle!
Once again, please don’t hesitate to reach out to me at firstname.lastname@example.org if you have any questions, comments or concerns. If you like the post, please give me a like. Here are some other posts you might enjoy.
- Deep learning steering prediction
- Semantic segmentation
- Driver by wire system (DBW)