An overview

How a robot actually works.

A robot arm picks up a mug. Behind that are 5 separate hard problems, each with its own decades of history, and a recent argument about whether one large model can replace all of them. This page walks the whole stack, from what a robot physically is to the models on the frontier. No robotics background assumed.

The hard part of robotics isn’t the robot.

A modern arm is a well-understood piece of engineering: motors, gears, encoders, a bus. You can buy one. What’s hard is that the world doesn’t hold still, the robot only knows what its sensors tell it, and every action it takes changes the situation it then has to reason about.

That’s why the field keeps restarting. Each era found a method that worked beautifully inside its assumptions and fell over outside them. This page is the stack those attempts built, and the honest state of the argument now.

If frames, quaternions and the Jacobian are already familiar to you, start at Simulation and skip the geometry.

What a robot actually is

Strip away the science fiction and a robot is a loop.

Sense cameras · joint encoders force sensors Think controller · policy learned model Act motors apply torques The physical world noisy · delayed · no undo 50–1000 Hz · the whole loop runs again every few milliseconds
The sense-act loop.

Wider than the screen; scroll it sideways.

Everything in this subject is a way of filling in one of those boxes. And the loop’s rate silently decides which techniques are even available to you: a method needing 200 milliseconds per decision is unusable in a loop that has to close in 10.

The machine itself

six revolute joints = six degrees of freedom · the minimum to reach any nearby point in any orientation J1 J2 J3 J4 J5 J6 base yaw shoulder elbow forearm roll wrist pitch wrist roll swivels the arm raises the arm folds the arm spins the forearm tilts the gripper spins the gripper fixed base Link a rigid 'bone' assumed never to bend End-effector the business end Camera the robot's eyes watches the workspace each joint is one servo: motor + gearbox + an encoder that reports the joint's own angle
The anatomy of an arm.

Wider than the screen; scroll it sideways.

Links are the rigid pieces. Joints are where they move relative to each other, rotating, mostly. Actuators turn electricity into motion at those joints. Encoders report where each joint actually is.

The count of independently controllable joints is the arm’s degrees of freedom, and it decides what poses are reachable at all. With 6 you get any position and any orientation within reach. Fewer, and some orientations are simply unavailable.

What sensing actually returns

This is where intuition misleads people most.

The gap between raw numbers and useful belief is most of the work. It’s also why a demo that runs perfectly in a lab falls over in a kitchen: the numbers changed, and nothing in the pipeline was built to notice.

Why the field kept restarting

Robotics has had several confident eras, and each one ended the same way.

more arranged · everything known before the robot arrives less arranged · nothing known Die-cast cell fixture holds part same pose, always Warehouse floor floor QR codes humans fenced out Rehearsed course tasks known ahead teams rehearsed Public roads lane paint, signs plus a prior map A kitchen nothing repeats people in the way 4,664,000 deployed industrial robots, 2024 Zero deployed general-purpose, in homes
From arrangement to open world.

Wider than the screen; scroll it sideways.

Industrial automation worked magnificently by removing the uncertainty: bolt the part in a jig, repeat the same motion a million times. It still runs most of manufacturing. It also can’t pick up a crumpled cloth, because nothing about it was ever about perception.

The next attempt was to program the intelligence explicitly: enumerate the cases, write the rules. That worked in the lab and collapsed in the world.

rules add one case each; scenes multiply Object 20 items × Pose 50 placements × Light 6 conditions × Backdrop 8 surfaces × Occlusion 4 degrees = 190,000 distinct scenes every other scene the robot will actually meet 47 hand-written rules cover this much; sliver not drawn to scale
Cases multiplying faster than anyone can write them.

Wider than the screen; scroll it sideways.

Why does the rate of the control loop constrain which methods you can use?

Because every method has a cost per decision. If the loop has to close every 10 milliseconds to keep the arm stable, anything taking 200 milliseconds can’t sit inside it. That’s why the field ends up with layered architectures: something slow deciding what to do, something fast keeping the machine steady while it happens.

Where things are, and how they move

Before any learning, there’s geometry. This part is the vocabulary the rest of the subject is written in.

Frames: every position is relative to something

“The mug is at (0.3, 0.1, 0.05)” isn’t a fact until you say in which frame. Most confusing robotics bugs are one frame mistaken for another.

Transforms compose, and the order isn’t negotiable

A transform carries a pose from one frame into the next: a rotation and a shift, packed into one object so they can be chained.

read T_AB as 'the pose of frame B, expressed in frame A' {W} the room {B} robot base {S} shoulder joint {E} elbow joint {H} hand / gripper T_WB T_BS T_SE T_EH T_WH = T_WB · T_BS · T_SE · T_EH B S E touching subscripts must match, then cancel · W←B, B←S, S←E, E←H leaves W←H The classic error T_EH · T_SE · T_BS · T_WB the same four factors reversed · H and S never touch, so nothing cancels
A chain of transforms from base to hand.

Wider than the screen; scroll it sideways.

Chaining transforms is function composition. Base to shoulder, shoulder to elbow, elbow to wrist, wrist to hand. Multiply them in order and you have the hand’s pose in the base frame.

Three angles, and where the map tears

The obvious way to write a 3D rotation is three angles: roll, pitch, yaw. It’s readable, it’s what everyone reaches for first, and it has a defect that isn’t obvious until it bites.

one journey over the top, described two ways straight up pitch = +90° before after the territory one smooth sweep across the top 180° of yaw, no motion at all pitch +90 pitch 0 pitch −90 yaw −180 0 +180 the map the whole red edge is that one direction
Where the Euler map tears.

Wider than the screen; scroll it sideways.

The fix is a four-number representation called a quaternion. It’s harder to read and it has no tears anywhere, which is why essentially all production robotics carries orientation as quaternions and converts to angles only for display.

one rotation axis n = (0, 0, 1) angle φ = 90° what physically happens encode x 0.0000 nx · sin(φ/2) y 0.0000 ny · sin(φ/2) z 0.7071 nz · sin(φ/2) w 0.7071 cos(φ/2) scipy stores them in this order · w last x² + y² + z² + w² = 1 four numbers, one constraint, three real degrees of freedom · the same three the rotation had
What the four numbers encode.

Wider than the screen; scroll it sideways.

Forward and inverse: the two directions

Forward kinematics goes from joint angles to hand pose. It’s a straightforward chain of transforms, and it always has exactly one answer.

two revolute joints in a plane · the worked example this course keeps coming back to y x θ1 θ2 l1 l2 elbow end-effector the pose FK computes θ1 is measured from the world x-axis · θ2 from link 1 extended (dashed) Forward kinematics x = l1 cos θ1 + l2 cos(θ1 + θ2) y = l1 sin θ1 + l2 sin(θ1 + θ2) φ = θ1 + θ2 same walk, written as transforms: T_0E = Rz(θ1)·Tx(l1)·Rz(θ2)·Tx(l2) two angles in · exactly one pose out
The two-link arm, the worked example the course keeps returning to.

Wider than the screen; scroll it sideways.

Inverse kinematics goes the other way: given a pose you want the hand to reach, what angles get it there? That question may have one answer, several(elbow up or elbow down), or none at all if the point is out of reach.

The Jacobian: if I nudge this joint, where does the hand go?

Between forward and inverse sits the most useful object in the subject.

θ1 = 30° · θ2 = 60° · l1 = 1.0, l2 = 0.7 · hand at (0.87, 1.20) base elbow hand l1 l2 column 1 column 2 column 1 ⊥ this line each column is a hand velocity, for 1 rad/s at that joint alone column 1 · the shoulder hand swings about the base, radius 1.48 direction: perpendicular to base → hand 1° of joint 1 moves the hand 25.8 mm column 2 · the elbow hand swings about the elbow, radius 0.70 direction: perpendicular to link 2 1° of joint 2 moves the hand 12.2 mm arrows drawn to scale: column 1 is 2.1× longer, so the shoulder is the more powerful knob here
Each column is one joint's contribution.

Wider than the screen; scroll it sideways.

It answers the practical question directly: to move the hand this way, which joints and how much? That makes it the engine inside most inverse-kinematics solvers, and the reason they’re iterative. Take a step, recompute, repeat.

Singularities: where the arm loses a direction

θ2 = 0 · the arm is fully straight · det J = l1·l2·sin θ2 = 0 joint 1 joint 2 no bend left: θ2 = 0 hand l1 l2 lost direction no joint velocity moves the hand along its own axis still free perpendicular to the arm: both columns of J point here 2 joints, but only 1 direction of motion: a whole degree of freedom is gone
An arm at a singularity.

Wider than the screen; scroll it sideways.

At certain configurations(an arm stretched straight out, typically), two joints end up contributing the same motion, and some direction becomes unreachable no matter what the joints do.

Control: measuring the mistake instead of predicting it

Commanding a joint to an angle doesn’t put it there. Gravity, friction and load all interfere. So instead of predicting the right command, you measure the error and correct continuously.

