Phat C. Vo
← Back to Writing

Series

Building an AMR from Zero

A build log for BEEBOT2 — an autonomous mobile robot taken from an empty workspace to a robot that drives, sees, maps, localises and navigates on ROS 2 Jazzy.

Companion articles to the Build an AMR from Zero video series.

Three views of BEEBOT2: a cutaway three-quarter view showing the internal decks, a front view, and the closed outer shell.
BEEBOT2 as designed — a differential-drive indoor AMR: two driven wheels on a common axis, casters for balance. This is the enclosure concept; the scanners the robot needs from article 09 onward are not shown on it.

The videos show the build. These articles are the notes behind them — the numbers, the parameters, the failures, and the reasoning that does not fit in ten minutes of screen time.

The philosophy

The robot is the main character. ROS 2, Gazebo, LiDAR, IMU, SLAM and Nav2 are just tools that give it new abilities. It is organised as:

flowchart TD
  A["Robot knows nothing"] --> B["how to drive"]
  B --> C["how to take commands"]
  C --> D["how to feel its own motion"]
  D --> E["how to see the env"]
  E --> F["how to build a map"]
  F --> G["where it is"]
  G --> H["where to go"]
  H --> I["how to avoid obstacles"]
  I --> J["how to protect itself"]
  J --> L["how to do a job"]
  L --> M["how to talk to server"]

  classDef step fill:#e7e5e4,stroke:#57534e,color:#1c1917
  class A,B,C,D,E,F,G,H,I,J,K,L,M step

Every article is one step of that ladder. Each one starts from a problem the robot cannot yet solve, builds the smallest thing that solves it, tests it, and ends with the next problem.

The plan — four phases

Twenty-two articles, grouped by what the robot can do at the end of each block. A phase is finished when its exit criterion is met on the robot, not when its last article is published.

PhaseArticlesThe robot goes from……to
1 · It moves01 – 07nothinga body that drives, in two worlds
2 · It senses08 – 10blind and unawaremeasuring motion, space and energy
3 · It navigates11 – 16drivendeciding its own route
4 · It works17 – 22a demoa machine that can be left running

The final target

Everything above points at one thing:

BEEBOT2 accepts a mission from a system that has never heard of ROS 2, drives to a point in a warehouse it mapped itself, moves a payload, returns to its dock and charges — unattended, repeatably, on real hardware, while a second robot works the same aisles.

Repeatably and on real hardware are the load-bearing words. In line with the one rule below, the target is written as numbers that can be checked, together with where the project actually stands against each:

Who this is for

  • Robotics, mechatronics and automation students.
  • Engineers learning robotics, or moving from ROS 1 to ROS 2.
  • Anyone who wants a practical route into AMRs rather than a tutorial tour of individual packages.
  1. I'm Building an AMR from Zero 12 min
  2. Testing the Drive System on the Bench 11 min
  3. Making the AMR Move for the First Time 11 min
  4. Driving the AMR with a Logitech F710 9 min
  5. Building the AMR in URDF 9 min
  6. Turning the AMR into a Digital Robot 8 min
  7. One ROS 2 Interface for the Real Robot and Simulation 7 min
  8. Giving the AMR a Sense of Motion 11 min
  9. Giving the AMR Eyes with LiDAR 9 min
  10. Reading the AMR's Battery with ROS 2 7 min
  11. Teaching the AMR to Build Its Own Map 10 min
  12. The Map Looks Good — But Is It Actually Good? 9 min
  13. How Does the AMR Know How It Moved? 8 min
  14. How Does the AMR Know Where It Is? 9 min
  15. Teaching the AMR to Go to a Target 9 min
  16. It Can Navigate — But Why Does It Still Fail? 9 min
  17. Building a Safety System for the AMR 9 min
  18. A Safety System the Robot Couldn't Escape From 8 min
  19. Teaching the AMR to Find Its Charging Station 9 min
  20. Turning the AMR into a Real Service Robot 9 min
  21. Controlling an AMR from Outside ROS 2 8 min
  22. When Multiple AMRs Share One Warehouse 10 min