Projects Robotics

Atlas — 6-DOF Robotic Arm

A 3D-printed six-axis robotic arm with custom stepper drivers, inverse kinematics running on an ESP32, and a browser-based control room.

Active since Aug 2025 #robotics#3d-printing#esp32#kinematics
6
Degrees of freedom
43
Printed parts
0.8 mm
Repeatability
214
Firmware commits

Atlas started with a simple frustration: every affordable robotic arm I could find was either a toy or a black box. I wanted one where I understood every gear, every driver, every line of the motion planner — because I wrote them.

Why build an arm from scratch

A robotic arm is the perfect systems project. It touches mechanical design (six 3D-printed joints, each with different torque requirements), electronics (a custom carrier board routing six stepper drivers), firmware (real-time motion control under FreeRTOS), and software (a full web-based control room). Nothing teaches engineering trade-offs faster than a machine that physically crashes when you get the math wrong.

The kinematics core

The heart of Atlas is an inverse kinematics solver that runs entirely on the ESP32-S3. Given a target position and orientation for the end effector, it computes joint angles analytically for the first three axes and iteratively for the spherical wrist:

// Solve the first three joints geometrically, wrist numerically.
JointAngles IKSolver::solve(const Pose& target) {
  const Vec3 wrist = target.position - target.rotation * Vec3{0, 0, d6_};
  JointAngles q = solveArmGeometric(wrist);
  return refineWrist(q, target.rotation);
}

Running the solver at 100 Hz on-device means the arm can follow a moving target streamed over WebSockets with no perceptible lag — the browser is just a thin client.

What went wrong (and got fixed)

The first shoulder joint used a plain 3D-printed gear reduction. Under load it had over two degrees of backlash — useless for repeatability. The redesign moved to a compact cycloidal reduction, printed in PETG with a bearing race of airsoft BBs. Backlash dropped by an order of magnitude and the joint got stronger.

The control room

The browser UI renders a live wireframe of the arm’s pose, streamed at 30 fps. You can jog individual joints, record waypoints, and play back motion scripts with trapezoidal velocity profiles. Everything runs over a single WebSocket connection served by the ESP32 itself.

Development timeline

  1. 2025-08

    First sketches

    CAD studies for the joint architecture and reduction ratios.

  2. 2025-10

    Shoulder prototype

    First printed joint under load — discovered why cycloidal drives exist.

  3. 2026-01

    Full assembly

    All six axes moving under coordinated firmware control.

  4. 2026-04

    Web control room

    Browser UI with live pose preview shipped.