Skip to content

About

Active suspension system for a 1/10th scale RC car as a rollover prevention system.

Resources

Stars

10 stars

Watchers

1 watching

Forks

Latest commit

 

History

40 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

Active Suspension System

An active suspension system for a 1/10th scale RC off-road car (modified Remo Hobby Crawler), built as a rollover prevention system. Four independently-controlled servos adjust the height of each shock absorber in real time based on chassis tilt, dynamically shifting the centre of mass to keep the vehicle level on uneven terrain.

This was developed as the artefact of an Extended Project Qualification (EPQ). The full essay covering the literature review, mechanical design iterations, electronics, testing methodology and results is available here.

How it works

A MPU6050 6-axis IMU measures the chassis orientation. The Arduino reads the sensor's DMP output as a quaternion, converts it to Euler angles (roll and pitch), and feeds each axis into its own PID controller. The control outputs are mixed and written to the four servos so that:

  • A roll error raises the shocks on the low side and lowers them on the high side.
  • A pitch error tilts the front and rear in opposite directions.
  • Servo positions are clamped to [40°, 140°] to stay within the mechanical travel of the suspension.

The result keeps the sprung mass closer to horizontal as the wheels follow the terrain, maintaining ground contact on all four wheels and reducing the risk of an untripped rollover on slopes.

Hardware

  • Arduino Nano (powered from the RC receiver's 4.8 V rail for wireless operation)
  • MPU6050 gyroscope/accelerometer module (I2C)
  • 4 × 20 kg/cm servo motors (one per corner) driving the shock absorbers via servo horns
  • 7.4 V 2S LiPo battery powering the servos
  • Radiolink R6FG 2.4 GHz RC receiver — channel 11 used to trigger IMU recalibration from the transmitter
  • 3D-printed (PLA) servo mounts and electronics enclosure
  • Soldered perfboard for stable wiring

Repository layout

  • main_sketch/ — the firmware that flies on the car. Reads the MPU6050 via DMP, runs dual roll/pitch PID loops, and drives the four corner servos. EEPROM stores the IMU calibration so the car doesn't need to recalibrate on every power cycle; holding the assigned transmitter button forces a recalibration.
  • servo_test/ — the earlier manual-control sketch used during mechanical bring-up. A potentiometer sets shock height and two buttons select between modes (all four together, side-tilt, or front/rear pitch). Useful as a standalone rig to verify wiring and servo travel.

Tuning

The PID gains live at the top of main_sketch.ino:

KP_roll = 2.0,  KI_roll = 0.01,  KD_roll = 0
KP_pitch = 2.0, KI_pitch = 0.01, KD_pitch = 0
DT = 0.5

KD is set to 0 because the raw gyro signal is too noisy to differentiate usefully. Gains were tuned by trial and error to be responsive without inducing whole-chassis oscillation.

Build & upload

  1. Open the relevant .ino in the Arduino IDE.
  2. Install the libraries used by main_sketch: I2Cdev, MPU6050 (Jeff Rowberg's MPU6050_6Axis_MotionApps20), and the bundled Wire, Servo, EEPROM.
  3. Select board Arduino Nano and upload.
  4. On first run, trigger a calibration via the assigned RC channel (the onboard LED blinks while it runs); the offsets are saved to EEPROM.

Status

The system reliably keeps all four wheels in contact with the ground and mitigates rollovers caused by abrupt wheel-grounding events. It is less effective against rollovers driven by sudden steering or acceleration inputs, where servo response speed is the limiting factor. Future work would feed steering and throttle inputs from the transmitter forward into the controller so the suspension can pre-empt those manoeuvres.

About

Active suspension system for a 1/10th scale RC car as a rollover prevention system.

Resources

Stars

10 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages