As part of my academic curriculum, I participated in a two-week group project where the objective was to design and develop a space rover simulator using Python. Inspired by NASA’s Perseverance rover, this simulator aimed to reproduce realistic vehicle behavior and allow the control of a robotic arm within a fully navigable 3D environment.
The project required us to quickly learn and apply concepts in 3D graphics, physics simulation, and animation. Working in a team of three, we divided tasks efficiently to deliver a functional, interactive simulator within a very limited timeframe.
The primary goal of the project was to design a 3D rover capable of moving realistically across a terrain, while integrating interactive elements such as a robotic arm and a basic user interface. Another important objective was to offer users a choice between a local play mode and an online connection setup through a menu system developed specifically for the simulation.
Additionally, we aimed to progressively refine the visual aspects of the environment by implementing a Mars-like terrain complete with rocks, elevation changes, and surface texturing.
The project was built entirely in Python, using the Panda3D engine for 3D rendering, animation handling, and physics management. Panda3D’s built-in physics modules (such as vehicle physics) allowed us to simulate realistic rover movement without having to develop a physics engine from scratch.
Blender was used to create and rig the 3D model of the rover and its robotic arm. We also developed custom assets and textures for the environment, ensuring a coherent visual identity throughout the simulation.
We structured our development into several major phases, each focusing on a specific aspect of the simulator.
We began by creating a simple prototype using Panda3D’s default car model. This allowed us to test and calibrate the basic physics behaviors, such as traction, collisions, and vehicle dynamics. Once these foundations were validated, we integrated our custom rover model, initially into a basic environment with no textures and debug grids visible to assist with collision testing.
Progressively, we replaced the prototype environment with a detailed Mars-like terrain. Rocks and other surface features were added to make the simulation environment more realistic. The terrain was textured, and final adjustments were made to the physics parameters to adapt the rover’s behavior to this new setting.
Parallel to this, we worked on the robotic arm. Rigging and animation were done in Blender, then imported into Panda3D. We synchronized the arm’s movement with user controls in the simulation interface, allowing for basic mechanical operations.
The final stages involved integrating the user interface: buttons for camera control, energy management, arm manipulation, and an action log window.
We also implemented a main menu with a mode selection screen (local or online), providing a structured entry point into the simulation.
The final simulator included several key features:
This project significantly strengthened my skills in several key areas:
This simulator project was a very rewarding experience, during which I developed an interactive 3D vehicle, implemented realistic physics, and integrated mechanical animations. It reinforced my desire to further explore the use of 3D objects in interactive projects.