Becoming an Autonomous Vehicle Engineer – Part 2: Software Skills

In part one of this blog series, we covered how to get started on your journey to becoming an autonomous vehicle engineer. Now, you may want to know what coding languages and software to learn in order to solidify your spot on a team creating the future of transportation.  

See – Think – Act 

Imagine driving down a city street and spotting a pedestrian slowly approaching a curb a few hundred feet ahead. While they are not yet in the crosswalk, you put your foot on the brake, predicting that they may begin to cross. As your paths intersect, the person steps forward to cross the road. Already prepared, you come to a stop and allow them to pass. 

Our end-to-end Level 4 autonomous system is created to mimic the decision-making process in a similar way to a human driver: See – Think – Act. 

This means we implement everything from the sensors that “see” the pedestrian to the algorithms that pull that sensor data together and identify it as a person. The decision and action of whether to stop, slow down, or continue driving is based on behaviors programmed into the system itself.  

These simple scenarios become more complex when you consider the environment (rain, snow), other traffic (is someone going to turn?) and route decision-making. We require teams with multiple types of skill sets to make a robust system capable of handling the variety of situations one could encounter on the road.   

Our Teams

Active Sensing and Information Fusion – The active sensing team utilizes sensor data and creates algorithms to detect and identify objects for Torc’s autonomous driving systems, allowing the system to understand and react to the environment around the vehicle in real-time. 

Machine Learning – Our machine learning team trains our system to identify certain objects it sees in more detail than could be provided with raw sensor data. For example, we use machine learning to teach our system how to identify traffic lights or determine the difference between a pedestrian and a light post. 

Mapping and Localization – Autonomous vehicle maps must be much more specific than the typical maps a human would use for navigation. Our mapping team develops the 3D environment and routes our autonomous car drives and works with the localization team to ensure the system knows where it is and how to get to its destination. 

Behaviors and Planning – The behaviors team focuses on how the vehicle should act in any given situation. For example, merging on a busy highway requires the vehicle to determine a good spot to “zipper” into the flow of traffic and adjust acceleration to accomplish that safely.  

Mechanical – The mechanical team creates the vehicle design concept and integrates sensors, mounts, and computes into the vehicle. 

System Integration – Ensuring components work well not only by themselves but as a system is an important role on the team. The system integration team looks at the high-level interactions of the components as a whole. 

Embedded, Controls, and Electrical – This team integrates software into the entire system of components and works on the electrical system that controls the vehicle – think acceleration, braking, and steering.

Dev Ops – The Dev Ops team works to manage software deployment and maintain the technical infrastructure. 

Safety and Testing – Safety is the main goal of our autonomous system, and thus safety and testing engineers are critical to every stage of our development. Safety and testing teams work to ensure that we can test and verify new capabilities, as well as standardizing safety protocol and practices for all teams.

How should you prepare? We asked Torc engineers what software skills and experience helped them become successful in their specialty on our AV team. 

Karan Bhargava, Mapping & Localization Software Engineer

C++ is a performance-oriented language which lets you “pop the hood” and reach deep down into memory management. 

If a candidate has solid C++ and Robotic Operating System (ROS) skills, then they’re already a robotics engineer. In order to be a mapping and localization engineer, they need to go a step further and understand general coordinate transformations & 3D geometry. If a candidate has worked with Simultaneous Localization and Mapping (SLAM) then they’re an excellent fit for this role. 

Matthew Via, DevOps Engineer

The DevOps team requires skills in unification of software development and systems administration. We use these skills at Torc for managing deployments of software to vehicle compute. Properly administering and managing Linux computers is also an important skill to automate and make our systems robust. 

We use fairly complex networks on our vehicles. Being able to architect good network designs and debug complex designs is vital to our work. 

The typical technologies that a DevOps team member would use to make a process automatic/repeatable would be Config Management, and Continuous Integration pipelines. Rather than having a developer write software, manually compile it, and then manually copy it to a computer (and then manually configure it), we use automation to ensure that the software is built, installed, and configured with as little possibility for human error as possible.

David Anderson, Principal Mechanical Engineer

In the hardware design field, the most useful software to know is various Computer Aided Design (CAD) and simulation packages.  These are used daily to create the hardware that makes this technology work. The most useful coding languages would be Python and MATLAB.  The hardware focus is less about Realtime code efficiency, and more about data manipulation and visualization. 

Andrew Cunningham, Active Sensing and Information Fusion Software Engineer

C++ is a compiled programming language that supports both object-oriented programming and low-level memory manipulation. Torc uses C++ to power autonomy because well written C++ code is extremely fast and extendable.  

A candidate should also be familiar with coding standards. Industrial coding standards forbid certain coding practices that can result in potentially unsafe bugs at run-time. By enforcing these constraints, code is made more safe, portable and reliable. MISRA coding standards are open and while the documentation is dense, key ideas can be learned fairly easily.

Ashwin Sahasrabudhe, Behaviors Software Engineer

Self-Driving Behaviors play an important role in high-level decision making of how the vehicle should behave on the roads considering there are multiple other entities like cars, pedestrians, and bicycles. To deal with these different entities and to develop required safety algorithms, one needs to have a good understanding of how the kinematics and dynamics of a vehicle affect its maneuverability on the road. The fun part about working at Torc is that your work is never restricted to just one component. You get to work on other components like vehicle interface, which controls the actuators of the car. Because of this varied work, it is good to have an understanding of control algorithms, as well as experience in developing and tuning control loops.

With all that said, a question that is commonly asked is ‘Where can I learn about this technology?’ There are a considerable number of simulators available out there which you can play around with. It’s always fun to explore something new and you get a different kind of satisfaction when the car drives in the simulator the way you want it to drive. Hands-on experience and developing a few control algorithms or self-driving behaviors with such simulators is a good start. Also, connect with your peers who are interested in self-driving cars. from personal experience, I would say that working in group projects and learning from others helps a lot when it comes to understanding new technology.

Looking for jobs in the self-driving vehicle field? Torc is one of the most experienced autonomous software companies and we are growing our team to revolutionize transportation. See our careers page for more information and stay tuned for part three!