
TurtleBot3 Waffle Pi
The bigger TurtleBot3: a waffle-shaped deck carrying a lidar and a camera. RobotForge knows this one from a photograph — the photo intake identified it and drafted its spec, so every dimension here is an estimate until somebody measures the real robot.
Spec
| Drivetrain | differential — 2 driven wheels + caster |
|---|---|
| Footprint | 0.306 m x 0.281 m x 0.141 m — ESTIMATED from the photo draft, based on the published approximate size |
| Mass | 1.8 kg (photo draft) |
| Motors | 2x Dynamixel XL430 (photo draft) |
| Sensors | 2D lidar (top), RGB camera (front), IMU, wheel encoders |
| Wheels | 66 mm diameter (photo draft) |
examples/photo-turtlebot.jsonThe spec is a photo draft (all dimensions ESTIMATED) produced by `robotforge describe --photo`; the official Waffle Pi URDF was pulled by `robotforge lookup` under Apache-2.0.GateA pass/fail test in the Gazebo simulator: the twin drives 1 m, turns 90° and stops, and the result is measured against where it really went. runs
Measured against simulator ground truth at the locked thresholds: pass ≤ 5% / 5°, fail over 10% / 10°. The gate tests the spec's simulated twin, not a physical robot.
No recorded gate runs yet. This robot has no verdict until one is measured.
HarnessThe robot’s wiring. The harness check adds up current on each power rail and flags wires that are too thin or rails that are overloaded. checks
Electrical checks over this robot's documented wiring. Not a simulation; the headline is counts, never a blanket pass.
3 checked clean · 0 with warnings · 0 with errors · 0 partial · 20 not checked · missing data: cable.gauge_awg ×8, connector at both ends (connector_from / connector_to) ×6, current_a for lidar ×5
Check-by-check counts and missing data
| Check | Checked | Partial | Not checked |
|---|---|---|---|
| voltage drop | 0 | 0 | 4 |
| ampacity | 0 | 0 | 4 |
| logic levels | 1 | 0 | 3 |
| rail budget | 0 | 0 | 3 |
| connector match | 2 | 0 | 6 |
Findings: none — the inputs that could be checked raised nothing. That is not the same as everything being checked; the counts above say how much was.
Missing data — the datasheets still to hunt. A check that could not run says what it needs:
| Missing input | Blocks | Needed by |
|---|---|---|
cable.gauge_awg | 8 | battery -> driver, driver -> motors, battery -> controller, controller -> lidar |
connector at both ends (connector_from / connector_to) | 6 | battery -> driver, battery -> controller, controller -> lidar, controller -> camera … |
current_a for lidar | 5 | battery -> controller, controller -> lidar, controller rail |
current_a for motors | 5 | battery -> driver, driver -> motors, driver rail |
cable.length_mm | 4 | battery -> driver, driver -> motors, battery -> controller, controller -> lidar |
connection voltage (volts) | 2 | battery -> controller, controller -> lidar |
current_a for controller | 1 | battery rail |
current_a for driver | 1 | battery rail |
logic_v for camera | 1 | controller -> camera |
logic_v for imu | 1 | controller -> imu |
logic_v for lidar | 1 | controller -> lidar |
rated output current for battery | 1 | battery rail |
rated output current for controller | 1 | controller rail |
rated output current for driver | 1 | driver rail |
Report: catalog/harness-reports/turtlebot3-waffle-pi.json · checked 2026-10-27 · reproduce with robotforge harness examples/photo-turtlebot.json
Take it apart
Every spec becomes a kit of simple, 3D-printable parts (robotforge cad). This viewer lays the kit out the way the kit's own assembly file does, straight from the spec's numbers — flat views, or in 3D with the toggle. Click any part.
examples/photo-turtlebot.json…Parts kit
The take-apart kit robotforge cad generates from this robot's spec: every part the generator defines, what it does, and the parameters worth tweaking with the values this robot's kit ships with. Each parameter carries the generator's own source label — from spec numbers come out of the spec, derived numbers are computed from them, and assumption numbers are typical values the spec does not carry.
Chassis plate ×1
parts/chassis_plate.scadThe deck everything else bolts to.
306 x 281 mm footprint, 4 mm thick
| Parameter | Value | Where the number comes from |
|---|---|---|
chassis_length_mm | 306 mm | from spec length_m |
chassis_width_mm | 281 mm | from spec width_m |
plate_thickness_mm | 4 mm | assumption — not in the spec |
corner_radius_mm | 6 mm | assumption — not in the spec |
mount_hole_diameter_mm | 3.4 mm | assumption — M3 bolt clearance |
mount_hole_inset_mm | 12 mm | assumption — not in the spec |
Print note: Print flat as modeled. Suggestion: 3-4 walls, ~25% infill.
Wheel ×2
parts/wheel.scadRolls on the ground; one per wheel position on the robot.
66 mm diameter x 26 mm wide, 6 mm shaft hole
| Parameter | Value | Where the number comes from |
|---|---|---|
wheel_diameter_mm | 66 mm | from spec wheel.diameter_m |
wheel_width_mm | 26 mm | from spec wheel.width_m |
shaft_diameter_mm | 6 mm | assumption — typical DC gearmotor shaft; measure yours |
hub_diameter_mm | 26.4 mm | derived — 0.4 x wheel diameter, for looks/strength |
lightening_hole_diameter_mm | 7.9 mm | derived — decorative; delete the loop below for a solid wheel |
Print note: Print flat as modeled. Suggestion: print one first and check the shaft fit before printing the rest.
Motor mount ×2
parts/motor_mount.scadSide plate that holds one drive motor so its shaft lines up with a wheel's axle.
42 mm wide plate, shaft hole at axle height 33 mm
| Parameter | Value | Where the number comes from |
|---|---|---|
shaft_center_height_mm | 33 mm | from spec wheel radius (diameter_m / 2) — the axle height above ground |
mount_width_mm | 42 mm | derived — wheel width + 16 mm of plate around the motor |
mount_height_mm | 44 mm | derived — reaches from the ground past the axle to the chassis plate |
mount_thickness_mm | 4 mm | assumption — not in the spec |
shaft_hole_diameter_mm | 6.4 mm | derived — shaft diameter + 0.4 mm slip fit |
flange_depth_mm | 16 mm | assumption — how far the bolting flange reaches under the chassis |
flange_hole_diameter_mm | 3.4 mm | assumption — M3 bolt clearance |
Print note: Suggestion: 40% infill — this part takes the motor's twist. The motor itself is not a printed part.
Caster ×2
parts/caster.scadBall caster that keeps a two-wheel robot level (one front, one rear). Placeholder for a real ball-caster unit.
ball diameter 20 mm (= ground clearance, so the ball tops out at the deck)
| Parameter | Value | Where the number comes from |
|---|---|---|
caster_ball_diameter_mm | 20 mm | from spec ground_clearance_m — ball top meets the deck underside |
caster_stem_height_mm | 10 mm | derived — reaches into/past the deck plate for bolting |
caster_stem_diameter_mm | 10 mm | derived — half the ball diameter |
Print note: Suggestion: expect a loose fit — sand or scale 1-2% for a snug cup. A bought ball caster rolls far better.
Lidar mount ×1
parts/lidar_mount.scadPost that raises the 2D lidar to the top of the robot so its scan plane clears the chassis.
post 131 mm tall, top disc 70 mm diameter
| Parameter | Value | Where the number comes from |
|---|---|---|
post_height_mm | 131 mm | derived — spec height minus deck and disc thicknesses |
post_diameter_mm | 12 mm | assumption — not in the spec |
lidar_disc_diameter_mm | 70 mm | assumption — typical 2D lidar puck; measure yours |
disc_thickness_mm | 3 mm | assumption — not in the spec |
Print note: Print upright as modeled. Suggestion: ~25% infill; the lidar itself is not a printed part.
Camera bracket ×1
parts/camera_bracket.scadBracket that holds a camera (rgb_camera) at the front of the robot.
44 x 34 mm plate, 12 mm lens hole
| Parameter | Value | Where the number comes from |
|---|---|---|
bracket_width_mm | 44 mm | assumption — small-camera class; not in the spec |
bracket_height_mm | 34 mm | assumption — not in the spec |
bracket_thickness_mm | 3 mm | assumption — not in the spec |
lens_hole_diameter_mm | 12 mm | assumption — measure your camera |
foot_depth_mm | 20 mm | assumption — how far the bolting foot reaches |
Print note: Print flat as modeled. Suggestion: the lens hole is a visual guide — measure your camera before drilling.
Reproduce it
Run these from a clone of the repository.
robotforge validate examples/photo-turtlebot.json
robotforge urdf examples/photo-turtlebot.json --out build/turtlebot3-waffle-pi.urdf
robotforge cad examples/photo-turtlebot.json
robotforge run-gate examples/photo-turtlebot.json
robotforge harness examples/photo-turtlebot.json