How I built a self driving car, which roams around in my house

Subodh Malgonde
4 min readNov 26, 2018

--

A 1/10th scale self driving car

It has been a long time since I wrote my last blog post. I feel very excited to write this one as this is about the hard work that I have been putting in for the last 4 months.

Background & Motivation

I have spent most part of my last 2 years teaching myself machine learning, convolutional neural networks and robotics. I did this through a combination of online courses, personal projects and mentoring/teaching assignments. My last teaching assignment was as an instructor on self driving cars. There I spent about 4 months taking classroom sessions on the sub-components involved in developing a self driving car.

My mentoring and teaching assignments gave me a good grasp of the underlying theoretical concepts that go in to building a self driving car. They kindled a desire in me to work on an actual car and not limit my experience to theory. However I was not confident I could actually build one.

What hardware platform should be used as the base? Which software stack to use? What sensors to buy? How much would this cost? How much time would it take? Would I be able to do it by myself? Whom to ask for help if I get stuck on something? The task seemed to be too daunting to be taken upon.

While searching for clues online I stumbled upon the MIT RACECAR. It houses state-of-the-art sensors and computing hardware on top of a 1/10th scale (meaning 1/10th the size of an actual car) RC car.

The MIT RACECAR

This platform is used in multiple courses at the Massachusetts Institute of Technology. One of these courses is Robotics: Science and Systems. This course teaches the foundation of robotics — perception, motion planning and control. The teaching assistants of this course were kind enough to share their experience working on this platform in a series of blog posts. The course instructors have open sourced some components of the software stack and all the hardware stack. You can find them here.

There are other projects, inspired by the MIT RACECAR , which have some documentation to help you build the car, at least as far as the hardware part is concerned. This was perfect for me. The blog posts and online repositories did not have all the necessary information, but sufficient enough to get me started.

Timeline & Budget

The cost of the MIT RACECAR is about $4500!!!. This was way out of my budget. Taking a cue from other similar projects I figured I could make some hardware substitutions to bring the cost down to less than $1000 (more on this in a later post).

Time wise I had estimated that it would take me about 2 months to develop this car. It took me longer than estimated to get fully familiar with the Robot Operating System or ROS in short, which makes up the software backbone. Unexpected component failures and delay in getting the sensors (they had to be imported) further added to the development time. I also spent a considerable time figuring out the path planning and motor control of the car. Any autonomous robot given its current location and a goal, needs to plan a path which takes into account its physical limitations. A car has a finite turning radius and it cannot move freely in all directions. This puts limitations on paths which are realizable by the car. Almost all the open source path planners are designed for omnidirectional robots i.e. robots which can move freely in any direction. This was the tricky part but I eventually figured it out (more on this in a later post). Given all these factors, it actually took me 4 months to develop this car!! Twice the amount of time I had budgeted!!

The Result

The result was well worth all the time spent :) Checkout this video where I make the car roam around in my house:

See the car in action

You can see that the car has the ability to go backward and correct itself if it overshoots or misses its path. I am especially proud of the way it performs a series of forward & backward turns to make a 180 degree turnaround after having reached one end of the house.

Next

I will follow this post with a series of blog posts describing my experience developing the various subsystems of this car. Specifically I will blog about these topics:

  • Other similar projects, forums, tutorials and blog posts which helped me in this process. See this post.
  • Hardware substitutions to reduce the cost to less than $1000. See this post.
  • The Robot Operating System (ROS), simulation and visualization tools
  • Open source packages for localization, path planning and control
  • Figuring out the path planning and motor control part of the project

EDIT: Since I am engaged in other endeavours right now, I won’t be able to fulfil the above promise. So I will just post the code and a google doc containing my development log here.

Development Log

Google doc where I documented all my steps and findings:
https://docs.google.com/document/d/1Goass2MHtOLEt76rTJ7ziMXQQR4XG6Ni1m3ht_AThY0/edit?usp=sharing

Source Code

1. ROS Project: https://bitbucket.org/subodhmalgonde/racecar/
2. Localization: https://github.com/subodh-malgonde/particle_filter
3. Motor controller driver: https://github.com/subodh-malgonde/vesc
4. ROS plumbing: https://github.com/subodh-malgonde/racecar
5. Simulator (Gazebo): https://github.com/subodh-malgonde/racecar-simulator
6. IMU ROS package: https://github.com/subodh-malgonde/razor_imu_9dof

--

--