RPLidar A1 (optional, supported by champ bringup.launch)
$99
U2D2 USB converter + U2D2 Power Hub Board set
$85
Raspberry Pi 4 8GB SBC (or Jetson Nano)
$75
PLA filament for frame + TPU for paws (~2 kg) ×2
$45
3S LiPo 5200 mAh battery (12V for XM430)
$40
BNO055 9-DOF IMU (fused quaternion on imu/data)
$35
Teensy 4.0 + buck converters + bearings/fasteners
$91
Design files
cad — SpotMicro frame STLs by KDY0523 (thingiverse.com/thing:3445283, PLA + flexible-filament paws, M3/M4/M5 hardware + flange bearings) plus URDFs pulled via chvmp/robots ./install_descriptions
electronics — U2D2 + Power Hub Board wiring for 12x Dynamixel TTL daisy-chain per emanual.robotis.com; Teensy 4.0 needs 3.3V-to-5V logic-level converter for the TTL bus; BNO055 on I2C; buck converters for SBC/logic rails
firmware — chvmp/firmware (lightweight CHAMP on Teensy 3.1/3.6/4.0) or a ros_control hardware interface node that subscribes trajectory_msgs/JointTrajectory and publishes sensor_msgs/JointState per the champ Hardware Integration wiki
sim — champ Gazebo simulation (roslaunch champ_config gazebo.launch) with the config package generated by chvmp/champ_setup_assistant (pseudo-URDF, gait.yaml, joints/links maps)
Gotchas from the community
CHAMP mainline is ROS1 only (tested on Kinetic/Melodic; runs on Noetic, which reached EOL May 2025) — ROS2 support exists only via community forks/ports, not the documented master branch.
Gazebo simulation is well supported but real-hardware docs are sparse: you must write your own actuator hardware interface (subscribe JointTrajectory, publish JointState), and multiple issues (#150, #152) show real-robot bring-up friction.
Servo torque is the classic failure: stock SpotMicro MG996R/AX-12A-class servos stall under the ~3-4 kg robot's weight in dynamic gaits — XM430-W350-class (~4.1 Nm stall) is the realistic choice at ~$290/servo, dominating the BOM.
The IMU must publish a fused quaternion on imu/data with correct mounting orientation — raw MPU6050 without fusion causes bad state estimation (issues #149, #152).
champ_setup_assistant requires strict URDF conventions (per-leg hip->upper-leg->lower-leg->foot joint chains, correct knee orientation) and all actuators zeroed with legs perpendicular to the ground, or the controller misbehaves.
Gait tuning in gait.yaml is empirical: default stances can be too narrow (#155), robots flip over above ~0.7 m/s in sim, and foot-friction physics (mu1/mu2/kp) plus velocity caps need per-robot tuning.