aibotlabs.ai Masterclass · Season 1
Life of an AMR
Autonomous mobile robotics with ROS 2 Jazzy. Build the thing, break it deliberately, and learn to read what it tells you.
- Modules
- 8
- in sequence
- Lessons
- 45
- each with a lab
- Contact hours
- 48
- planned, not measured
- Mentor
- 1
- cohort capped at 20
What you actually do
Every lesson ends at a terminal. You run a two-node system and read its structure; you build a robot description and watch the transform tree resolve; you take a map, localise in it, and drive to a goal. The book this course is built on runs to 130,000 words and 43 figures, and every computed figure in it — inertia tensors, Kalman updates, log-odds tables, docking gains — was worked out and checked before it was printed.
The method is predict-then-measure. You write down what you expect, then you run it, and the difference is the lesson. That is why the expected observations are held back until you have recorded a result.
How you are assessed
- Knowledge checks after each lesson. You answer, you submit, and only then do you see the author’s model answer and marking guidance — and score yourself against it. Your response locks when you submit, so the score means something.
- Eight module assessments, 100 marks each, marked by your mentor.
- A capstone: an integrated AMR delivery, defended.
The syllabus
Every lesson, in order, with the question it answers. This is generated from the published course, not written for the sales page.
M1Foundation: Linux and ROS 25 lessons · 5 h
| 1.1 | Robots, AMRs and the role of ROS 2 What are we building, and why does it need middleware? | 60 min not executed |
| 1.2 | Ubuntu Linux for robotics Why does the robot run Linux, and why this exact version? | 60 min not executed |
| 1.3 | Terminal, filesystem and permissions Where does everything live, and why am I denied access? | 60 min not executed |
| 1.4 | Installing ROS 2 and building a workspace Why does my code work in one terminal and not another? | 60 min not executed |
| 1.5 | Packages, colcon and the build workflow How do I turn a script into something others can depend on? | 60 min not executed |
M2ROS 2 Core: the communication layer8 lessons · 8 h
| 2.1 | Architecture, DDS and discovery How do nodes find each other with no master? | 60 min not executed |
| 2.2 | Messages and the data contract Which message type, and what do its fields actually mean? | 60 min not executed |
| 2.3 | Publishers and subscribers under load What happens when the consumer is slower than the producer? | 60 min not executed |
| 2.4 | Quality of Service Why does my subscriber receive nothing? | 60 min not executed |
| 2.5 | The same node in C++ What does C++ change, and when is it worth it? | 60 min not executed |
| 2.6 | Parameters, namespaces and remapping How do I run two robots from one codebase? | 60 min not executed |
| 2.7 | Services and actions When is a topic the wrong answer? | 60 min not executed |
| 2.8 | Launch files and system bringup How do I start eleven nodes correctly, every time? | 60 min not executed |
M3Programming and robot architecture6 lessons · 6 h
| 3.1 | Executors, callbacks and concurrency What actually runs my callbacks, and why did my node hang? | 60 min not executed |
| 3.2 | Custom interfaces What if no standard message fits? | 60 min not executed |
| 3.3 | Coordinate frames and TF2 The obstacle is 1.2 m from the sensor — where is it from the robot? | 60 min not executed |
| 3.4 | URDF: describing a robot How does software know the robot's shape? | 60 min not executed |
| 3.5 | Xacro and reusable models How do I avoid writing the same wheel four times? | 60 min not executed |
| 3.6 | Robot software architecture Which node should own this responsibility? | 60 min not executed |
M4Gazebo and the digital twin6 lessons · 7 h
| 4.1 | Gazebo, worlds and simulated time What is the simulator actually doing, and whose clock are we on? | 60 min not executed |
| 4.2 | Differential-drive kinematics and odometry Given a Twist, how fast must each wheel turn — and can it? | 60 min not executed |
| 4.3 | The ros_gz bridge Why can I see the topic in Gazebo but not in ROS 2? | 60 min not executed |
| 4.4 | Simulating sensors What does a simulated LiDAR leave out? | 60 min not executed |
| 4.5 | ros2_control and the sim-to-real boundary How does the same controller drive both robots? | 60 min not executed |
| 4.6 | Project: the complete simulated AMR Does it all work together, and how would I prove it? | 120 min not executed |
M5Real robot hardware5 lessons · 5 h
| 5.1 | The robot computer What runs on the robot, and how do I work on it without a screen? | 60 min no hardware test |
| 5.2 | Networking and remote development What should run on the robot and what should not? | 60 min no hardware test |
| 5.3 | Power, protection and safety What must be true before anything is energised? | 60 min no hardware test |
| 5.4 | Motors, drivers and encoders How do I turn a number into a turning wheel, and measure it? | 60 min no hardware test |
| 5.5 | Project: line-following robot Can it move safely, and can I prove it? | 60 min no hardware test |
M6Embedded ROS 24 lessons · 4 h
| 6.1 | Why a microcontroller What belongs down here, and how do I know? | 60 min no hardware test |
| 6.2 | micro-ROS How does a microcontroller join a ROS 2 system? | 60 min no hardware test |
| 6.3 | Closed-loop control and the safety timeout How do I honour a velocity command — and stop when nobody is asking? | 60 min no hardware test |
| 6.4 | Project: gesture as a command source What must a command source prove before it may move a robot? | 60 min no hardware test |
M7Localisation, SLAM and Nav26 lessons · 8 h
| 7.1 | Why odometry is not enough How wrong is dead reckoning, and how fast? | 60 min not executed |
| 7.2 | Sensor fusion and the Kalman filter How can two bad estimates make a good one? | 90 min |
| 7.3 | Building the map: occupancy grids and SLAM How does a robot map a place it has never seen? | 90 min |
| 7.4 | AMCL: localising in a known map Where am I on a map I already have? | 60 min |
| 7.5 | Nav2: costmaps, planning and recovery How does it decide where to drive, and what if it cannot? | 90 min not executed |
| 7.6 | Precision docking with fiducial markers How do I approach a target precisely, and stop safely? | 90 min not executed |
M8Web Interfaces and Final Integration5 lessons · 5 h
| 8.1 | Commanding navigation: actions, checkers and acceptance testing How often does it actually work? | 60 min not executed |
| 8.2 | Telemetry over rosbridge What can the robot afford to tell you? | 60 min not executed |
| 8.3 | Web teleoperation and command authority What stops it when the operator does not? | 60 min not executed |
| 8.4 | Integration, bringup and fault injection Does it survive the things that will go wrong? | 60 min not executed |
| 8.5 | Capstone: transfer to an unseen requirement Can you do this on a problem nobody taught you? | 60 min not executed |
What has and has not been tested
The course states its own limits, and so does this page. You will see the same notice on each lesson it applies to.
Configuration, on real ROS 2
Every parameter file was handed to the node that consumes it on Ubuntu 24.04 with ROS 2 Jazzy and diffed against what the node declares. 47 passed, 3 failed, 6 skipped — and the two real defects it found have been corrected.
Runtime behaviour — not run
The Gazebo half of the execution pass has never been run, because no GPU instance was available. Nobody has yet watched Module 4 run end to end.
Hardware — never validated
Modules 5 and 6 have never been tested against a real robot. The pin assignments are a labelled reference design to complete against real datasheets, not a wiring diagram.
What you will be able to do
50 module outcomes, every one of them assessed by at least one task. These are the course’s own outcome statements.
- MO1.1Describe the subsystems of an autonomous mobile robot and identify each on a system diagram
- MO1.2Explain the relationship between the Linux kernel, distribution, shell and process, and justify why Ubuntu 24.04 is the required platform
- MO1.3Navigate the Linux filesystem and diagnose permission failures from error text alone
- MO1.4Verify a ROS 2 installation and explain what sourcing a setup file changes in the shell environment
- MO1.5Create, build and run a ROS 2 package with correctly declared dependencies
- MO1.6Diagnose a broken workspace by reasoning from symptom to cause, not by matching a known fault
- MO2.1Explain how ROS 2 nodes discover each other, and isolate a system using domains
- MO2.2Select an appropriate message type for a given signal and justify the choice against semantics, units and frames
- MO2.3Predict delivery behaviour from publish rate, consumer rate and queue depth, and verify the prediction by measurement
- MO2.4Diagnose a QoS incompatibility from the symptom and correct it
- MO2.5Implement an equivalent node in C++ and state when each language is the right choice
- MO2.6Configure a node at run time using parameters, namespaces and remapping, without editing source
- MO2.7Choose correctly between topic, service and action for a requirement, and defend the choice
- MO2.8Compose a multi-node system in a launch file with parameters and namespaces applied
- MO3.1Explain how an executor dispatches callbacks, and use callback groups to prevent blocking
- MO3.2Define a custom message, service or action and build it into a usable package
- MO3.3Transform a point between coordinate frames, by hand and using TF2
- MO3.4Write a URDF describing links, joints, visual, collision and inertial properties
- MO3.5Parameterise a robot description with Xacro so one file serves several variants
- MO3.6Design a node architecture and justify the placement of each responsibility
- MO4.1Launch a Gazebo world and explain the role of simulated time
- MO4.2Derive differential-drive forward and inverse kinematics and apply them numerically
- MO4.3Determine whether a velocity command is achievable, and justify a saturation strategy
- MO4.4Configure a ros_gz bridge and diagnose a topic that fails to cross it
- MO4.5Add simulated sensors and evaluate the effect of noise on a consumer
- MO4.6Explain what ros2_control abstracts and why it enables sim-to-real transfer
- MO4.7Integrate and verify a complete simulated AMR against acceptance criteria
- MO5.1Provision a robot computer on the supported platform and operate it headlessly
- MO5.2Configure a two-machine ROS 2 system and budget the network load it imposes
- MO5.3Specify a power architecture with protection, and justify every component rating by calculation
- MO5.4Derive a pin assignment and interface specification from datasheets
- MO5.5Calculate encoder resolution and evaluate its adequacy for a control task
- MO5.6Commission a moving robot through staged gates and document the evidence at each
- MO6.1Justify the placement of a responsibility on the microcontroller or the host, from timing requirements
- MO6.2Build and flash micro-ROS firmware and establish an agent connection
- MO6.3Implement discrete PID velocity control and explain each term's contribution
- MO6.4Implement an embedded safety timeout and demonstrate it under host failure
- MO6.5Design a command source that must earn authority before it can move the robot
- MO7.1Characterise odometry error and predict its growth over a path
- MO7.2Derive and compute a Kalman update, and explain the gain
- MO7.3Build a map with SLAM and assess it against ground truth
- MO7.4Localise in a known map and diagnose localisation failure
- MO7.5Configure Nav2 costmaps and explain a planning or recovery outcome
- MO7.6Design a docking controller with justified gains and a defined failure behaviour
- MO8.1Command navigation through the action interface and measure its repeatability statistically
- MO8.2Compute a telemetry bandwidth budget and design a schema with freshness
- MO8.3Derive a command expiry from a stopping-distance requirement and implement bounded control
- MO8.4Integrate the full stack behind one entry point with defined startup order and authority
- MO8.5Inject faults and evidence the controlled response to each
- MO8.6Transfer the toolkit to an unseen requirement and defend the result honestly
Questions worth asking
Do I need my own robot?
No. Modules 1 to 4, 7 and 8 run entirely in simulation. Modules 5 and 6 describe real hardware, and you can follow them without a platform — but note that they have never been validated against one.
What if my laptop runs Windows?
The hosted lab gives you Ubuntu 24.04 with ROS 2 Jazzy in the browser. Modules 4, 7 and 8 need a GPU, and you book those sessions in advance because GPU capacity is finite.
Is there video?
Not yet, and the course does not pretend otherwise. Lessons are written, with figures, code and labs. Video is planned but not recorded, and nothing here is gated on it.
Who marks my work?
Knowledge checks you mark yourself against the author's model answer, which you see only after you submit. Module assessments and the capstone are marked by your mentor, which is why a cohort is capped at 20.
How long does it take?
48 contact hours of teaching and labs across eight weeks, plus assessment time. That figure is the book's plan, not a measurement — this course has not yet been taught.
What happens if I fall behind?
Your mentor sees it on their dashboard before you have to raise it, and a checkpoint gets scheduled. The platform tracks progress by what you complete, not by pages you have opened.
Season 1 opens with one cohort of 20
One mentor, capped deliberately. When it is full, it is full.
Enrol — ₹24,999Price inclusive of GST · Refund policy to be published before enrolment opens