Introduction to Robot Learning · Lecture 16 of 25 · CMU 16-831

Learning Structured World Models

How do you write the physics of a blob of dough or a pile of coffee beans? You don't. You represent the world as particles plus relations and let a graph network learn how neighbors push each other — the right structure as a powerful inductive bias.

Prerequisites: basic vectors + a little Python. The idea of a learned dynamics model (Lecture 15) helps but isn't required.
11
Chapters
3
Simulations
3
Code Labs

Chapter 0: How Do You Model a Blob of Dough?

Guest lecturer Yunzhu Li opens with a humbling question: how far are we from human-level robot manipulation? A person can roll dough into a snake, cut it, press it into a circle, and never once thinks about it. The robot cannot. And the reason cuts to the heart of this lecture.

When a robot picks up a rigid mug, an engineer can write the physics by hand: a mug is one rigid body with a position and an orientation, six numbers, and Newton's laws move it. That is the world of Lectures 12–14 — analytical, physics-based models, and they are excellent when the object obeys clean equations.

Now hand the robot a fistful of dough. There is no "the position of the dough." It squishes, folds, sticks, tears. A pile of coffee beans is worse: a thousand little grains that flow like a liquid one moment and jam like a solid the next. No tidy rigid-body equation describes either. The classical toolbox simply has nothing to write down.

The core problem. To plan an action — "press here and the dough flattens there" — the robot needs an intuitive model of the world: something that, given the current scene and a candidate action, predicts the next scene. For dough, fluids, and granular piles we cannot hand-write that model. So we must learn it. The whole lecture is about what shape that learned model should take.

Here is the key bet, the thesis of the entire lecture. Instead of treating the dough as one inscrutable blob, represent it as thousands of tiny particles, and learn a single rule for how one particle pushes its neighbors. Apply that same local rule everywhere, every step, and the global behavior — flowing, folding, flattening — emerges. The right structure (a graph of particles) is a powerful inductive bias: a built-in assumption that makes learning generalizable and sample-efficient.

Poke the blob — local pushes, global shape

This is a pile of particles. Nobody wrote "dough equations" — each particle only knows to gently push the neighbors touching it. Press Poke to shove a region; watch a global ripple emerge from purely local rules. Slide stiffness to make it floppy (dough) or springy (granular).

Neighbor stiffness 0.12
Ready.

That is the entire philosophy in one picture. The robot never models "dough" as a thing. It models a particle and its neighbors — the simplest possible interaction — and trusts that complex behavior is just that interaction, repeated. By the end of this lesson you will be able to build the message-passing step that learns it.

Where this sits. This is a flavor of model-based robot learning (Lecture 15): learn a world model, then plan with it. What's new is the representation. Lecture 15's world model often compresses the scene into one global latent vector; here we keep the scene as an explicit, structured graph of particles. That choice — structured vs. unstructured — is the question this whole lecture asks.

Why can't a robot use a classical analytical model (like the one it uses for a rigid mug) to manipulate dough or a pile of beans?

Chapter 1: Three Kinds of World Model

Before committing to particles, Li lays out the menu. To plan, a robot runs a loop: observe the world, imagine the effect of an action with its model, pick the best action, act, observe again. Everything hinges on that model. There are three families, and each makes a different trade.

Option A — Analytical physics model

