What Software Do Autonomous Vehicle Engineers Use? Part 1/2

So, you want to be an Autonomous Vehicle Engineer? Or maybe you already are one looking to see what other skills to pick up? This post is intended to provide an overview of the various software tools that engineers use to build autonomous vehicles. Depending on exactly what you want to do in the world of autonomous vehicles, some of these may be more pertinent than others. We will not dive too deep into any one topic, but rather try to take a holistic view of the autonomous vehicle software landscape.

Introduction

Building an autonomous vehicle is complex. Whether an engineer is retrofitting an existing vehicle for autonomy or building an autonomous vehicle from the ground up, there’s a lot of work to be done. Not only do they need to program over 250 million of lines of code on the hardware in the vehicle, they also need to navigate all the programs, tools, and platforms to develop, deploy, optimize, and manage the autonomous vehicle software and hardware.

But not all autonomous vehicles are the same, and different types of AVs use different tools to develop. Each of those categories have different design requirements based on their specific purpose.

Figure 1: Categories of Autonomous Vehicles, Evangelos Simoudis, Jason Marks

In aggregate, there are hundreds of tools that assist all types of engineers building all of these vehicles. We will cover many of those tools in the following article, but please keep in mind this list is not comprehensive, and new tools are added daily.

Methodology

To provide you an overview of the various tools engineers use to develop these vehicles, we interviewed 28 different companies making autonomous vehicles, and we combed through every single “Careers” page entry with anything akin to “Engineering” or “Development” for Autonomous Vehicles in the title for the following 31 companies:

Tesla Motors — Electric Vehicle Maker

Uber Advanced Technology Group— Self Driving Long Haul and Commercial Technology

OTTO Motors (Division of Clearpath)— Industrial Autonomous Vehicle Maker

NIO — Fastest Electric Vehicle and Fastest Driverless Lap around COTA

Cruise Automation — Autonomous Driving Technology

Waymo Team — Pioneers of Autonomous Driving

AImotive — Autonomous Driving Technology

Voyage — Autonomous Driving Deployments, Founded by Udacity Self-Driving Cars Nanodegree Creator Oliver Cameron

Starship Technologies — Autonomous Delivery Robots

Fetch Robotics — Autonomous Industrial Robots

Clearpath Robotics — Agricultural and Industrial Autonomous Robots

Savioke — Autonomous Delivery and Hospitality Robot

Starsky Robotics — Autonomous Trucking Technology

Zoox — Autonomous Taxi Fleets

Embark Trucks — Autonomous Trucking Technology

Torc Robotics — Autonomous Vehicle Technology

Marble — Autonomous Delivery and Neighborhood Robot

Local Motors — Autonomous Shuttle

Nuro — Autonomous Delivery Robots

Navya — Autonomous Shuttles and Taxis

ClearMotion — Fully Active Smart Suspension Systems for Vehicles

Cobalt Robotics — Autonomous Indoor Robots

Aptiv — Autonomous Technology and Infrastructure

Lyft Level 5 — Autonomous Vehicle Technology

nuTonomy (Delphi Automotive) — Full Stack Software for Autonomous Vehicles

Auro — Autonomous Shuttles

Argo AI — Autonomous Vehicle Technology

Aurora — Autonomous Vehicle Technology

Apollo Auto (Baidu) — Autonomous Driving Software and Technology

Faraday Future — Electric Vehicle Maker

Zenuity — Autonomous Vehicle Technology

If a software tool showed up in three different companies, we included it. If it showed up in over 10 different companies, we bolded it. For a few of the most prominent bolded softwares, we wrote a brief explanation about the tool.

It’s still likely that we missed common software products and skills, so please let us know in the comments sections should be added to the list.

The Absolute Essentials

We’ll start with the three skills almost every engineer must have to be considered for an autonomous vehicle role. We found these requirements in almost all software development roles advertised, so this is an absolute MUST have:

C++: General-Purpose Object-Oriented Programming Language

C++ is a programming language that is commonly used to program the onboard computer of autonomous vehicles. It is so popular because it allows the developer program at a “low-level,” namely ensure that there is no useless abstraction that might make the code run slower or take up too much space. C++ allows you to manipulate the memory onboard your computer, which is very useful when dealing with code that must be fast, deterministic, and repeatable. C++ is sometimes considered more challenging to use than the other programming languages that we’ll describe below, but it is one of the highest performance for programming on a Linux, Mac, or Windows computer.

