What it is
Yertle is a 3D-printed quadruped built for locomotion research. Four legs, three degrees of freedom each, driven by hobby servos with about 20 cm of leg extension. An ESP32 handles servos and sensors and does the inverse kinematics and safety limits on-board; an optional Raspberry Pi 4 runs ROS 2, vision and heavier controllers. A 5000 mAh pack gives about 30 minutes. It weighs 1.8 kg and costs roughly £250.
The design borrows the leg mechanism from Kangal and the body from SpotMicro, deliberately, so it stays parts-compatible with both: SpotMicro shells fit, Kangal legs swap in, and their electronics and control software work with minor changes.
From a hand-tuned gait to a learned one
The first version walked on a hand-tuned sinusoidal gait from a Python GUI. That still exists and is the easiest way in. But the robot now also walks on a policy learned entirely in simulation and transferred to the hardware.
CPU path — PyBullet. The same URDF (with the firmware's real joint limits and valid inertials) is wrapped in a Gymnasium environment and trained with PPO. Domain randomisation on mass, friction, sensor noise and external pushes closes the sim-to-real gap.
GPU path — NVIDIA Isaac Lab. The URDF is converted to USD and dropped into Isaac Lab's velocity-tracking task, then trained with rsl_rl PPO across 4096 parallel environments on a single RTX GPU. A walking policy converges in about ten minutes at roughly 80,000 simulation steps per second. There is a rough-terrain task on procedural terrain with a height scanner, and teacher-student distillation that removes the privileged base-velocity observation with no loss of performance, so the deployed policy runs from on-board sensors only.
The trained policy outputs joint targets onto the existing UDP command path. No firmware change is needed to deploy it. That was a design goal: the robot side stays a dumb, safe servo controller and the intelligence lives on the host.
Architecture
host (Python 3 / ROS 2) robot (ESP32, C++) ------------------------ ------------------------ GUI gait or RL policy --UDP/WiFi--> IK, safety limits, PyBullet digital twin <--sensors-- 12 servos (PCA9685), Isaac Lab bridge 9-axis IMU, V/I sense
Host and robot talk over serial or UDP over WiFi. The ESP32 replaced an earlier Pi-only design because it is far easier to reset remotely and does not corrupt an SD card when the battery dies mid-test.
Build
All parts print in PLA or ABS on a 150 x 150 mm bed. Budget about two weeks of printing on an Ender 3 class machine. The BOM, print files (STEP, STL, IGES), electronics and wiring, and a step-by-step assembly guide are all in the repo.
Try it without a robot
git clone https://github.com/Jerome-Graves/yertle.git cd yertle pip install -r requirements.txt python software/yertle_ui/yertle_ui.py
Press Start Simulation to open the PyBullet digital twin and drive it with the arrow keys. The RL and Isaac Lab pipelines have their own READMEs.
Licence
MIT.
Everything is on GitHub
Print files, BOM, firmware, control GUI, URDF, both RL pipelines, ROS 2 package, and a technical report:
github.com/Jerome-Graves/yertle
Jerome Graves