Write the equations by hand. Pros: excellent generalization — physics is physics, so it works far beyond any dataset. Cons: it requires the full state (every particle's exact position) and it only covers systems you can actually write down. Dough? Beans? You're stuck. There's also a hidden tax: state and parameter estimation — you must measure all those positions and physical constants from messy sensors.

Option B — Unstructured learned model (one latent vector)

Encode the camera image into a single latent vector z, roll it forward with a learned function, decode back to a prediction. This is the world model of MuZero and friends. Pros: learns from partial observations, handles unknown systems. Cons: the latent is unstructured — it's an opaque bag of numbers with no built-in notion of objects, parts, or where things are — and so its generalization is limited. Train it on five beans and ask about fifty: the vector has no idea what "more beans" even means.

Option C — Structured learned model (particles + graph)

Keep the scene as an explicit set of particles wired into a graph, and learn the local interaction. Pros: learns from partial observation, handles unknown systems, and — because it bakes in the structure of "stuff made of interacting parts" — it generalizes excellently and is sample-efficient. This is the lecture's choice.

ModelLearns from pixels?Handles unknown systems?Structured?Generalization
Analytical physics× (needs full state)×Excellent (where it applies)
Latent-vector learned×Limited
Particle + graph (this lecture)Excellent
The thesis, stated once. The right representation/structure buys you two things at once: generalization (work on scenes bigger or different from training) and sample efficiency (learn from minutes, not months, of data). The particle graph is the structure that delivers both — it is an inductive bias, an assumption about the world ("it's made of interacting parts") that the architecture enforces for free.

Notice the recurring formal skeleton Li keeps redrawing. A perception step turns observations into a state: state from observations and past actions. A dynamics step predicts the next state from the current state and action. A control step picks an action from the state. Three boxes. This lesson lives almost entirely in the dynamics box — learning the function that says "given the scene and the push, here's the next scene."

Perception
camera/depth observations → the particle state (the (N, D) table). The "what state am I in?" box.
↓ feed state + candidate action into…
Dynamics — THIS LESSON
state + action → predicted next state. A learned GNN. The "what happens if I do this?" box.
↓ search actions whose predicted future is best
Control
state → action. MPC over the learned dynamics. The "what should I do?" box.
↻ act, observe, repeat — closed loop

Why is the dynamics box the hard one? Perception you can borrow from vision; control you can borrow from the rest of the course (MPC, CEM, MPPI). But the dynamics of dough and beans is the part with no off-the-shelf answer — and getting its representation right is what unlocks the other two. A good structured dynamics model gives control something accurate to plan through, and tells perception what to even estimate.

An "unstructured" latent-vector world model encodes the whole scene into one vector z. Why does its generalization suffer when you go from 5 objects to 50?

Chapter 2: Particles — the Finest, Most Flexible Unit

So we choose particles. Why particles, and not, say, a mesh or a voxel grid? Because particles are the finest level of abstraction and the most general and flexible one. A liquid splashing, a pile collapsing, dough folding over itself — all three are just clouds of points moving. The same representation covers all of them. (This idea comes straight from particle-based graphics simulators; Li credits Macklin and colleagues.)

Concretely, the scene becomes a set of N particles. Each particle i carries a small feature vector — the data the model actually consumes:

position
where the particle is, e.g. (x, y, z) — 3 numbers.
+
velocity
how it's moving right now, e.g. (vx, vy, vz) — 3 numbers.
+
attributes
what it is: a flag for "rigid / fluid / dough particle", or "this is the rigid tool", etc.

Stack those for all N particles and you get the node feature matrix — a table of N rows by D columns. If position and velocity are 3 numbers each and there are a few attribute flags, D might be 8 or 10. That table is the state. There is no hidden "dough object"; the dough is literally these rows.

Concept → data. "Represent the scene as particles" cashes out as: a matrix of shape (N, D). Rows = particles. Columns = position, velocity, and material attributes. The tool the robot holds is just more particles, flagged as rigid and driven by the robot's commanded motion. The model never sees an image of "dough"; it sees this numeric table.

Why does going this fine-grained matter? Because at the particle level, the rules of physics are local and universal. Two touching fluid particles repel a bit and get dragged along together; two touching dough particles do almost the same thing with more stickiness. The complexity of "dough behavior" is not in any single particle — it's in the collective. Get the local rule right and the collective takes care of itself.

Where do the particles come from?

One honest question: the robot sees camera pixels, not particles. How does a depth camera image become this clean table of positions? That's the perception step — the box upstream of dynamics. In the original work, particles are sampled from a 3D reconstruction of the scene (point clouds from a depth camera, or a learned 3D representation). Each visible surface gets seeded with particles; the material flag comes from knowing what object you're manipulating. It's not free, and Chapter 10 points to the modern tools (Segment Anything, descriptor fields) that make it more robust. But for this lesson, assume perception hands us the particle table; our job is the dynamics that move it forward.

The other thing the table must include is the tool. The robot's gripper, roller, or knife is also represented as particles, flagged as rigid and driven directly by the robot's commanded motion. That's how an action enters the model: the action moves the tool particles, the tool particles push the dough particles through the same message-passing rule, and the dough deforms. The next chapter wires all of them together so that local rule has something to act through.

In the particle representation, what does the "state of the scene" literally consist of?

Chapter 3: The Graph — Nodes and Relations

A pile of unconnected particles can't interact — we need to say who pushes whom. The answer is a graph. The graph has two pieces, and Li writes the state as exactly this pair: the set of nodes V and the set of edges E.

Why a radius? Because physical contact is local. A grain of rice doesn't push a grain on the other side of the bowl — it only nudges the grains it's touching. So we connect each particle only to its near neighbors. This keeps the graph sparse (each node has a handful of edges, not N of them) and encodes a true physical fact: forces propagate through contact, neighbor to neighbor.

The radius is a modeling choice with teeth. Too small a radius and particles that are actually touching never get connected — the dough "tears" in the model when it shouldn't. Too large and everything connects to everything, the graph blows up, and you've thrown away the locality that made this efficient. Picking r is part of representing the material correctly.

One more subtlety: for a liquid, particles are constantly rearranging, so who is whose neighbor changes every frame. That means the graph isn't fixed — you rebuild the edges from the current positions at each step. Li calls this dynamic graph building, and it's exactly what fluids and granular piles need. For a rigid object, neighbors stay put, so the edges can stay fixed. The structure adapts to the material.

Build the neighbor graph — drag the radius

Each dot is a particle. We draw an edge between any two within the interaction radius (the faint circle around the highlighted particle). Slide r: too small and neighbors disconnect; too large and the graph saturates. The count of edges is shown live.

Interaction radius r 0.18
Drag r to grow or shrink the neighborhoods.

Now we have the full state object Li writes: a graph (V, E). Nodes are particles, edges are within-radius relations. The next chapter is the engine that turns this graph one step into the future.

Why do we connect each particle only to other particles within a small interaction radius, instead of connecting every particle to every other one?

Chapter 4: Message Passing — the Dynamics Step

Here is the engine. The Graph Neural Network (GNN) takes the current graph and predicts every particle's next state in three moves. Li writes the two learned functions explicitly: an edge function and a node function. Walk through it with the data flow in hand.

Step 1 — messages along edges

For every edge connecting a sender particle to a receiver particle, compute a message. The message is a small learned function (a multilayer perceptron, an MLP) of the two particles' features:

messagek = fedge(at, bt), for each edge (a, b) in E

Here a is the sender's feature vector and b the receiver's. The message is a vector — think of it as "how hard, and in what direction, does a want to nudge b." Its dimension is whatever the MLP outputs, say 64 numbers.

Step 2 — aggregate at each node

Each receiver particle collects all the messages arriving on its incoming edges and sums them. The sum is the particle's total "felt push" from its neighborhood:

felti = ∑k ∈ N(i) messagek

Why sum, and not average or concatenate? Because a sum is permutation-invariant — it doesn't care what order the neighbors arrive in, and it works for any number of neighbors. Three neighbors or thirty, the aggregation is the same operation. Hold that thought; it's the secret to the whole generalization story in Chapter 5.

Step 3 — update each node

Finally, a second learned MLP takes the particle's own features plus its aggregated message and predicts its next state:

t+1, i = fnode(at,i, felti)

Do this for every node and you've produced the entire next graph. Repeat the three steps to roll the simulation forward in time.

Nodes (N×D)
each particle's position, velocity, attributes.
↓ for each edge: fedge(sender, receiver)
Messages (E×M)
one vector per edge: the nudge a sender sends a receiver.
↓ sum messages arriving at each node
Felt push (N×M)
total influence on each particle from its neighbors.
↓ for each node: fnode(own features, felt push)
Next state (N×D)
predicted positions/velocities one step ahead.
↻ rebuild edges, repeat
What is actually learned? Just the two MLPs: fedge and fnode. That's it. They are shared across every edge and every node — the same tiny network runs at particle 1 and at particle 9,000. Training minimizes the squared error between the predicted next positions and the true next positions, summed over time: a simple supervised regression, but on a structured prediction.

A concrete walk-through of the shapes

Let's make the data flow fully concrete. Say the scene has N = 500 particles, each with a D = 8-dimensional feature (3 position, 3 velocity, 2 material flags). The radius graph produces, say, E = 3,000 directed edges. Walk the tensors:

Notice the only place the number 3,000 appears is the message stage; it vanishes at aggregation. And nowhere does 500 appear inside the MLPs — they operate row by row. That's the whole trick, visible in the shapes.

Misconception to avoid. The GNN does not have "one neuron per particle" or a fixed-size input that you reshape the scene into. The MLPs take a single particle's (or single edge's) features and are applied independently to every row. That's exactly why the same trained weights work for 500 particles or 50,000 — the network never "sees" N as a dimension it must match.

