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.
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.
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.
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
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
Auro — Autonomous Shuttles
Argo AI — Autonomous Vehicle Technology
Aurora — Autonomous Vehicle 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.
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.
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.
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.
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.
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.
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.