Recorded runsGitHub
Andino (official image)
Photo: Ekumen — the real robot, from the official Andino repository (docs/real_robot.png)
#001

Andino

Ground — wheeled · Differential rover
Differential-drive ground robot
FailHarness checks: 2 clean · 1 warn · 0 err · 29 not checked

An open-source ROS 2 robot from Ekumen, built to teach real robotics on a budget: two driven wheels and a caster, a spinning lidar on top, a Raspberry Pi for a brain. It is the first robot in the Robodex that RobotForge did not design — its spec here was read out of the official project's own files.

Spec

Battery3x 18650 Li-ion cells, ~11.1 V nominal (official BOM holder); capacity varies by cell — the spec uses 2600 mAh as a labelled estimate
Chassis0.25 m long x 0.10 m wide base deck (official URDF base.yaml); overall width 0.153 m across the wheels, wheel track 0.128 m
ComputerRaspberry Pi 4 + Arduino Nano (official BOM)
Drivetraindifferential — 2 driven wheels + ball caster
Ground clearance~0.03 m — estimate; the URDF base plane rides at wheel radius (0.0331 m)
Height~0.18 m — estimate derived from the URDF deck stack
Mass3.364 kg — the sum of the official URDF link masses (several are round values upstream)
Motors2x DG01D-E gearmotors with encoders, 48:1 gearbox, rated 3-9 V (SparkFun listing linked from the official BOM), driven via an L298N
SensorsRPLIDAR A1M8 2D lidar (top), Raspberry Pi Camera V2 (front), BNO055 IMU, wheel encoders
Wheels66.2 mm diameter x 25 mm — official wheel.yaml radius 0.0331 m
Source: Ekumen-OS/andino (official project repository) · linkLicense: BSD-3-ClauseSpec file: examples/andino.jsonLicense is per-package LICENSE files in the repo (each reads BSD 3-Clause, (c) 2023 Ekumen Inc.); the repo root carries no single LICENSE file. Spec values were read from andino_description/config/andino/*.yaml and the andino_hardware BOM.

Gate 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.

RunDrive vs truthTurn vs truthOdometry distanceOdometry heading
Run 11.497%3.425°0.003%8.285°
Run 20.347%9.104°0.003%11.624°
  • Run 1: Gate run 1 on scythe, 2026-10-26, build/gate-andino-1/gate-report.json — run verdict MARGINAL (motion vs ground truth PASS; odometry heading MARGINAL)
  • Run 2: Gate run 2 on scythe, 2026-10-26, build/gate-andino-2/gate-report.json — run verdict FAIL (turn vs ground truth MARGINAL at 9.104 deg; odometry heading FAIL at 11.624 deg)
Two recorded runs on scythe (2026-10-26), no PASS — recorded as measured; the locked thresholds were not touched. The drive is excellent in both runs (1.497% / 0.347% against ground truth, odometry distance error 0.003%), but the pivot turn is the failure mode: the robot is heavy (3.364 kg — the sum of the official URDF link masses) on two passive caster balls, so in a turn it physically under-rotates while its wheel odometry (perfect joint integration) over-reads heading by 8.285-11.624 degrees. The gate's own suspect line names wheel_separation / caster scrub. Diagnosis recorded; the verdict was not massaged.

Harness checks

Electrical computations over this robot's documented wiring graph — voltage drop, ampacity, logic levels, rail budgets, connector matching. Not a gate run and not a simulation: each check is Checked, Partial or Not checked, and the headline is counts, never a blanket pass.

Harness checks: 2 clean · 1 warn · 0 err · 29 not checked

2 checked clean · 1 with warnings · 0 with errors · 2 partial · 29 not checked · missing data: cable.gauge_awg ×12, connector at both ends (connector_from / connector_to) ×12, current_a for nano ×7

CheckCheckedPartialNot checked
voltage drop006
ampacity006
logic levels303
rail budget022
connector match0012

Findings (1):

  • [WARN] controller -> nano: logic levels 3.3 V and 5 V do not agree and no level shifter is recorded on the link — a 3.3 V input is not 5 V tolerant; add a shifter or record one

Missing data — the datasheets still to hunt. A check that could not run says what it needs:

Missing inputBlocksNeeded by
cable.gauge_awg12battery -> driver, battery -> regulator, regulator -> controller, controller -> nano …
connector at both ends (connector_from / connector_to)12battery -> driver, battery -> regulator, regulator -> controller, controller -> nano …
current_a for nano7battery -> regulator, regulator -> controller, controller -> nano, controller rail
cable.length_mm6battery -> driver, battery -> regulator, regulator -> controller, controller -> nano …
current_a for motors5battery -> driver, driver -> motors, driver rail
connection voltage (volts)2driver -> motors, controller -> lidar
current_a for controller1regulator rail
current_a for driver1battery rail
current_a for regulator1battery rail
logic_v for camera1controller -> camera
logic_v for imu1controller -> imu
logic_v for motors1motors -> nano
rated output current for battery1battery rail
rated output current for controller1controller rail

Report: catalog/harness-reports/andino.json · checked 2026-10-27 · reproduce with robotforge harness examples/andino.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.

Loading examples/andino.json…

Reproduce it

Run these from a clone of the repository.

robotforge validate examples/andino.json
robotforge urdf examples/andino.json --out build/andino.urdf
robotforge cad examples/andino.json
robotforge run-gate examples/andino.json
robotforge harness examples/andino.json