Figure 2: C++

Linux: Open Source Operating Systems

Linux comes in many flavors, but is typically the operating system of choice for autonomous vehicle engineers. This is because it’s not consumed with “bloatware” and has a large, open-source community of people and tools.

The two versions of Linux you see most often are Ubuntu, since it works so well with the tools for autonomous vehicle development, and embedded Linux, which is a deterministic, Real-Time Operating System (RTOS) version of Linux. Our recommendation is that if you don’t already have a Ubuntu machine, install a VM with Ubuntu and get used to it. You’ll also want to be very familiar with Command Line Programming through the Ubuntu Terminal.

Figure 3: Ubuntu Linux Logo (Source)

Python: High-Level Programming Language

Python became so popular since it’s easy to pick up and has a hug open-source community constantly developing tools for it. It is typically very easy to look at well written Python code and understand what’s going on. Python is very popular with autonomous vehicle engineers because there are comprehensive libraries for math, science, data visualization, machine learning, AI, deep learning, etc. The disadvantage with Python is that it’s a large, compiled language. This makes it unsuitable for very high performance application and can eat up memory.

If you’re learning Python, be sure to have an understanding of how to navigate the open source tools, namely numpy, scipy, and matplotlib.

Figure 4: Python Logo

The Virtually Essentials

Next comes the three most common skill requirements after Linux, Python, and C++. At least one job posting in every company mentioned these tools, so it would be in your best interest to at least have a basic understanding of them:

Robot Operating System (ROS): Robots Middleware

ROS is an ecosystem of software libraries for robot development. Since autonomous vehicles are just large, wheeled robots, this tool makes developing autonomous vehicles significantly easier than it would otherwise be.

While ROS supports a few operating systems, it is commonly run on top of Ubuntu. People typically program ROS is C++ and/or Python. ROS is great for all the tools it includes for autonomous vehicles, but it is still a clunky platform to run the autonomous vehicle stack on. It is typically considered a “prototyping tool” until the industry standardized on different hardware and software that will be more deterministic, cheaper, scale-able, and less power-hungry.

For the time being, it is necessary to know ROS to develop autonomous vehicles. Luckily, you can download it on that Ubuntu machine (or VM) you have from their fantastic wiki.

Figure 5: Example System Running ROS (Source)

MATLAB/Simulink

Although two completely different tools, MathWorks has developed two of the most common software platforms for control system design.

MATLAB is a numerical and proprietary programming language that gets its popularity from the number of university programs that offer it for free. Students in engineering programs typically graduate with an understanding of the language, and thus it is continued to be used outside. Today, some people are moving towards the mathematical tools that Python offers since they are almost at parity any Python is free, but MATLAB is still a very common tool.

Simulink is a block-diagram-based graphical programming interface that allows you to create models and simulations. It is the most common tool used for designing and testing control systems on autonomous vehicles. It has a series of add-on tools for porting your designs to C++ code, or even to a hardware description language for use on FPGA or ASIC design, which will be explained later. You will be hard-pressed to find any control engineers that don’t use Simulink.

Figure 6: Example Simulink Program (Source)

Git: Version Control Software

When you’re developing software, you need somewhere to put it so others can check your work and build off what you created. If your team divides the workload, they’ll eventually need a place and process to merge that code together as well. This is where version control software comes in. Git seems to be the most popular tool for version control and source code management for autonomous vehicle companies, perhaps due to its open-source nature.

There are various hosting servers for Git, including the most popular, GitHub, for managing your software development. The reason you would need a hosting server is that you want a simple way to share your code with either the community or your specific team.

In the recruitment and interview process, many companies will ask to see your GitHub account, so they can get a feel for how well and often you develop code. It’s a great way to show off your development skills.

Figure 7: Git Code “Branching” Example

Conclusion

So, we covered the basics. The next article will cover the various tools you’ll need depending on the type of role you’re pursuing.

What Software Do Autonomous Vehicle Engineers Use? Part 2/2

Accelerating the Mobility Revolution