Multi Axis Balancer
Electronically Levelled.
An advanced self-balancing legged platform inspired by Boston Dynamics Handle. Featuring a dual-processing architecture that combines an Arduino-based 100Hz PID controller with a Raspberry Pi for complex Inverse Kinematics.

Dual Processing Architecture
MABEL utilizes a decoupled compute architecture to ensure real-time balancing stability while handling complex trajectory calculations.
High-Level Control
- Inverse Kinematics Engine: Calculates precise servo angles for (x,y) foot translation.
- Trajectory Planning: Generates Bezier curves for smooth trot gait patterns.
- Comms & Servo Control: Manages Bluetooth telemetry and drives the 16-channel PCA9865 over I2C.
Low-Level Control
- Sensor Fusion: Kalman filtering on MPU-6050 (Gyro + Accelerometer) data for state estimation.
- PID Controller: Maintains pitch stability (±3° tolerance) running at ~100Hz loop rate.
- Stepper Pulse Generation: Drives dual NEMA 17 motors via A4988 drivers for precise locomotion.
Performance Telemetry
Real-time dynamic analysis during standard operating modes.
Balance Response
Pitch angle oscillates between ±3° during normal walking. The roll angle maintains strict lateral stability within ±2°.
Gait Cycle (Trot)
50% stance phase and 50% swing phase. Diagonal leg pairs operate 180° out of phase for an optimal support triangle.
Power Consumption
Draws ~200mA idle, jumping to ~800mA during active locomotion. Estimated 45+ minutes continuous operation.
IKSolve Engine
The IKSolve.py class handles the mathematical translation of the legs. By defining the mechanical dimensions (92mm upper leg, 75mm lower leg), the script translates desired Cartesian (x,y) coordinates into precise servo angles.
from IKSolve import IKSolve
# Initialize with servo home positions
ik_handler = IKSolve(
ru_home=50, rl_home=109,
lu_home=52, ll_home=23
)
# Translate leg to x: 120mm, y: 10mm
angles = ik_handler.translate_xy(120, 10)
Kinematic Bounds
- Vertical Range (X axis)98mm - 160mm
- Horizontal Range (Y axis)-50mm to +50mm
- Extended Height~320mm
Mechanical Assembly
Follow these structural integrations to mount the actuation systems onto the 3D-printed chassis.
Bearing Press-Fit Assembly
Each leg section (UpperLeg and LowerLeg) requires two bearings (thats 8x bearings in total) to push fit on opposing sides to ensure smooth rotation. The bearings can be quite tricky to fit so it's advisable to either apply slow, even pressure with a bench vice, or to soften the plastic with a hairdryer to make it easier to push in by hand. Once you've fitted the bearings, you need to push an M5 (4x in total) (30mm) bolt through the hole left and secure with a locknut.

Mounting Hip Actuators
Attach the 4x MG996R Servos to the UpperLeg(s) and BodyPanel(s) using M4 (15mm) bolts. The servos must sit flush; file off any plastic ribs if necessary.

Fitting Driver Gears
Press-fit the aluminium servo horns into the DriverGear(s) recesses. Secure the metal spline to the servo shaft using a high-torque M3 (10mm) bolt to prevent slipping under load.

Lower Leg & Traction Integration
Bolt the NEMA17 Stepper Motors to the LowerLeg using 4x M3 (10mm) bolts. Attach the 3D-printed wheels wrapped in rubber O-rings to ensure adequate grip for the PID balancing sequence.