0 s 1 s 2 s 3 s 4 s 5 s 45° 90° 125° target PID lands on 90.02° PD steady, 13.65° low P still swinging at 5 s time
Proportional, then PD, then full PID.

Wider than the screen; scroll it sideways.

Inverse kinematics can have several answers. Why is that a practical problem?

Because you have to choose, and the choices aren’t equivalent. Elbow-up and elbow-down may both put the hand in the right place while one collides with the table, passes through the workspace boundary, or leaves the arm near a configuration where it loses a direction of movement entirely. The solver gives you geometry; something else has to supply judgement.

Simulation: making the mistakes for free

A simulator is where you break things that would cost money to break, and where the gap between your model of the world and the world becomes measurable.

A physics engine is a state machine you advance

You describe bodies, joints and contacts; the engine integrates forward a small step at a time. Nothing happens except when you advance it. That’s a feature: the run is reproducible, and a reproducible failure can be debugged.

You decide what the robot may see

data.ctrl[0] = 1.0 <motor> ctrl is a torque, N·m <position> ctrl is a target angle, rad <velocity> ctrl is a target speed, rad/s settles at 30.7° 1 N·m balances gravity at 30.6°, reached slowly settles at 47.0° 1 rad is 57.3°; gravity buys back the difference past 934°, still turning no angle was ever asked for, so none is ever reached
One number is all an actuator gets.

Wider than the screen; scroll it sideways.

Everything the controller wants becomes a single command per joint, which is where simulation and hardware finally agree. And on the sensing side you choose the cameras, their placement and their resolution, which means you can accidentally give a simulated robot information no real one would have.

Contact: the parameters you didn’t write

Grasping is where simulators are least trustworthy, and it’s worth knowing why.

the cube friction you wrote the finger friction the model ships same priority? geom_priority yes no element-wise maximum the rougher surface wins every component making one side slippery changes nothing the higher priority wins outright its friction, condim and solref are used the other geom's values are ignored the SO-101 gripper geoms carry priority 1, so on this arm the second branch is the live one and the only friction that matters at the fingertips is the finger's
Who owns a contact.

Wider than the screen; scroll it sideways.

Free-space motion is well-determined physics. The moment two surfaces touch, the result depends on friction, stiffness, damping and the solver’s own settings: numbers you probably never chose, inherited from whatever model file you started from.

Planning: the arm becomes a point

A neat reframing. Instead of thinking about an arm sweeping through space, represent every possible configuration as a single point in a space of joint angles. Obstacles become forbidden regions, and planning a motion becomes finding a path between two points.

the bench, seen from above the reachable ring from Module 1 A B C D A is 0.81 from the base: the upper arm reaches it B, C and D are 1.42 to 1.45 out: only the forearm does configuration space, shaded where the arm hits something A B C D shoulder, -π to +π elbow A becomes a band the upper arm's position depends on the shoulder alone, so every elbow value is blocked B, C, D become slivers only the forearm reaches them, and the forearm depends on both joints, so the region bends D crosses the right edge and returns on the left: the space wraps
The arm's shadow in configuration space.

Wider than the screen; scroll it sideways.

Throwing darts at a space you can’t draw

Configuration space for a 6-joint arm has 6 dimensions, and the forbidden regions have no tidy description. They’re whatever shape the obstacles happen to project into it. You can’t draw that, and you certainly can’t search it exhaustively.

start forbidden a sample up here rejected a sample here kept: the nearest node, stepped 1. sample draw a configuration uniformly; 5% of the time, use the goal 2. nearest node under the wrapped distance. This line is the whole algorithm 3. steer move a fixed 0.25 rad from that node towards the sample 4. check and keep ask the checker about the short move; keep it or throw it away Frontier nodes are nearest to most of the space, so most samples extend them. Nobody wrote “explore”.
Growing a tree towards the goal.

Wider than the screen; scroll it sideways.

So the working algorithms give up on completeness and sample instead: pick random configurations, keep the ones that are collision-free, connect them into a tree that grows towards the goal. Run it twice and you get two different valid paths.

The gap, and what to do about it

A policy trained purely in simulation usually fails on hardware, because the simulator is wrong in ways nobody enumerated: friction, delay, mass, lighting.