Let's build the heart of it — the build-the-graph-and-aggregate step. You'll construct the neighbor edges from positions and sum each node's incoming messages. This is exactly Steps 1–2 above, the part where structure does its work.

In one message-passing step, the aggregation at a node is a sum of its neighbors' messages. Why a sum specifically?

Chapter 5: Why Structure Generalizes

This is the payoff chapter — the reason the lecture bets on graphs. The claim is bold: a model trained on small scenes works on much larger ones it has never seen. In the paper, a fluid model trained on a few hundred particles predicts a splash with twice as many particles, accurately. Nothing about the architecture changed. Why does that work?

Two architectural facts do all the heavy lifting, and both come from Chapter 4.

Fact 1 — the same MLPs run everywhere

The edge MLP and node MLP are shared. There is no "particle 7's parameters." Every edge uses the identical fedge; every node uses the identical fnode. So the model learns a local interaction rule, not a specific scene. Add a thousand more particles and the rule still applies — there's simply more places to apply it. The number of learned parameters does not depend on N at all.

Fact 2 — the sum scales to any neighborhood

Because aggregation is a sum over whatever edges exist, a node with more neighbors is handled by the exact same code path as a node with fewer. The model is permutation-equivariant: relabel or reorder the particles and the predictions just come back relabeled the same way — the physics doesn't care which particle you called "number 1."

