- 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
- 2025-08
First sketches
CAD studies for the joint architecture and reduction ratios.
- 2025-10
Shoulder prototype
First printed joint under load — discovered why cycloidal drives exist.
- 2026-01
Full assembly
All six axes moving under coordinated firmware control.
- 2026-04
Web control room
Browser UI with live pose preview shipped.