appearance colours, lighting, camera pose changes: the pixels 51 of 255 per pixel, on average expert success unchanged 0.000 deg spread in the joint trace object pose where the cube starts changes: the actions a different reach every episode expert success falls past 8 cm 2.730 deg spread in the joint trace dynamics mass, friction, servo gains changes: the physics 40x mass, 14x friction, 20x gain expert success unchanged 0.083 deg spread in the joint trace all three score the same success rate, so the label tells you nothing about which one you turned on the spread of the recorded trajectory does: it is the part a policy actually learns from measured over 8 episodes each, mean per-joint standard deviation across the whole rollout
Randomising the axes you're unsure about.

Wider than the screen; scroll it sideways.

Why does randomising a simulator’s parameters help more than measuring them precisely?

Because you can’t enumerate everything that’s wrong. Measuring friction exactly still leaves delay, flex, wear and lighting unmodelled. A policy trained across a distribution of worlds learns to depend on features that survive the variation, and that’s what transfers. A policy tuned to one very accurate simulator can depend on details that are true only there.

Learning a skill from demonstrations

Writing the rule works when you can state the rule. For “pick up that crumpled cloth”, nobody can. So you demonstrate instead.

A policy is a function

Behaviour cloning is the simplest version: record a human doing the task, then train a network to reproduce the human’s action given the same observation. Supervised learning, with robot data.

Demonstrations each row is one episode, in time order shuffle A bag of rows (observation, action) · order discarded MLP 6 → 256 → 256 → 6 69,126 weights MSE loss gradients nothing downstream of the shuffle knows the robot was ever moving
The behaviour-cloning pipeline.

Wider than the screen; scroll it sideways.

Why the clone falls apart

It works in training and fails on the robot, for a reason worth understanding precisely.

Supervised learning Held-out set fixed before you start Model Error no arrow comes back. being wrong changes nothing about the data. A policy in the loop Observation the next test case Policy Action the arm actually moves a small error here writes the input over there · the policy chooses its own test set
Small errors carrying the robot off the demonstrated distribution.

Wider than the screen; scroll it sideways.

This is called covariate shift, and the fixes are all versions of showing the policy how to recover: demonstrate corrections, add data where it actually goes wrong, or let it act and have an expert label the situations it reaches.

Two right answers, averaged into a wrong one

A second failure, and a subtler one. Ask 10 people to pick up a mug and some go left of the obstacle, some right. Train on all of them and the network learns the average: straight into the obstacle.

image/svg+xml Matplotlib v3.11.1, https://matplotlib.org/ −0.5 0.0 0.5 0.2 0.3 0.4 forward part what people demonstrated −0.5 0.0 0.5 sideways part of the action every sample here what regression predicts −0.5 0.0 0.5 what diffusion samples
Actions as a cloud rather than a point.

Deciding less often

A policy that outputs one action per observation has to be right 30 or 50 times a second, and each decision is an independent chance to wobble.

one episode: 239 frames at 30 fps, about 8 seconds frame 0 frame 238 episode ends observation at t next 20 actions mask = 1 everywhere padded with the last action mask = 0, excluded from the loss divide the loss by the number of real steps, not by the padded length
Predicting a chunk instead of a step.

Wider than the screen; scroll it sideways.

Two things improve at once. The motion smooths out, because a chunk is internally consistent in a way that independent per-step predictions aren’t. And the compounding problem above weakens, because there are simply fewer decision points at which to go wrong.

Saying a policy works

Why can a policy score well in training and fail immediately on the robot?

Because training measures its predictions against demonstrated situations, while the robot puts it in situations its own errors created. Nothing in the training score reflects what happens once small mistakes compound and carry it off the distribution it learned. Evaluation has to be on the robot, acting, not on a held-out slice of the demonstrations.

Real hardware, and the data it gives you

Everything above can be done in simulation. This is where it stops being free.

half duplex: one conductor, one talker at a time Board USB to the host 1 shoulder_pan 2 shoulder_lift 3 elbow_flex 4 wrist_flex 5 wrist_roll 6 gripper 1,000,000 baud - protocol 0 - 4096 encoder counts per turn reports 0-100
The servo bus: one chain, one protocol.

Wider than the screen; scroll it sideways.

An arm is a chain of servos on a shared bus, each with an identity, each needing calibration so that “90 degrees” means the same thing on two different arms. None of this is intellectually deep and all of it will consume an afternoon.

The demonstration is the label

On real hardware, data quality stops being an abstraction. Your demonstrations are your training labels, so a hesitant, inconsistent or rehearsed demonstration teaches exactly that.

Stop isn’t the same as hold

