RoveSoSimulator

Logo

Autonomous Rover Testing Simulator in Unreal Engine 5

View the Project on GitHub MissouriMRDT/RoveSoSimulator

RoveSoSimulator Diversion Overview and Tutorial

Diversion Overview

Why Diversion?

As you may know, we are using Unreal Engine 5 for our simulator. This is a much-improved simulation solution compared to our past efforts. However, it is not without its drawbacks, a major one being version control. Initially, the simulator was in a standard Git repository, but this was not ideal for several reasons.

Firstly, Git was not designed to handle the very large binary files common in 3D projects like an Unreal Engine simulator. When a team member made even a small change to a 3D asset, Git would often treat it as a complete deletion and re-addition of that large file. This made repository sizes balloon and syncing incredibly slow. Furthermore, 3D asset files cannot be merged like text-based code, which led to constant problems with developers accidentally overwriting each other’s work.

These challenges prompted us to find an alternative. We ultimately chose Diversion, a version control system (VCS) designed specifically to work with Unreal Engine. While Diversion shares many concepts with Git, it is optimized for large files and the collaborative workflows of game development. It isn’t perfect, but it is the most effective solution we have found for this project.

Diversion Tutorial

This tutorial will walk you through the essential features of the Diversion desktop client that you will use for the RoveSoSimulator project.

The Diversion Hub

When you first open Diversion, you will see the main hub. This is your starting point for accessing all your projects.

Diversion Hub

The Workspace View

Once you open the RoveSoSimulator workspace, you will see the main interface. This is where you’ll spend most of your time.

Main Workspace

Committing Changes

When you have made changes to the simulator, you need to “commit” them to save them to the version control history.

  1. Select Files: In the file browser on the left, check the box next to each file you want to include in your commit. The image shows the .vscode folder has been selected.
  2. Write a Commit Message: In the “Type your commit message here” box at the bottom, write a clear and concise message describing what you changed (e.g., “Added a new LIDAR sensor model” or “Fixed the physics on the Rock Hammer”).
  3. Commit: Click the blue Commit button to finalize. This saves a snapshot of your selected changes to your local version of the repository.

Committing Changes

Working with Branches

Branches are used to work on new features or fixes without affecting the main, stable version of the project (main branch).

  1. View and Switch Branches: At the top of the screen, click on the current workspace name (e.g., “Luke’s Unreal Engine Playground”). This will open the branch management view.
  2. Switching: You can see a list of all available branches. To switch to a different one, hover over it and click Switch to branch.

Viewing and Switching Branches

Handling Pending Changes When Switching Branches

If you try to switch to another branch while you have uncommitted changes, Diversion will ask you what to do with them.

Handling Pending Changes

If you have previously “shelved” changes on the branch you are switching to, Diversion will ask if you want to restore them. You can either restore them automatically or skip for now.

Restoring Shelved Changes

Syncing and Viewing History

Your local commits are not sent to the shared repository until you sync.

Synced History View

Syncing in Progress

Visualizing the Commit Tree

For a more advanced view, you can see the commit history as a branching graph. This is useful for understanding how different lines of development diverge and merge.

Commit Tree

Diversion Best Practices

Diversion Troubleshooting

Diversion Sync Issues

Sometimes, when cloning the simulator, switching branches, or syncing, Diversion can get “stuck” and will not finish the process. You can verify this by opening Task Manager and checking network performance. If Diversion reports that it’s syncing but there is little to no network traffic, it is likely stuck.

To fix this:

  1. Fully Exit Diversion: Close the main window. Then, go to your system tray (the icons by the clock in the taskbar), right-click the Diversion icon, and select Exit. If it’s unresponsive, you may need to end the process in Task Manager.
  2. Open a Terminal: Navigate to the root directory where you cloned the simulator (e.g., C:\Users\<USERNAME>\Documents\GitHub\RoveSoSimulator).
  3. Restart Diversion: Open the Diversion desktop application again.
  4. Force a Status Check: In your open terminal, type the command dv status and press Enter. This command often “wakes up” the sync process. You should see terminal output as Diversion begins syncing correctly. Leave the terminal open until the process is complete.