Open Source Robotics

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.

MABEL Robot Platform
320mm
Max Height
12x
MG996R Servos
100Hz
PID Loop Rate
3S
11.1V LiPo Power

Dual Processing Architecture

MABEL utilizes a decoupled compute architecture to ensure real-time balancing stability while handling complex trajectory calculations.

High-Level Control

Raspberry Pi Zero W
  • 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

Arduino Uno
  • 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.

System Stable

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.

Step 01

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.

Bearing press-fit assembly
Step 02

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.

Mounting servos
Step 03

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.

Driver gears
Step 04

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.

Leg Assembly