inside one motor EEPROM survives power-off ID, Baud_Rate Min / Max_Position_Limit Homing_Offset, Operating_Mode Max_Torque_Limit, Protection_Current Max_Temperature_Limit, Overload_Torque P, I and D_Coefficient written at setup and calibration SRAM gone at power-off Torque_Enable Goal_Position Present_Position Present_Load, Present_Current Present_Temperature written and read every control cycle
What the servo remembers, and what it forgets.

Wider than the screen; scroll it sideways.

A safety detail that catches everyone once. Cutting torque to a motor doesn’t freeze the arm; it relaxes it, and gravity takes over. “Stop” and “hold position” are different commands with opposite effects on a loaded arm, and discovering that with a payload in the gripper is a memorable way to learn it.

The same class of surprise runs through the hardware module: settings that survive a power cycle versus settings that don’t, limits enforced in the servo versus limits enforced in your code. None of it is conceptually hard and all of it is the difference between a working bench and a broken one.

The loop that matters

The useful skill isn’t collecting data once. It’s knowing where the next 20 episodes should go: watch what the policy fails at, demonstrate that, retrain, measure. That loop is the job.

Why might 20 demonstrations outperform 200?

Because a policy learns whatever is consistent in the data, including artefacts. Train on 200 near-identical episodes and you teach one narrow trajectory and nothing about recovery. Train on 20 deliberately varied ones, with different starting positions, different approaches, and corrections included, and you cover more of the situations the policy will actually meet.

Foundation models: one model for many tasks

The current frontier, and the part of the subject with the widest gap between what’s demonstrated and what’s announced.

What pretraining buys

π0.5 Physical Intelligence · weights out frames · instruction · joint state VLM backbone PaliGemma-class supervised on FAST action tokens one shared attention stack gradients cut (knowledge insulation) Action expert a second set of transformer weights flow matching, continuous actions 50-step chunk up to 50 Hz Joint controllers the robot's own, not the model GR00T N1.7 NVIDIA · weights out, own licence one camera view · instruction · state Cosmos-Reason2-2B a VLM of the Qwen3-VL lineage 3B total including the head a hidden state handed down two separate modules Diffusion transformer 16 layers, flow matching emits motor commands 4 integration steps at inference 35.9 Hz on an H100 Joint controllers the robot's own, not the model Helix 02 Figure · no weights, no paper head and palm cams · tactile · state System 2 scene understanding, language roughly 1 Hz a latent goal vector no published details System 1 visuomotor transformer full-body motor commands no parameter count published 200 Hz System 0 10M params · 1 kHz · learned in sim
Three architectures side by side.

Wider than the screen; scroll it sideways.

The bet is that a model pretrained on enormous quantities of general data already understands most of what a mug is, so teaching it your task requires far less robot data than starting from nothing.

Four ideas, not one scaling curve

It’s tempting to read the last few years as one graph going up. It is not. The current designs are four separable ideas that arrived at different times and can be adopted independently.

Dec 2022 Jul 2023 Oct 2023 Jun 2024 RT-1 one network, many tasks, actions as discrete tokens RT-2 actions in the model's own vocabulary, co-trained with the web Open X-Embodiment 22 robot bodies pooled into one standardized dataset OpenVLA weights, code, recipe and a fine-tuning path, published each step adds exactly one thing, and each is removable: name what breaks and you have the lesson everything after mid-2024 refines the action head and the training recipe, not this spine
The lineage, one rung at a time.

Wider than the screen; scroll it sideways.

Roughly: treat actions as another language the model can emit; borrow a vision-language model’s understanding rather than learning the world from robot data alone; pool data across many different robots so one model sees more situations than any single lab could collect; and generate a chunk of actions rather than one, which is the same idea from the previous part arriving in a larger model.

The clock problem

the layer what it decides what sets its deadline Semantic layer about 1 Hz which object, which step, what the instruction is actually asking for nothing physical. a person will wait a second for an answer. Policy layer 10 to 50 Hz where the hand goes next, emitted as a chunk of future actions the scene goes stale. objects move, contact changes. Servo layer 200 to 1000 Hz how much current goes into each motor, right now contact and balance. feedback has to outrun the physics. faster, and simpler
Different parts of the system living on different clocks.

Wider than the screen; scroll it sideways.

A large model can’t run in a fast control loop; it’s too slow. So real systems split by timescale: something big and slow decides what to do, something small and fast keeps the machine steady in between. That split recurs at every level of the stack, and where you put the seam is a genuine design decision.

Where the model actually runs

