Marvin Bot in 3-D
The whole robot, part by part, in your browser. Turn it around, peel off the shells, see through the frame to the motors, computer and battery, put it together in the order it would be built, and play simple movements while every motor’s load is shown live.
What you are looking at
Section titled “What you are looking at”This model is not a drawing someone made by hand. Marvin Bot’s design lives in code: one text file (description/robot.yaml) lists every joint and motor, Python programs generate every part’s shape (08 Structure and code-CAD), and a generator turns all of it into a robot model file that the simulators read (13 The robot description). This page loads that same generated model: 241 visual pieces on 28 rigid bodies (links) joined by 27 motorised joints. The meshes are simplified to load quickly, so small details look rounder than the real parts.
Three ways to use it, one per tab on the left: Layers (what is it made of?), Assembly (how is it built?) and Skills (how does it move?). A fourth tab, Joints, lets you pose every joint by hand.
Playground
Section titled “Playground”The layers: what the robot is made of
Section titled “The layers: what the robot is made of”Every visible piece belongs to one layer. The numbers beside each layer in the playground are the drawn parts’ masses from the code-CAD (description/cad_model.yaml) and the motor datasheets.
| Layer | What it is | Why it is made that way |
|---|---|---|
| Machined aluminium | Flat plates, rings, hubs and straps, mostly in 7075 aluminium (6061 for the motor rings and spacers), drawn in build123d and cut on a desktop CNC mill. Every part on the load path is aluminium, checked with finite elements. | Metal carries the big loads: landing, falling, motor torque. Every machined part fits a mill of about 200 × 150 mm (08). |
| Cut by a service | Twelve flat parts too long for the desktop mill (shin side plates, foot base plates, pelvis and torso frames), cut by an online laser or water-jet service. | About $1,200 in the bill of materials (not yet quoted; 21). |
| Printed parts | White PETG for the head shell (a rounded box in five light panels and a dark visor band) and the camera frame; carbon-fibre-filled nylon (PA-CF) for the battery latch and guides; rubbery TPU for the soles and the harness edge clips. | Nothing printed carries the robot’s load; printing is kept for curved, lightly loaded parts. |
| Body shells | 25 clip-on covers in white PETG (0.98 kg), with a faceted torso shell, that give the robot a finished body. | Optional: the bare robot is meant to look finished too, and the walking policies are trained without them. |
| Motors | 23 RobStride actuators (RS04, RS03, RS10P, RS00) and 4 small Feetech servos (neck and wrist pitch). | About 20 kg, half the robot. Each model sits where its torque fits (04). |
| Electronics, sensors, computer, battery | The contactor, precharge, power boards, e-stop relay, three USB-CAN adapters, DC-DC converters, IMU, depth camera, the Jetson AGX Orin and the battery packs. | Drawn at typical outlines for their class until the real parts are chosen (09, 11). |
Not drawn: about 0.4 kg of fasteners and 0.5 kg of limb wiring, which are still to be modelled (docs/roadmap.md). That is why the drawn parts weigh a little less than the robot’s 40.00 kg.
Modules and assembly order
Section titled “Modules and assembly order”Marvin Bot is designed to come apart into seven modules: the torso core, the pelvis, two legs, two arms and the head, plus the battery and the optional shells. Each limb’s first motor stays on its parent module (the hip roll motors on the pelvis, the shoulder pitch motors on the torso), so a whole leg or arm comes off by undoing one output flange and unplugging one power and one signal connector. That is requirement R63: any motor can be changed with only one limb off the robot.
The Assembly tab follows the six steps in docs/design/assembly_wiring.md. Each module is built and tested on its own before it joins the rest: three pelvis motors on a short CAN cable, each leg on a single-leg test jig, the torso core powered up without limbs. That way a wiring mistake costs one module, not the robot.
How the skills are animated, and what the loads mean
Section titled “How the skills are animated, and what the loads mean”The movements in the Skills tab are scripted for this page, not played by Marvin Bot’s trained policies (those live in the simulators: 16, 17). Each skill sets the pelvis position and where each foot should be; a small inverse-kinematics solver then finds the six leg angles that put each foot there, respecting every joint’s range. The arms, waist and neck follow hand-written curves.
The load on each motor is a quasi-static estimate: the torque needed to hold the pose still against gravity, as if the movement were very slow. For every joint the page adds up the weight of everything beyond that joint (and the push of the floor, if a foot beyond it is on the ground) times its lever arm about the joint’s axis. When both feet are down, the weight is shared between them by how close the centre of mass is to each foot. This is the same idea as the 2-D leg on 05, done for the whole 3-D robot.
How Marvin Bot does it
Section titled “How Marvin Bot does it”Trade-offs and alternatives
Section titled “Trade-offs and alternatives”- A modular robot costs a few connectors and bolted flanges (mass and failure points) but makes every motor replaceable without stripping the robot. The alternative, one continuous harness, is lighter but turns every motor swap into a rebuild.
- Shells as an add-on keep the training model simple and the robot serviceable, at the cost of designing a bare robot that still looks finished.
- Motors high, mass high: putting the ankle motors on the shin and the battery high in the chest keeps the legs light (easier to swing) but raises the centre of mass (harder to balance; 02).
Decisions you can make here
Section titled “Decisions you can make here”- Which joints deserve a stronger motor or a gear stage: play the skills you care about and see which motors go amber or red (more torque, but more mass and cost; 04).
- Where heavy parts should sit: X-ray the battery and computer and ask what moving them would do to the centre of mass and to the legs’ loads (07).
- Whether the shells are worth their 0.82 kg: they add fall protection and a finished look, but every kilogram loads the knees on stairs.
Built from your settings above. Paste it into an issue, a design discussion or an AI assistant session.
Further reading
Section titled “Further reading”- three.js documentation: the open-source 3-D library this page uses to draw the model in the browser.
- The URDF format (ROS wiki): the robot-model file format this page reads; 13 explains it from scratch.
- K. M. Lynch and F. C. Park, Modern Robotics, chapters 4–6 (forward kinematics, the Jacobian, inverse kinematics) and 8.1 (statics): the maths behind the solver and the load estimate.
Sources
Section titled “Sources”- Marvin Bot repository, as of 2026-11-02:
description/urdf/marvin_bot_covers.urdf,marvin_bot.urdf,description/cad_model.yaml,skeleton.yaml,robot.yaml,actuators.yamland the code-CAD meshes (cad/, CERN-OHL-S-2.0) — used for: the model, part categories, masses, joint ranges and motor ratings - Marvin Bot repository,
docs/design/assembly_wiring.md— used for: the modules, the assembly order and the electronics layout - Pollen Robotics, AmazingHand (CC-BY-4.0) — used for: the hand meshes (simplified by the Marvin Bot project)
- three.js (MIT licence) — used for: rendering the model in the browser; the version pinned in the site’s
package-lock.jsonis served with the site - ROS wiki, URDF joint and link elements — used for: reading joint origins, axes and visuals
- K. M. Lynch and F. C. Park, Modern Robotics: Mechanics, Planning, and Control, Cambridge University Press, 2017 — used for: the Jacobian-based inverse kinematics (damped least squares) and the static joint-torque estimate
- Marvin Bot repository,
sim/isaaclab/README.md— used for: the trained flat policy’s hottest joint (knee, 68% of rated in the fast walk)