Mock Rover
FSI Capstone Project — NASA Space Grant Consortium
Overview
For my Senior Capstone project I and a team of about 9 other seniors inherited a non-functional mock rover from last years student team. The objective of the project was build a mockup of a space rover that could be controlled remotely and carry a load. The previous team had provided us with the motors, motor controllers, some random computer components and a 300lb aluminum chassis; nothing else. Our budget for our project came from the NASA Space Grant Consortium and facilitated through the Florida Space Institute.
See It In Action
The Challenge
The rover arrived with zero documentation. Previous teams had left behind a collection of components with no wiring diagrams, no codebase, and no record of what had or hadn’t worked. The first task was simply figuring out what we had before any rebuilding could begin.
Additionally because of my stint with Fulbright I actually arrived to my teams project several months after it started. This meant for me I had to catch up with my team. When I came back I found that the project hadn’t progressed much at all, due to poor management, problem analysis and internal fighting.
What I Did
I led the technical integration of the embedded control systems from the ground up. A pipeline needed to be developed from remote control commands to motor actuation. To begin I started work on the motor system.
Each of the 4 motors had a motor controller. The controller accepted a single variable voltage signal that mapped to motor speed. 0 volts corresponded to maximum speed backward and 5 volts corresponded to maximum speed forward. The motor drivers came with a mechanical potentiometer throttle to achieve this control. To make the system programmatically controllable I used PWM signal generated by an Arduino Uno. Using 4 separate digital pins I could facilitate each motors speed and direction separate from each other.
The next phase was to build the infrastructure to send instructions to the motor control Arduino. To do this I used a Raspberry Pi. The Arduino and the Raspberry Pi were connected by the serial port. I wrote a script that would send an 8 bit word to the arduino encoding the specific instruction for how to actuate the motors. Next the Raspberry Pi’s Wifi chip was configured to act as a Wifi source, allowing an external computer to connect to it remotely. On the external computer side a client was built to connect to a server that was hosted on the Raspberry Pi. The client could connect to the server, send an instruction wirelessly, and that instruction would be dispatched over the serial connection to the Arduino that was connected to the motors.
Additionally I built a 2 degree of freedom (DOF) revolute camera robot with a stereo camera at the end effector. The robot was controlled using servo motors controlled by an Arduino. It used the same instruction infrastructure as the motor control system. The Camera video feed was sent to the raspberry pi where it was transferred remotely to the PC. A GUI was built to facilitate the video, deal with wireless connection, and for articulating manual instruction. Finally a joystick was added to more easily control the system.
The final system achieved:
- ~100ft wireless range for remote video and joystick control
- 300lb payload capacity
- 5mph traverse speed
Technical Stack
| Layer | Technology |
|---|---|
| Embedded Systems | Raspberry Pi, Arduino Uno |
| Languages | Python, C++ |
| Actuation | AC motors, motor controllers |
| Sensing | Stereoscopic cameras |
| Communication | Wireless command interface |
| Fabrication | 3D printing |
Takeaways
This project was as much about systems thinking and debugging under uncertainty as it was about writing code. Inheriting a broken system with no documentation forces you to reason carefully about every component before touching anything — a skill that transfers directly to any complex engineering environment.
Sep 2022 – May 2023 · Florida Space Institute · NASA Space Grant Consortium