one axis: how often each block has to produce an answer π0.5 backbone and expert together the arm's own servo loop GR00T N1.7 backbone and diffusion head the arm's own servo loop Helix 02 System 2 System 1 System 0 1 Hz 10 Hz 50 Hz 200 Hz 1 kHz rate, logarithmic
The ladder of clocks, from cloud to joint.

Wider than the screen; scroll it sideways.

The headline models are large, and a robot has a power budget and a latency budget. So a practical question sits under every announcement: does this run on the robot, on a machine beside it, or in a datacentre, and what happens to the arm when the network hiccups?

Reading the field honestly

Why doesn’t a large model simply replace the control layer beneath it?

Timing. A model taking 100 milliseconds or more per decision can’t sit inside a loop that has to close in 10. It can decide what to do and even emit a short sequence of actions, but something fast has to keep the machine stable between its decisions. That’s an architectural constraint, not a temporary engineering limitation.

Planning over learned skills

If one model can’t do everything, the alternative is composition: a deliberate planner directing fast reactive policies.

Agent perceive · plan · call read result · recover may not read the desk directly tools/call content · isError Skill server look · pick · place · home blocking · isError on failure commands outcomes Desk the ground truth five objects, one gripper state Evaluator goal_check reads the desk and never the transcript
A planner over learned skills.

Wider than the screen; scroll it sideways.

Grounding: connecting a word to a thing

A planner says “pick up the red mug”. Something has to decide which pixels are the red mug, and whether there’s exactly one.

the mug a word in a request a detection open-vocabulary a pixel y first, 0-1000 a 3D point depth or a plane guess a pose in base hand-eye transform wrong object, or none axis order transposed depth noise, plane error calibration error no error is raised anywhere along this chain
From a word to a thing in the world.

Wider than the screen; scroll it sideways.

The interesting engineering is the seam

Three things a plan does when it dies: the skill fails outright, the skill reports success while having achieved nothing, or the world changes underneath a plan that’s still executing. Those need three different responses, and conflating them is how a robot ends up confidently repeating an action that can’t work.

Three clocks that must never wait on each other

A tool that returns immediately model arm plan poll poll poll poll plan next skill k is still moving issued mid-motion six model round trips to run one skill A blocking tool model arm plan the call has not returned yet plan next skill k moving idle skill k+1 two round trips, and the arm is idle only while the next step is chosen
What happens when one clock blocks another.

Wider than the screen; scroll it sideways.

The planner thinks in seconds, the policy acts in tens of milliseconds, and the safety layer has to react in single milliseconds. Those are three different clocks, and the architecture’s real job is keeping them decoupled.

Why does a skill need to report honestly rather than optimistically?

Because the planner’s next decision assumes the previous step’s postcondition holds. A skill that reports success without achieving it doesn’t cause one failure; it causes every subsequent step to be planned against a world that doesn’t exist. An honest failure is recoverable, a dishonest success is not.

Where the field is going

1 · What problem is it? three fields, three literatures, three winning methods Manipulation act on the world through contact Modules 1-6 · the spine Locomotion move your own body over terrain Module 3 · Module 7 track B Navigation map, localize, plan a path awareness only · Module 7 2 · Where does it run? sim is free and lies; hardware is honest and slow Simulation free, parallel, resettable, perfectly measured Module 2 Real hardware honest, slow, breakable, needs a human Module 4 sim-to-real gap randomise sim to close it 3 · Where does the behaviour come from? the axis is what you supply Written by hand you supply the algorithm Modules 1-2 Imitation learning you supply the demos Modules 3-4 Reinforcement learning you supply reward + sim Module 3 Foundation models (VLAs) someone else supplied it Module 5 · you fine-tune 4 · How is it split in time? a good decision takes longer than the deadline allows The slow layer 0.1-2 Hz · scene, plan, verify, recover Module 6 The fast layer 10-1000 Hz · balance, servo loops, policy Modules 1, 3-5 goals, skill calls state, result
The map of the field.

Wider than the screen; scroll it sideways.

Robotics isn’t one job. Manipulation, locomotion, perception and fleet infrastructure pull apart into different daily work, different literature and different hardware, and the honest advice is to pick on evidence about what you actually enjoy, not on which has the best demo reel this quarter.

Two things are worth carrying away whichever direction you go. The layered architecture isn’t going away: something slow deciding, something fast stabilising, whatever the models look like. And evidence discipline is the scarce skill: the ability to say precisely what was measured, over how many trials, under what conditions, and what it doesn’t show.

That last one is rarer than it should be, and it travels.

The full course builds every idea above in code you run yourself.

Read the full course
An overview of Robotics, from scratch.