JPL Unreal Darts

January ’22 — May ’22 || C++ Unreal Engine Linux

Matthew L. Komar
2 min readJan 4, 2023

Software Engineering Internship at NASA Jet Propulsion Labs

I implemented many new feautures in C++, debugged, and streamlined existing components in JPL’s DARTS (Dynamics and Real-Time Simulation) Unreal Engine visualizer.

Journey to simulate the Perseverence Rover

My goal was simulate the Perseverence Rover moving across Martian terrain.

Perseverance Rover simulation using DSim

When I came on board, the Unreal Darts visualizer produced incorrect visualizations and was extremely unstable.

Since there was no compatible debugger for Unreal Engine in Linux, I exposed a lot of the C++ functions into Blueprints and then used them to help debug my C++ code.

I created new features to help me debug the game: save, load, and delete scenes. These features also have other use cases:

  • Help engineers repeat visualizations without redoing simulations.
  • Unreal Darts maintainers can create custom scenes in JSON without scripting simulations.

As running real time simulations would crash the program, I had to optimize the code by using faster data structures and search techniques.

After these fixes I was able to run the simulation!

Why did JPL adopt Unreal for visualizations?

As inhouse visualization engines are increasingly harder to maintain, the DARTS lab wanted to create a visualization tool using Unreal Engine. Some advantages with Unreal are:

  • They do not need to maintain their own graphics pipeline
  • Unreal is compatible with a multitude of file formats
  • The Unreal Marketplace provides a source of curated and high-quality assets that are cheap to buy and easy to implement
  • Unreal is open source and its source code be expanded upon if need be.