For my Honours project at the University of Aberdeen, I expanded upon an existing simulation of NASA’s Curiosity rover made for ROS (Robot Operating System) and Gazebo, a robotics simulator. I enhanced the accuracy of the virtual rover by adding more sensors to it, and I also created several 3D environments for the rover to explore using real Martian terrain data.
After creating my enhanced simulation, I used it to test an autonomous navigation system for the rover. Self-driving abilities are hugely beneficial for Mars rovers since it takes a long time to deliver manual driving instructions from Earth to Mars. The autonomous navigation system can identify and avoid nearby obstacles (such as large rocks) using stereo depth information from the simulated rover sensors.
I also created a user interface (shown at the top of this page) for monitoring the virtual rover and sending new navigation goals on a 3D map. I used roslibjs and ros3djs to fetch data from the virtual rover and display it in a web application I call MarsViz. MarsViz shows the state of the simulated rover in 3D using A-Frame and displays information about what the rover is currently doing. MarsViz even has support for WebXR, so you can view the Mars environments in virtual reality and point to new rover navigation destinations using motion controllers.
You can download the source code for my Curiosity simulation package on GitHub.