A kickoff, five technical modules, and a wrap-up.
-
M0
Kickoff
15 minWe draw the pipeline together. Every module after this builds one piece of it.
-
M1
Perception
30 minUse MediaPipe to extract hand landmarks, then calculate a small set of joint angles for the controller.
-
M2
Simulation
20 minUse Gymnasium and MuJoCo to explore a physics simulation without building the simulator yourself.
-
M3
Reinforcement Learning
30 minThe agent starts with an untrained policy. Watch how its CartPole performance changes as it learns from rewards.
-
M4
Perception → Action
40 minMap hand landmarks to control signals and use them to move a simulated robot arm.
Here, your hand movements become actions in the simulation. -
M5
Foundation Models
25 minInspect a separate Gemini demo that turns a camera image into a structured JSON response with a proposed assistive-robot action. It does not control the simulated arm.
-
M6
Wrap-up
15 minYou’ll have used established tools found in robotics and reinforcement-learning workflows, including MuJoCo, Stable-Baselines3 and MediaPipe.
What you’ll build and understand.
By the end of the lab, you’ll have worked through the main stages of a simple Physical AI system: reading hand landmarks from a webcam, converting measurements into a state vector, exploring a simulation, training a reinforcement-learning agent and connecting perception to action.
- Extract hand landmarks from a live webcam using MediaPipe
- Turn selected measurements into a state vector
- Train a PPO agent on CartPole and inspect its learning curve
- Use hand movements to control a simulated robot arm
- Inspect a Gemini image-to-JSON demo and discuss what structured outputs can — and cannot — tell a controller
Basic Python familiarity assumed. No ML, robotics, or prior hardware experience needed.
Where this fits.
The M5 demo illustrates a broader idea: using visual input and a model to produce a structured, proposed action. It is separate from the simulated-arm teleoperation exercise and is not a complete trained VLA system. Research systems extend these ideas in different ways, from mapping images and instructions to robot actions to learning how an environment changes over time.
Vision-language-action models
Use visual input and language instructions to produce actions for a robot. Architectures, training methods and levels of human supervision vary by system.
- RT-2 Google DeepMind
- π0 / π0-FAST Physical Intelligence
- OpenVLA Stanford / Berkeley
- GR00T N1 NVIDIA, open foundation model for humanoid robots
World models
Learn to simulate how the environment responds to actions — enabling planning and training without running the real world every step.
- NVIDIA Cosmos 3 physical reasoning, world generation and action prediction in one model
- Cosmos Policy post-trained on Cosmos for robot manipulation
Imitation learning
Imitation learning trains a policy from demonstrations. Module 4 illustrates human-in-the-loop teleoperation; this lab does not record a complete demonstration dataset.
- ACT Action Chunking with Transformers
- Diffusion Policy
- LeRobot Hugging Face LeRobot provides tools and resources for robot datasets, imitation learning and supported hardware
Also a handbook.
Can't attend a session? The slides are a self-contained handbook you can read at your own pace. It includes 11 concept explanations, module instructions, code examples, references, project ideas and a quick reference. Use it before a workshop, follow along during a session, or work through the examples on your own.
Read the handbookPrerequisites
Use a Windows 11 laptop with Chrome or Edge, and complete setup before the session. Basic Python familiarity is recommended.
You’ll read and modify existing scripts; you won’t need to build a model from scratch. No prior ML or robotics experience is required.
- Windows 11 Mac / Linux: use setup.sh — works for most of the lab, not fully tested
- Internet connection for setup (about 700 MB of downloads) and live Gemini API calls. Install and verify the lab before the session.
- Chrome or Edge is recommended; Firefox is not supported by the current MediaPipe browser workflow.
Why this exists.
I built this workshop so people could try the pipeline themselves, rather than just hear about it or watch a video. Run the code, change a value, break something, and see what happens.