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.

About ROS

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.

  1. Experiment with ROS nodes
    1. write a data collecting node
    2. collect some data with it
  2. Begin migrating whole code base to ROS
    1. create the necessary ROS packages
    2. Implement the steering control package
    3. Implement rviz & launch files
    4. Test out steering control package with rviz
    5. Integrate GPS into the project
    6. Implement the detection package
      1. object detection node
      2. traffic light detection node
      3. lane detection node
    7. Use ROS to gather some data in rosbag format
    8. Implement cruise control node
    9. System integration
    10. 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 contact@neilnie.com 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.

Posted by:NeilNie

Student at Columbia University, School of Engineering and Applied Sciences. Prev. software engineer intern at Apple. More than six years of experience developing iOS and macOS applications. Experienced in electrical engineering/microcontrollers. From publishing several apps to presented a TEDx talk in machine learning. Striving to use my knowledge, skills, and passion to positively impact the world.

12 replies on “Migrating to ROS — Hello, Robot Operating System

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.