Learn robotics, in order

Four tracks, each lesson building on the last. Every lesson states its objectives, shows a diagram or chart, gives code that actually runs in simulation, and ends with an exercise.

All lessons are free to read until 31 Jan 2027. No account, no sign-up.

Beginner

10 lessons

From “what is a robot?” to driving a simulated arm.

What is a robot? Sense, plan, act

The loop that every robot runs, how to count degrees of freedom, the difference between workspace and configuration space, and the main kinds of robot you will meet at work

25 min · concepts

Frames, rotations and transforms with numpy

Rotation matrices, the right-hand rule, composing rotations, 4x4 homogeneous transforms, moving points between frames and inverting a transform, all in numpy, plus the REP 103 conventions ROS uses

40 min · python, numpy, scipy

Forward kinematics of a two-link arm

Compute where a planar two-link arm's tip is from its joint angles, by trigonometry and by chaining homogeneous transforms, check that the two agree, and sweep the joints to map the reachable workspace

35 min · python, numpy

Inverse kinematics: analytic and numeric

Find the joint angles that put a two-link arm's tip on a target, with the law of cosines and with a damped least-squares solver, handle unreachable targets, and see what singularities do to the numbers

45 min · python, numpy, scipy

PID control of a robot joint

Simulate a DC-motor joint with a load in numpy, then close the loop with P, PI and PID control, see integral windup under voltage saturation, fix it with clamping, and take the derivative on the measurement

45 min · python, numpy

Sensors, noise and a first Kalman filter

Encoders, IMUs and range sensors, the three kinds of error they share, why averaging is not filtering, and a 1-D constant-velocity Kalman filter in numpy tracking a robot from noisy positions

40 min · numpy

Differential-drive kinematics and odometry

Convert wheel speeds to body velocity and back, integrate odometry with Euler and exact-arc steps, and watch small wheel-radius and track-width errors turn into metres of drift

40 min · numpy

Path planning on a grid with A*

Occupancy grids, 4- and 8-connected moves, admissible heuristics, and an A* planner in pure Python with heapq that you compare against Dijkstra by counting expanded cells

40 min · python

Simulate an arm in MuJoCo

Build a two-link arm in MJCF, step it headless with the mujoco Python bindings, read joint and site state, check it against forward kinematics, and close a PD loop with and without gravity compensation

45 min · python, numpy, mujoco

Hello, ROS 2: a publisher, a subscriber and tf2

Nodes, topics, messages and QoS in ROS 2 Jazzy, a talker and listener in one Python process, and a tf2 frame tree with static and dynamic transforms looked up from a Buffer

45 min · ros2-python

Intermediate

0 lessons

Dynamics, control, estimation and your first ROS 2 system.

Lessons for this track are being written. The beginner track is the place to start.

Advanced

0 lessons

Planning, manipulation, SLAM and legged locomotion.

Lessons for this track are being written. The beginner track is the place to start.

Expert

0 lessons

Research frontier: robot learning, whole-body control and real-world deployment.

Lessons for this track are being written. The beginner track is the place to start.