As part of the JHU Rover Team, we needed a reliable and repeatable way to evaluate how well custom-designed and manufactured wheels perform on a rover. Traction across various terrains is one of the most critical performance factors, and without a standardized measurement method, wheel comparisons were largely guesswork.
This project is the solution to that problem — a purpose-built drawbar pull force testing rig that quantifies wheel traction under controlled conditions. From mechanical design and FEA simulation, to fabrication, electronics integration, and custom data acquisition software, I designed and built the entire system myself.
Paper Inspiration: https://www.sciencedirect.com/science/article/abs/pii/S0022489810000601?via%3Dihub
Above the first successful test that was run can be seen. The max recorded load was around 6.5 kg (about 63 N). The large jumps were caused from slipping of not fixing the rig to the ground, so the wheel slipped
The rig uses a load cell-based measurement system grounded in established terramechanics research. By constraining the wheel module against a fixed load cell, tractive force is captured directly and repeatably. The load cell module can be seen above.
An Arduino + HX711 load cell amplifier are housed in a custom enclosure mounted directly to the wheel module, keeping the system self-contained and portable. It is also removable in case the user desires to run without the electronics on the rig.
A Python GUI provides live force plotting, configurable test duration, automatic logging, and one-click Excel export. This makes back-to-back wheel comparisons fast and consistent.
The rig was fully designed in CAD before any fabrication began. Once the geometry was established, I performed finite element analysis (FEA) on the critical structural components using worst-case loading scenarios. Specifically, the main case addressed was the maximum force the motor and wheel combination could generate. A safety factor of 2 was applied throughout to ensure the structure would remain well within its elastic limits under any realistic test condition.
The FEA results also informed the final dimensions of the aluminum stock used for the frame. Rather than over-engineering the structure with oversized material, the analysis allowed me to optimize the cross-sections, keeping the rig lightweight without compromising rigidity.
The measurement system is built around an Arduino microcontroller paired with an HX711 (24-bit analog-to-digital) amplifier, which is specifically designed for interfacing with load cells. The HX711 amplifies the small differential voltage signal from the load cell and converts it to a digital value the Arduino can read and transmit.
All electronics are housed in a custom enclosure that mounts directly to the wheel module, keeping the wiring compact and the system self-contained during tests.
The load cell is calibrated using known reference weights to map raw ADC counts to force in Newtons. This calibration is stored and applied automatically at the start of each session.
Load cell drift is a slow baseline shift caused by temperature changes, mechanical creep, and vibration settling. Current corrections include:
Tare at test start: zeros the baseline before each run so readings reflect true tractive force
10-sample moving average in Arduino firmware: smooths high-frequency noise from wheel vibration and terrain irregularities. Helped noticeably, though some drift still bleeds through on longer runs
Temperature compensation: add a thermistor near the load cell, characterize drift-per-degree, and apply a real-time correction curve in software
I wrote a custom data acquisition application in Python that communicates with the Arduino over serial. Key features include:
Start, Stop, Tare, Reset, and Save controls keep the test workflow simple
Live force display in both grams and Newtons simultaneously, with a running peak force tracker to capture maximum traction without post-processing
Configurable run time ensures every wheel comparison runs for exactly the same duration. Infinite Run mode is also available for open-ended testing
Serial console log displays the full command and response history between Python and Arduino in real time, so system behavior can be verified at each step without a separate serial monitor
Live force vs. time plot updates continuously throughout the run. slip events (present in graph to right), terrain transitions, and wheel liftoff are immediately visible in the trace
Excel export via the Save button for archiving and comparison across wheel designs and terrain types
Saved as an EXE file for ease of access, with a code library saved for future iterations/additional features
This rig is a functional first version, and there are several improvements already planned for future iterations:
Interchangeable terrain test beds: a modular, detachable base system for holding different terrain samples (gravel, sand, regolith simulant, etc.), making terrain swapping fast and repeatable without disturbing the rig setup
Outdoor field testing: once the terrain bed system is in place, taking the rig outside to run tests on natural surfaces to validate lab results against real-world conditions
Electronics refinement: transitioning from the current loosely-run wiring to a more compact and robust wiring solution, potentially including a custom PCB to replace the breadboard/perfboard setup
Expanded wheel testing: the most important next step: running the rig against the full range of wheel designs the team has developed and manufactured, building a performance database that directly informs future design decisions