The inductive bias, paid off. By building "made of identical interacting parts" into the architecture, you get generalization for free — not from more data, but from the shape of the model. A latent-vector model has to learn that more objects behave consistently; the graph model assumes it and can't violate it. That assumption is the inductive bias, and when it matches reality (it does, for stuff made of particles) it is enormously powerful.

Why a single global vector loses this

Contrast this directly with Lecture 15's latent-vector world model. There, the entire scene — however many objects — is squeezed into one fixed-length vector z, say 256 numbers. Three things break.

The latent model isn't wrong — it's the right tool when you can't get particles (raw pixels, abstract games). But when the world really is a pile of interacting stuff, throwing away that structure throws away the very thing that makes the problem learnable from little data.

The same two facts buy sample efficiency. Because the model only has to learn one small local rule — not a giant lookup over whole scenes — it needs far less data. In RoboCook, each tool's dynamics is learned from just about 20 minutes of offline interaction. That's the difference between a robot you can deploy and one you can't.

Let's prove permutation-equivariance to ourselves. We'll run the message-passing update on a small particle set, then shuffle the particle order and run it again. If the architecture is doing its job, the second result is just the first one shuffled the same way — bit for bit.

A graph dynamics model trained on 200 fluid particles predicts a 400-particle splash with no retraining. What architectural facts make this possible?

