BEEBOT2 is an autonomous mobile robot taken from an empty workspace to a machine that drives, sees, maps, localises and navigates — built in public as a written build log alongside a companion video series.
The series is deliberately not organised as a tour of individual packages. It follows the robot: it learns to drive, to take commands, to feel its own motion, to see, to build a map, to know where it is, to plan a route, to protect itself, to charge, to do a job, and finally to work alongside other robots. Each article starts from a problem the robot cannot yet solve, builds the smallest thing that solves it, measures the result, and ends with the next problem.
The build covers:
- Drive system — two BLDC gear motors on an MDROBOT MD200T controller over a single RS485 bus, wrapped in a ros2_control hardware component.
- Digital robot — URDF/xacro description with geometry regression tests, and a Gazebo Harmonic warehouse that mirrors the real launch graph.
- Sensing — LiDAR, a MicroStrain 3DM-GX5 IMU, wheel encoders, RGBD camera and bumper, fused into one motion estimate with robot_localization.
- Power — a lithium pack with DALY BMS telemetry published as sensor_msgs/BatteryState, so the stack can reason about remaining runtime.
- Autonomy — slam_toolbox for mapping, map-quality scoring tools, AMCL for localisation, and Nav2 for planning and control, with twist_mux arbitrating command priority.
- Safety and service — protective and warning fields, E-stop integration, failure-mode analysis, docking and charging, payload HMI, and a robot API built for fleet attachment.
The most important architectural decision is that the simulation is not a side project: sim.launch.py and robot.launch.py are deliberate mirrors, sharing the same controller configuration, the same diff_drive_controller and the same EKF. Only the hardware component underneath swaps — Gazebo on one side, the RS485 driver on the other. The same code also runs a 300 kg warehouse platform, which is the cheapest possible proof that the stack is not secretly tied to one chassis.