Coding for Autonomous Vehicles

By Jason Altice, Head of Embedded Software Engineering at Outrider

undefined

Tell us about your background.

I graduated with a BS in Computer Engineering and a minor in Computer Science from the University of Old Dominion. I also have a MS in Engineering Management from the University of Wisconsin and I’m a Licensed Professional Engineer.

I’ve been developing embedded systems for autonomous vehicles for over 15 years. My career started with developing the Navy’s first autonomous watercraft. These boats ranged between 20- and 40-foot vessels. Some of these unmanned vessels were used for patrolling areas and others were used for detonating underwater mines.

Next, I made the move to John Deere where I was a senior systems engineer. I developed a safety-rated operating system currently used worldwide on construction equipment and helped in the transition of future agriculture equipment to AutoSAR (Automotive Open System Architecture).

Years later, I switched roles to Liebherr USA as Lead Software Engineer to develop their first autonomous mining trucks. These trucks were unbelievably huge, the tires alone were 13’ high!

Finally, I arrived at Outrider as Head of Embedded Systems to help pioneer the future of autonomous yard operations for logistics hubs.

What do you work on?

As a project manager my primary focus is that we build a system that performs as expected for our customers. I currently manage six separate projects to ensure we complete the right work at the right time and achieve the right results. With my technical background I’m able to help make design decisions and assist the team when needed. However, the embedded engineers on the team do the challenging work and produce the real results. Each member of the team can see their individual task/project through the entire software development life cycle and help contribute to the success of the overall project.

How do you use coding in your projects?

For embedded development on autonomous vehicles, it is typical that the controllers we write software for are closest to the hardware making the vehicle physically move. The software on these controllers have many different roles. Primarily, the code must ensure that the correct information is sent or received so that the correct action can be taken within the correct amount of time. This is common for most software, the difference with embedded systems on a vehicle is that the timing is critical. Stopping a second too late, steering too slow, or not knowing the vehicle’s position for too long can cause catastrophic damage.

Therefore, the embedded software must be well-tested for many different scenarios and fail in a predictable way. The embedded software engineers must also have a solid understanding of the hardware and electronics the software is interfacing with. Controlling hydraulics, pneumatics, or electromechanical devices with software is very exciting but can also be very dangerous if the components aren’t fully understood. The embedded code in these controllers will bring multiple sub-components of a system to work cooperatively into a single system.

Any tips related to the application of computer science in your area for young coders?

undefined

If you don’t have enough time to properly document and test the software, then there isn’t enough time for the project. Quite often, we only think of the time to implement the software when asked for time estimates and/or management will want the project done faster and to shorten the development time. The implementation, writing of code, is usually the shortest task. The time it takes to plan, design, architect, write requirements, and test the software takes the most amount of time. Knowing to estimate time for these tasks and performing them correctly is how you will become a true software engineer, not just a coder.

What tools and programming languages do you use?

undefined
HW = Hardware, SW = Software

My YouTube channel ‘CodeMakesItGo’ focuses on creating projects that are related to software engineering, easy to understand, and entertaining to watch.


Interested in utilizing this resource in your elementary classroom? Check out our elementary version of this blog here. Comprehension is designed for upper elementary independent reading (Lexile level no greater than 1000), or guided reading for younger students.