Chapter 6: One Engine, Different Materials

The same message-passing engine has to handle a rigid box, a sloshing fluid, and a lump of plasticine. They behave nothing alike. Li's insight is that the engine stays the same — only the graph structure and a few modeling choices change per material. This is the DPI-Net paper (Learning Particle Dynamics, ICLR 2019).

MaterialGraph structureMotion character
Rigid objectsHierarchical modeling; particles share a fixed bodyGlobal motion (the whole body moves together)
Deformable (plasticine, dough)Hierarchical modelingLocal motion (parts move relative to each other)
Fluids / granularDynamic graph building (rebuild edges each frame)Local motion, constantly rearranging

Two ideas earn a closer look.

Hierarchical modeling

For a rigid body, every particle moves identically — but message passing only spreads information one neighbor-hop per step. To tell a particle on the left edge that the right edge just moved, the signal would need many steps to crawl across. The fix: add a hierarchy. Group particles, route messages up to a coarse "summary" node and back down. Now global information (the body's overall motion) propagates in a couple of hops instead of dozens. It's the difference between whispering down a line and using a loudspeaker.

Dynamic vs. fixed graphs

For a rigid object the neighbor relationships never change, so build the edges once. For a fluid they change every instant, so rebuild them every step from the current positions (Chapter 3's dynamic graph building). Same engine, different graph-construction policy — chosen to match how the material actually moves.

Two kinds of edge, one engine

There's a subtlety in how the tool meets the material. The graph actually carries different relation types: particle-to-particle edges within the dough (how the material holds together) and tool-to-particle edges (how the rigid tool pushes the material). Each relation type can have its own learned edge function, but the aggregation and node update stay shared. So the same message-passing machinery models "dough sticking to itself" and "press shoving dough down" without any special-case code — just a flag on the edge telling fedge which interaction it is.

This is the deep reason one architecture spans rigid, fluid, and deformable: the differences between materials live in the graph (which edges exist, how often they're rebuilt, whether there's a hierarchy) and in cheap per-edge type flags — not in the engine. The engine is always: message, sum, update.

The result. With these per-material choices, one architecture rolls out fluids falling and merging, a plasticine block deforming under a press, and a box of fluid sloshing as you shake it — each prediction tracking the ground-truth simulator closely, frame after frame. And crucially, it extrapolates: train on a small fluid, predict a fluid with twice the particles.

Let's feel how a learned local rule rolls forward in time. We'll run a short particle simulation where each step applies a simple neighbor-interaction (repel if too close, attract if a bit far — a stand-in for the learned fedge) and check the collective settles into a stable, spread-out structure rather than collapsing or exploding.

Why does a rigid object benefit from hierarchical modeling in a particle GNN?

Chapter 7: Planning — the Model Becomes a Controller

A dynamics model alone is just a predictor. The point is control: use the learned simulator to choose actions. The trick is closed-loop, and it's the same model-predictive control (MPC) idea from the rest of the course — now powered by a learned GNN instead of hand-written physics.

1. Imagine
Try many candidate action sequences; roll each one forward through the GNN to predict the resulting particle scene.
↓ score each predicted outcome against the goal shape
2. Pick
Choose the action sequence whose predicted final scene best matches the target.
↓ execute only the FIRST action
3. Act & re-sense
Apply one action on the real robot, observe the true new scene.
↻ re-optimize from the new state — closed loop

Two details make this work. First, the learned model is naturally differentiable — it's a neural network — so you can optimize the action by gradient descent through the predicted rollout, not just random search. Second, because the model is never perfect, you execute only the first action, then re-sense and re-plan. Errors don't compound because you keep correcting.

How the action search runs

There are two broad ways to find the best action, and the lecture uses both. Sampling-based MPC draws many random action sequences, rolls each through the model, and weights them by how good their predicted outcome is — this is the family of the Cross-Entropy Method (CEM) and Model-Predictive Path Integral (MPPI), and a more recent variance-optimal variant, CoVO-MPC. Gradient-based MPC instead differentiates through the learned rollout to directly descend on a better action. The crucial enabler for both is the GPU: it runs thousands of imagined rollouts (or gradient steps) in parallel, fast enough to re-plan in the control loop. The learned simulator is just a batched forward pass, so this parallelism is natural.

If you plan…Open-loop (commit to the whole plan)Closed-loop MPC (replan each step)
Model is perfectWorks fineWorks fine (overkill)
Model is slightly offDrifts: small errors accumulate over the rolloutStays on target: each step re-grounds in the true state
World gets disturbedFails — never sees the disturbanceAbsorbs it — re-senses and corrects

RoboCook: planning at two levels

The flagship demo, RoboCook (CoRL 2023, Best Systems Paper), manipulates real dough with a toolkit of fifteen 3D-printed tools — grippers, rollers, presses, a knife, a circle cutter. Two nested decisions:

Two messages from RoboCook. (1) Adding policy learning on top of the model dramatically improves efficiency — you don't re-plan from scratch every time. (2) Remarkably, a learned model can be more accurate than a physics-based one, even one with extensive system identification, because real dough never quite obeys the textbook. With this, the robot shapes dough into letters — spelling out words — and generalizes across materials from real dough to Play-Doh to air-dry clay.

How the motion-level GNN is trained

It's worth seeing exactly how the low-level model learns, because it's the same regression from Chapter 4 with one twist. Take the current dough state and a particular tool. Sample a random action for that tool. Run the GNN forward to predict the next dough state. On the real robot, actually apply the action and observe the true next state. The loss is the difference between predicted and true particle positions, and you backpropagate it into fedge and fnode. The twist: the model is tool-conditioned — the tool's identity and geometry are part of the input, so one model handles many tools, and a roller pushes differently than a press because their particles differ. Just 20 minutes of this random poking per tool is enough.

Why "the model is differentiable" is a big deal. A classical simulator gives you a number out (the predicted scene) but no gradient telling you how to change the action to improve it. A learned neural model gives you both — you can ask "which way should I nudge this push to make the dough rounder?" and get an answer by gradient descent through the rollout. That turns planning from blind search into directed optimization, and it's only possible because the world model is a differentiable network.

In MPC with a learned model, the planner imagines many action sequences and picks the best — but only the first action is executed before re-planning. Why not just execute the whole optimized sequence?

Chapter 8: How Many Particles? Dynamic Resolution

There's a quiet question we've dodged: how many particles should represent the scene? Li argues the most effective representation is not fixed — it must be dynamic. The testbed is object-pile manipulation: push a pile of granola, rice, carrots, or candy into a target shape.

Represent the pile with too few particles and the model is ineffective — it's too coarse to capture the shape you need. Too many and it's inefficient — planning over thousands of particles is needlessly slow. A good resolution is both minimum (for efficiency) and sufficient (for the task).

The right resolution is task-dependent. The same pile needs more particles for a complicated target shape than a simple one. And the same target needs different resolutions from different starting states. There's no single magic number — it depends on the state and the goal.

The fix (Dynamic-Resolution Model Learning, RSS 2023): pick the abstraction level that maximizes task reward, found via Bayesian optimization — a sample-efficient search that tries a few candidate resolutions, sees which plans best, and homes in on the sweet spot. A resolution regressor reads the current scene and the goal and proposes how fine to go; then the usual GNN forward-prediction and trajectory optimization run at that resolution. In the real world this pushes piles of granola, rice, carrots, and candy into letter shapes.

Take-home messages of the whole lecture.
  • Structure: particles + GNNs, for objects that are compositional and/or high-degree-of-freedom.
  • Generalization: systems larger than training; unseen target shapes.
  • Sample efficiency: ~20 minutes of offline interaction per tool; dynamic resolution for the best efficiency/effectiveness trade.
Why does the dynamic-resolution method refuse to fix a single particle count for object-pile manipulation?

Chapter 9: Showcase — A Live Message-Passing Step

Time to see the whole engine breathe. Below is a small particle scene wired into a contact graph. Press Run one step and watch the three moves of message passing animate, particle by particle: edges light up as messages flow, each node glows as it aggregates its felt push, then every particle nudges toward where the rule sends it. Hold the controls and break it.

Message passing, one step at a time

Each dot is a particle; lines are contact edges. A step computes a message on every edge, sums them at each node (the node briefly glows by how much it felt), and moves each particle by its update. Crank the radius up and the graph saturates; crank coupling up and it gets jittery.

Interaction radius r 0.22
Coupling strength 0.10
Ready — press Run one step.

The most instructive thing to notice: nothing in this loop knows the scene's size or shape. The exact same per-edge and per-node operations run whether there are twelve particles or twelve thousand. That invariance — visible right here in the animation — is the generalization story of Chapter 5, made concrete.

Chapter 10: Connections & Cheat Sheet

You now own the structured-world-model recipe end to end: represent the scene as particles, wire them into a contact graph, learn a local interaction rule with a GNN, roll it forward to simulate, and plan actions through it with MPC — choosing tools and motions to reshape dough, fluids, and piles.

Cheat sheet — the vocabulary you now own.
  • Structured world model = represent the scene explicitly as particles + relations, not as one opaque latent vector.
  • Particle = a node carrying position, velocity, and material attributes; the scene state is an (N, D) table.
  • Graph = nodes (particles) + edges (within an interaction radius r); dynamic graph for fluids, fixed for rigids.
  • Message passing = message = fedge(sender, receiver) on each edge → sum at each node → next state = fnode(own features, summed push).
  • What's learned = just the two MLPs fedge, fnode, shared across all particles → permutation-equivariant, scales to any N.
  • Why structured = inductive bias of "stuff = interacting parts" buys generalization (bigger/unseen scenes) and sample efficiency (~20 min/tool).
  • Planning = MPC: imagine rollouts through the differentiable model, pick the best, execute one action, re-sense (RoboCook tool + motion selection).
  • Dynamic resolution = pick the particle count per situation (Bayesian optimization) — minimum yet sufficient.

Limits, and where the field is going

Be honest about what's hard. The structured model assumes you can get particles — a clean 3D representation of the scene — which leans on perception that can be brittle in clutter or occlusion. Long horizons still accumulate prediction error. And building the right graph (radius, hierarchy, edge types) is hand-engineering, not learned. Li's "future directions" slides target exactly these gaps:

BoxOpen problemDirection Li points to
PerceptionMore generalizable particle/keypoint extraction from pixelsVisual foundation models (Segment Anything, DINOv2); descriptor & mask fields (D³Fields); 3D keypoint tracking
DynamicsBetter sample efficiency & generalization; physics-informed structurePhysics-integrated representations (PhysGaussian = physics on 3D Gaussians)
ControlGuarantees on safety and optimalitySparse neural dynamics for tractable, provable model-based control; CoVO-MPC

The throughline: keep the structure (it's what gives generalization and efficiency) while making the perception that feeds it more robust and the control that uses it more principled.

The thesis, one more time

An unstructured black box can learn dynamics, but it must rediscover, from data alone, that the world is made of consistent interacting parts. The structured model assumes that and cannot violate it — so it generalizes from a few hundred particles to thousands and learns from minutes of data. The right structure is not a detail; it is the inductive bias that does the heavy lifting.

Where to go next on this site

This lesson is part of the CMU 16-831 series. Continue with the neighbors that bracket it, and the companion Gleams that expand each thread:

The test of this lesson. Open Yunzhu Li's slides. You should now be able to explain, from memory: why dough defeats analytical models; why a particle graph beats a latent vector; the three steps of message passing with their shapes; why shared MLPs plus sum-aggregation give generalization and sample efficiency; how RoboCook plans tool then motion; and why resolution should be dynamic. If you can, you've got the lecture.

"Don't model the dough — model a particle, and let the dough emerge."