So, you’re interested in working as an autonomous vehicle engineer? Or maybe you’re already one and want to see what else you can learn? This article aims to provide an overview of the numerous software tools used by engineers to create autonomous vehicles. Some of them may be more relevant than others, depending on your goals in the realm of autonomous vehicles. We won’t go into too much detail about any one area, instead attempting to take a broad view of the autonomous vehicle software ecosystem.
Introduction
It takes a lot of work to create an autonomous vehicle. There’s a lot of work to be done whether an engineer is adapting an existing car for autonomy or designing an autonomous vehicle from the ground up. They must navigate all of the programs, tools, and platforms used to build, install, optimize, and manage the autonomous vehicle software and hardware, in addition to programming approximately 250 million lines of code on the car’s hardware.
However, not all autonomous cars are created equal, and different types of AVs employ different development techniques. Based on its intended use, each of these groups has various design criteria.
Hundreds of tools are available to aid various types of engineers in the construction of these vehicles. Many of these tools will be covered in the next article, but bear in mind that this list is not exhaustive, and new tools are introduced on a daily basis.
Methodology
We interviewed 28 different companies that make autonomous vehicles, and we combed through every single “Careers” page entry for the following 31 companies with anything akin to “Engineering” or “Development” for Autonomous Vehicles in the title to give you an overview of the various tools engineers use to develop these vehicles:
- Uber Advanced Technology Group — Commercial and Long-Haul Self-Driving Technology
- OTTO Motors (a Clearpath division) is a manufacturer of industrial autonomous vehicles.
- NIO — COTA’s Fastest Driverless Lap and Fastest Electric Vehicle
- Autonomous Driving Technology — Cruise Automation
- The Waymo Team — Autonomous Driving Pioneers
- AImotive is an acronym for “Autonomous Driving Technology.”
- Udacity Self-Driving Cars founded Voyage — Autonomous Driving Deployments. Oliver Cameron is the creator of Nanodegree.
- Autonomous Delivery Robots from Starship Technologies
- Fetch Robotics is a company that makes autonomous industrial robots.
- Agricultural and Industrial Autonomous Robots from Clearpath Robotics
- Autonomous Delivery and Hospitality Robot Savioke
- Autonomous Trucking Technology by Starsky Robotics
- Embark Trucks — Autonomous Trucking Technology Zoox — Autonomous Taxi Fleets
- Torc Robotics is a company that specializes in autonomous vehicle technology.
- Local Motors — Autonomous Shuttle Marble — Autonomous Delivery and Neighborhood Robot
- Nuro is an acronym for “autonomous delivery robots.”
- Navya — Self-Driving Taxis and Shuttles
- ClearMotion is a company that makes fully active smart suspension systems for automobiles.
- Cobalt Robotics is a company that makes autonomous indoor robots.
- Lyft Level 5 — Autonomous Vehicle Technology Aptiv — Autonomous Technology and Infrastructure
- nuTonomy (Delphi Automotive) – Autonomous Vehicle Full Stack Software
- Autonomous Shuttles (Auro)
- Autonomous Vehicle Technology — Argo AI
- Aurora is an acronym for “Autonomous Vehicle Technology.”
- Apollo Auto (Baidu) — Software and Technology for Autonomous Driving
- Zenuity — Autonomous Vehicle Technology Faraday Future — Electric Vehicle Maker
We included a software tool if it appeared in three separate companies. We bolded anything that appeared in more than ten distinct companies. We provided a quick description of the tool for a handful of the most well-known bolded softwares.
It’s still possible that we omitted some common software products and talents, so please let us know if you think something should be included to the list in the comments section.
The Absolute Minimum
We’ll start with the three abilities that practically every engineer must possess in order to be considered for a position in an autonomous vehicle. We identified these prerequisites in practically every job posting for software development, therefore this is a must-have:
C++ (Common Lisp for Object-Oriented Programming) is a general-purpose Object-Oriented Programming Language.
C++ is a programming language that is often used to program autonomous vehicles’ onboard computers. It’s so popular because it allows developers to program at a “low-level,” ensuring that no unnecessary abstractions slow down or take up too much space in the code. C++ gives you the ability to manage the memory on your computer, which comes in handy when working with code that needs to be quick, deterministic, and repeatable. C++ is more difficult to learn than the other programming languages we’ll cover later, but it offers some of the best performance whether writing on a Linux, Mac, or Windows computer.
Open Source Operating Systems (Linux)
Linux exists in a variety of versions, but it is most commonly used by autonomous car experts. This is due to the lack of “bloatware” and the presence of a vast, open-source community of people and tools.
Ubuntu, which works well with tools for autonomous car development, and embedded Linux, which is a deterministic Real-Time Operating System (RTOS) version of Linux, are the two versions of Linux you’ll see the most. If you don’t currently have an Ubuntu machine, we recommend setting up a virtual machine with Ubuntu and getting acquainted with it. You’ll also need to be highly comfortable with the Ubuntu Terminal’s Command Line Programming.
Python (High-Level Programming Language) is a high-level programming language.
Python has grown in popularity because it is simple to learn and has a large open-source community producing tools for it. It’s usually fairly simple to grasp what’s going on in well-written Python code. Python is a popular programming language among autonomous car engineers because it includes libraries for math, science, data visualization, machine learning, AI, deep learning, and other topics. Python has the disadvantage of being a large, compiled language. This makes it unsuitable for applications that require a lot of processing power and can suck up a lot of memory.
If you’re learning Python, make sure you know how to browse the free source tools, such as numpy, scipy, and matplotlib.
The Virtually Necessary
Following Linux, Python, and C++ are the three most prevalent skill requirements. Because these tools were mentioned in at least one job posting in every company, it would be in your best interest to have a basic understanding of them:
Robot Operating System (ROS): Middleware for Robots
ROS is a software library ecosystem for robot development. This technique makes developing autonomous vehicles far easier than it would be otherwise, because autonomous vehicles are simply huge, wheeled robots.
While ROS is compatible with a variety of operating systems, it is most typically used with Ubuntu. C++ and/or Python are commonly used to program ROS. Although ROS is fantastic for all of the tools it contains for autonomous vehicles, it is still a clumsy platform on which to operate the autonomous vehicle stack. It’s usually referred to as a “prototyping tool” until the industry settles on more deterministic, less expensive, scalable, and power-efficient hardware and software.
For the time being, knowing ROS is required in order to construct autonomous vehicles. Fortunately, you can get it from their wonderful documentation and install it on your Ubuntu computer (or virtual machine).
MATLAB/Simulink
Despite the fact that they are two quite different tools, MathWorks has created two of the most widely used software platforms for control system design.
MATLAB is a numerical and proprietary programming language that is popular due to the large number of free university programs that provide it. Engineering students often graduate with a working knowledge of the language, and it is thus employed outside of the classroom. Today, some individuals are gravitating toward Python’s mathematical capabilities because they are almost equal in price and Python is free, but MATLAB remains a popular tool.
Simulink is a graphical programming interface that allows you to develop models and simulations using block diagrams. It is the most widely used tool for building and testing autonomous vehicle control systems. It comes with a number of add-on tools for translating your designs to C++ code or even to a hardware description language for usage on FPGA or ASIC designs, as discussed later. It would be difficult to find a control engineer who does not utilize Simulink.
Git is a version control system.
When you’re creating software, you’ll need a place to store it so that others may review it and expand on it. If your team splits the work, they’ll need a place and a procedure to merge all of the code together at some point. Version control software can help with this. Due to its open-source nature, Git appears to be the most preferred solution for version control and source code management among autonomous vehicle firms.
For organizing your software development, there are several hosting services for Git, including the most popular, GitHub. You’d need a hosting server if you wanted a simple way to share your code with the general public or your specialized team.
Many employers will ask to check your GitHub account during the recruitment and interview process so they can get a sense of how well and frequently you code. It’s a fantastic technique to demonstrate your development abilities.