A real physical platform running ROS 2 on an onboard Raspberry Pi. Students write code for all 21 joints — every command passes through validation, an execution queue, and instructor approval before it reaches the motors. Click the anatomy hotspots below to explore every system.
Click any hotspot. The viewer animates into that part and holds on the labeled image.
Click a hotspot on the robot to explore that system.
ROS joint names, controller assignment, safe ranges, and servo models.
All 21 joints are available to student programs. Every command passes through the protected motion-control node, which enforces these joint limits, speed limits, and command timeouts before anything reaches a motor — see Safety.
Key components. Click any card for details.
The robot's brain. Runs Linux and a ROS 2-based software stack locally — current development builds use Ubuntu 22.04 — plus the hardware driver and all student nodes. Connects to everything over GPIO, I²C, USB, and Wi-Fi. The commercial release will use a tested, supported long-term-support software image available at launch.
Publishes synchronized color and depth image streams. Color at 640×480, depth per pixel in millimeters. USB-connected to Pi. Min range ~0.3m.
16-channel PWM controllers on I²C. Two units give 32 total channels — controller 0x40 uses all 16 channels (neck, right arm, left arm), controller 0x41 uses 4 of 16 (left hand), leaving 12 channels free for future expansion. 12-bit resolution, 50Hz default frequency.
High-torque metal-gear servo for large joints (shoulders, elbows). Stall torque 13kg/cm at 6V. PWM range 500–2500µs.
Micro metal-gear servo for small joints (wrists, fingers, neck pitch). Stall torque 2.2kg/cm at 5V. Same PWM timing as MG996R.
Accelerometer + gyroscope on one I²C chip. Publishes on /swayform/imu. Used for tilt detection, shake triggers, and orientation-aware behaviors.
Time-of-flight distance sensor. Range 2cm–4m, ±3mm accuracy. Key for proximity-triggered greetings and obstacle detection behaviors.
Feeds a central bus bar with four outgoing paths: a buck converter to the Raspberry Pi (5V), two separately regulated 6V buck converters for the servo groups (one of which also supplies the neck motors), and a direct 12V line to the base-rotation DC motor. Never connect/disconnect while servos are active.
Raspberry Pi 5 has no built-in analog audio output, so sound runs Pi 5 → USB audio adapter → 3.5mm → PAM8403 amp (separately powered) → 3W speaker. Software: pyttsx3 for TTS, pygame.mixer for clips. Triggered via /swayform/audio_command.
A single 12V/50A supply feeds a central bus bar with four outgoing paths — one buck converter each for the Pi and the two servo groups, plus a direct 12V line to the base motor. Rails are separately regulated so current spikes from motors should never reset the Pi.
Final current protection, fuse sizing, and conductor ratings will be validated before classroom release. Detailed converter models, wire gauges, and measured current draw are documented in the Learning Portal technical reference.