Autonomous Rover Testing Simulator in Unreal Engine 5
View the Project on GitHub MissouriMRDT/RoveSoSimulator
Return to RoveSoDocs Guides for Today, Tomorrow, and Forever.
This document serves as a “Project Legacy & Repository of Knowledge” for the Mars Rover Design Team’s Simulator sub-team. It outlines major initiatives that were either fully implemented, partially attempted, or kept as future concepts.
The goal is to prevent “re-inventing the wheel” and to provide future developers with the specific technical roadblocks that halted certain paths. Please add your unfinished projects, moonshots, and or anything else to this list so other people can reference it in the future.
To produce a high-quality video for competition, we explored Unreal Engine’s professional cinematic pipeline:
Game Overrides in the MRQ settings to ensure our custom GameMode was used during the render.Status: Abandoned in favor of OBS High-Bitrate Viewport Capture. Reasoning: For a technical demonstration, the “True Physics” and “Live UI” visible in a real-time session are more valuable than cinematic lighting. We shifted to using OBS with CQP 16 encoding and enabled Camera Lag in the SpringArm component to simulate the smooth motion of the professional renderer without the technical overhead.
The goal was to allow developers working in the Arch Linux environment to build and package .exe files for Windows users directly from their Linux machines.
RoveComm_CPP library is integrated via CMake. Cross-compiling a third-party C++ library from Linux to Windows while nested inside an Unreal build process proved to be highly unstable.Status: Failed/Infeasible.
Alternative: We implemented a Self-Hosted GitHub Action Runner on a dedicated Windows machine. Linux developers push code to the repo, and the Windows “Build Mule” automatically packages the .exe and uploads it.
We integrated Sentry for crash reporting but found that it captured too many “false positives” from developers purposefully stopping the editor or encountering minor bugs during iteration.
We created a C++ helper function IsRunningInEditor() using the WITH_EDITOR macro. This was used in a Blueprint gate within the BP_GameInstance.
Status: Successful. Result: Sentry only initializes if the sim is running as a standalone packaged build, unless a manual “Debug Reporting” toggle is checked in the GameInstance.
The concept is to use a Meta Quest 2 headset to provide arm operators with actual depth perception. The operator would see the ZED camera feeds in 3D and use the Quest’s “head tracking” to move a gimbal-mounted camera on the rover.
SceneCaptureComponent2D on the rover.Tools/ directory, ensure the Additional Non-Asset Directories to Copy setting in Project Settings is updated, or the tool will not exist in the packaged version.