Build package
Build Stanford Pupper (v1)
Stanford Student Robotics · Quadruped · discontinued · 2020
Low-cost, servo-driven 12-DOF quadruped designed for robotics education and benchmarking, running on a Raspberry Pi.
Build is partial: Docs and BOM are public, but both kit vendors named in the docs are gone and the BOM prices are from 2020. The power distribution board needs 2 oz copper (JLCPCB upstream).
Two ways to get Stanford Pupper (v1)
Compare all →- Drawing
- /stanford/pupper
- Maker
- Stanford Student Robotics
- Country
- Stanford, US
- Package rev
- v0.1.0
- Level
- L1 Compiled
- Availability
- DIY
- Openness
- 70/100
- HW licence
- unknown
- Last checked
- 2026-09-25
- DOF
- 12
Repo carries an end-of-life notice; support moved to Pupper v3. The docs source repo (Pupper) and the PDB repo (Pupper-Raspi-PDB: KiCad, Gerbers) have no license file and were last pushed 2021 and 2020; the CAD is a public Fusion 360 share with no stated license. Software (StanfordQuadruped) is MIT.
Configure
Saved in the URL. Share the link to share the build.Source
One cart across 3 vendors · prices in USD as listed34 lines · 57 parts · 2 without an offer in US · 0/34 lines sourced in 2+ regions (L3 gate)
| # | Part | Category | Qty | Unit | Line | Offer |
|---|---|---|---|---|---|---|
Amazon18 lines · $340.68 | ||||||
| 1 | Raspberry Pi 4 (2 GB listing linked) compute.rpi4 | compute | 1 | $42.00list price | $42.00 | AmazonASIN from the 2020 BOM link (smile.amazon.com links rewritten to www.amazon.com); listing not re-checked |
| 2 | microSD card for the Pi (32 GB recommended; listed on the Tools tab) compute.microsd | compute | 1 | $7.99list price | $7.99 | AmazonASIN from the 2020 BOM link (smile.amazon.com links rewritten to www.amazon.com); listing not re-checked |
| 3 | 5200 mAh 2S LiPo, XT60 (never more than 8.4 V: higher voltage burns the servos) power.lipo-2s-5200 | power | 1 | $17.99list price | $17.99 | AmazonASIN from the 2020 BOM link (smile.amazon.com links rewritten to www.amazon.com); listing not re-checked |
| 4 | XT60 connector pigtail (pack of 2, 1 used) cable.xt60 | cable | 1 | $6.99list price | $6.99 | AmazonASIN from the 2020 BOM link (smile.amazon.com links rewritten to www.amazon.com); listing not re-checked |
| 5 | Raspberry Pi 2x20 female stacking header for the PDB (pack of 5 listed, 1 used) electronics.pi-header | electronics | 1 | $10.99list price | $10.99 | AmazonASIN from the 2020 BOM link (smile.amazon.com links rewritten to www.amazon.com); listing not re-checked |
| 6 | Male header pins for the PDB servo connectors (pack of 50 strips) electronics.header-pins | electronics | 1 | $7.99list price | $7.99 | AmazonASIN from the 2020 BOM link (smile.amazon.com links rewritten to www.amazon.com); listing not re-checked |
| 7 | 5 V regulator (BEC) for the Pi (pack of 2, 1 used) power.bec-5v | power | 1 | $11.99list price | $11.99 | AmazonASIN from the 2020 BOM link (smile.amazon.com links rewritten to www.amazon.com); listing not re-checked |
| 8 | Sony DualShock 4 (PS4) wireless controller electronics.ps4-controller | electronics | 1 | $46.96list price | $46.96 | AmazonASIN from the 2020 BOM link (smile.amazon.com links rewritten to www.amazon.com); listing not re-checked |
| 9 | SparkFun VR IMU breakout BNO080 (optional IMU setup) sensor.bno080 | sensor | 1 | $37.00list price | $37.00 | AmazonASIN from the 2020 BOM link (smile.amazon.com links rewritten to www.amazon.com); listing not re-checked |
| 10 | Teensy LC, IMU-to-Pi bridge (optional IMU setup) electronics.teensy-lc | electronics | 1 | $15.00list price | $15.00 | AmazonASIN from the 2020 BOM link (smile.amazon.com links rewritten to www.amazon.com); listing not re-checked |
| 11 | MR693-ZZ bearing 3 x 8 x 4 mm, ab/adduction axle (pack of 10, 4 used) structure.mr693-bearing · MPN MR693-ZZ | structure | 1 | $7.99list price | $7.99 | AmazonASIN from the 2020 BOM link (smile.amazon.com links rewritten to www.amazon.com); listing not re-checked |
| 12 | 3M Dual Lock SJ3550, 1 in x 4 ft (8 in used) to hold the Pi case and battery; optional other.dual-lock · MPN SJ3550 | other | 1 | $12.95list price | $12.95 | AmazonASIN from the 2020 BOM link (smile.amazon.com links rewritten to www.amazon.com); listing not re-checked |
| 13 | 20 mm M3 aluminium standoff, leg hub (pack of 20, 16 used) structure.standoff-m3-20 | structure | 1 | $6.99list price | $6.99 | AmazonASIN from the 2020 BOM link (smile.amazon.com links rewritten to www.amazon.com); listing not re-checked |
| 14 | 25T disc servo spline, ab/adduction connector (pack of 5, 4 used) structure.servo-disc-25t | structure | 1 | $7.99list price | $7.99 | AmazonASIN from the 2020 BOM link (smile.amazon.com links rewritten to www.amazon.com); listing not re-checked |
| 15 | 25T servo arm (horn) structure.servo-arm-25t | structure | 8 | $8.99list price | $71.92 | AmazonASIN from the 2020 BOM link (smile.amazon.com links rewritten to www.amazon.com); listing not re-checked |
| 16 | 3.0 x 20 mm rod end / ball link (pack of 5; 8 used) structure.ball-end | structure | 2 | $7.39list price | $14.78 | AmazonASIN from the 2020 BOM link (smile.amazon.com links rewritten to www.amazon.com); listing not re-checked |
| 17 | Threaded rod for the extension rod (pack of 10, 4 used) structure.threaded-rod | structure | 1 | $7.57list price | $7.57 | AmazonASIN from the 2020 BOM link (smile.amazon.com links rewritten to www.amazon.com); listing not re-checked |
| 18 | Thrust bearing 4 x 9 x 4 mm, 3-part, knee (pack of 10, 8 used) structure.thrust-bearing | structure | 1 | $5.59list price | $5.59 | AmazonASIN from the 2020 BOM link (smile.amazon.com links rewritten to www.amazon.com); listing not re-checked |
McMaster-Carr13 lines · $100.89 | ||||||
| 19 | M4 x 10 thread-forming screw for plastic (pack of 25; 32 used: 16 body, 16 servo mounts) fastener.m4x10-plastic · MPN 96817A510 | fastener | 2 | $6.84list price | $13.68 | McMaster-Carr |
| 20 | M3 x 6 alloy steel socket head screw (pack of 100; 16 carbon fiber to body, 4 servo discs) fastener.m3x6-socket · MPN 91290A111 | fastener | 1 | $8.71list price | $8.71 | McMaster-Carr |
| 21 | M3 short heat-set insert (pack of 100; 16 body pieces, 4 inner hips) fastener.m3-insert · MPN 94180A331 | fastener | 1 | $13.35list price | $13.35 | McMaster-Carr |
| 22 | M2.5 short heat-set insert for the Pi case (pack of 100, 4 used) fastener.m2p5-insert · MPN 94180A321 | fastener | 1 | $11.19list price | $11.19 | McMaster-Carr |
| 23 | M2.5 x 5 socket head screw, Pi to case (pack of 100, 4 used) fastener.m2p5x5-socket · MPN 91292A009 | fastener | 1 | $4.97list price | $4.97 | McMaster-Carr |
| 24 | M3 x 8 alloy steel flat head screw, disc spline to inner hip (pack of 100) fastener.m3x8-flat · MPN 91294A128 | fastener | 1 | $4.82list price | $4.82 | McMaster-Carr |
| 25 | M3 x 8 alloy steel button head screw (pack of 100; ~20 used: hip bearings, servo arms, ball links, feet) fastener.m3x8-button · MPN 91239A113 | fastener | 1 | $7.27list price | $7.27 | McMaster-Carr |
| 26 | M3 x 10 alloy steel button head screw (pack of 100; 32 standoffs, 4 ball links) fastener.m3x10-button · MPN 91239A115 | fastener | 1 | $7.77list price | $7.77 | McMaster-Carr |
| 27 | M3 x 16 alloy steel button head screw, standoff through servo mounting hole (pack of 100, 16 used) fastener.m3x16-button · MPN 91239A120 | fastener | 1 | $10.69list price | $10.69 | McMaster-Carr |
| 28 | M3 locknut (pack of 100; 12 used: ball links, knee stack, feet) fastener.m3-locknut · MPN 90576A102 | fastener | 1 | $3.52list price | $3.52 | McMaster-Carr |
| 29 | M3 shoulder bolt, 4 mm shoulder dia., 12 mm shoulder length, lower leg axle fastener.shoulder-bolt · MPN 92981A143 | fastener | 4 | $2.56list price | $10.24 | McMaster-Carr |
| 30 | Cushioning washer used as a foot (pack of 10, 4 used) other.cushion-washer · MPN 90131A101 | other | 1 | $3.06list price | $3.06 | McMaster-Carr |
| 31 | M3 washer for the foot (pack of 100, 4 used) fastener.m3-washer · MPN 93475A210 | fastener | 1 | $1.62list price | $1.62 | McMaster-Carr |
Great3D1 line · $95.00 | ||||||
| 32 | Carbon fiber routed parts: top and bottom plates (1.5 mm), 4 upper legs (3 mm), 4 lower legs (2 mm) structure.cf-parts · 1 alt | structure | 1 | $95.00list price | $95.00 | Great3DComplete set named on the BOM's carbon fiber tab (includes 1 spare upper and lower leg); site did not respond on 2026-09-25 |
No offer in this region2 lines · $324.00 | ||||||
| 33 | JX CLS6336 servo (3 per leg); upstream recommends buying a few spares actuator.jx-cls6336 · MPN CLS6336 | actuator | 12 | $24.50list price | $294.00 | Offers in CN only |
| 34 | Custom power distribution PCB (Pi hat), pack of 5; 2 layers, 2 oz copper electronics.pdb | electronics | 1 | $30.00list price | $30.00 | Offers in CN only |
| Cart total · US | 57 | $860.57 | All lines priced | |||
Fabricate
Planned for a 256 mm bed- Fabricated parts
- 23
- Print time (sum)
- —
- Material (sum)
- —
- Plates · estimate
- —
No plate estimate: the package does not list grams per part yet, and we will not guess them. Slice the source files for your 256 mm bed.
| Part | Process | Material | Qty | h / part | g / part | Profile |
|---|---|---|---|---|---|---|
Body support "Front1" (FrontFront.stl), holds 2 hip bearings printed.front-front | FDM | PLA or PETG (SLS PA12 if ordering out) | 1 | — | — | 0.2-0.4 mm layers, >50% infill (BOM 3D Printed Parts tab) |
Body support "Front2" (FrontBack.stl) printed.front-back | FDM | PLA or PETG (SLS PA12 if ordering out) | 1 | — | — | 0.2-0.4 mm layers, >50% infill |
Body support "Back1" (BackFront.stl), holds 2 hip bearings printed.back-front | FDM | PLA or PETG (SLS PA12 if ordering out) | 1 | — | — | 0.2-0.4 mm layers, >50% infill |
Body support "Back2" (BackBack.stl) printed.back-back | FDM | PLA or PETG (SLS PA12 if ordering out) | 1 | — | — | 0.2-0.4 mm layers, >50% infill |
Raspberry Pi case (picase.stl) printed.picase | FDM | PLA or PETG (SLS PA12 if ordering out) | 1 | — | — | 0.2-0.4 mm layers, >50% infill |
Inner hip (HipInsideFDM.stl); upstream suggests a 5th as a spare printed.hip-inside | FDM | PLA or PETG (SLS PA12 if ordering out) | 4 | — | — | 0.2-0.4 mm layers, >50% infill |
Outer hip (HipOutsideFDM.stl); upstream suggests a 5th as a spare printed.hip-outside | FDM | PLA or PETG (SLS PA12 if ordering out) | 4 | — | — | 0.2-0.4 mm layers, >50% infill |
Carbon fiber plate "Top" cf.plate-top | CNC | Carbon fiber sheet 1.5 mm | 1 | — | — | CNC routed; see the BOM Carbon Fiber Routed Parts tab |
Carbon fiber plate "Bottom" cf.plate-bottom | CNC | Carbon fiber sheet 1.5 mm | 1 | — | — | CNC routed |
Carbon fiber upper leg cf.upper-leg | CNC | Carbon fiber sheet 3 mm | 4 | — | — | CNC routed |
Carbon fiber lower leg cf.lower-leg | CNC | Carbon fiber sheet 2 mm | 4 | — | — | CNC routed |
Assemble
Every step ends in a check- Steps
- 20
- Subassemblies
- 8
- Hands-on time (sum)
- —
- Critical path
- —
- Your progress · this device
- —
20 steps have no time estimate; times above are lower bounds.
Steps, in build order
- Fabrication01
Get the STLs, carbon fiber parts and PCBs
Download the STLs from the BOM's Google Drive folder. Buy the carbon fiber set (Great3D was the upstream source) or have the parts routed. Order the power distribution board from JLCPCB with the Gerbers.zip from Pupper-Raspi-PDB (xt60cable branch): 2 layers, quantity 5, 2 oz copper ('super important'), everything else default.
CHECKYou have 7 STL files, 2 carbon plates plus 4 upper and 4 lower legs, and 2 oz copper bare PDBs.- Parts in
- Carbon fiber routed parts: top and bottom plates (1.5 mm), 4 upper legs (3 mm), 4 lower legs (2 mm)structure.cf-parts
- Custom power distribution PCB (Pi hat), pack of 5; 2 layers, 2 oz copperelectronics.pdb
- Carbon fiber plate "Top"cf.plate-top
- Carbon fiber plate "Bottom"cf.plate-bottom
- Carbon fiber upper legcf.upper-leg
- Carbon fiber lower legcf.lower-leg
- Tools
- —
- Torque
- —
- Time
- —
- After
- Start
- Source
- docs.google.com
- Hips02
Hip step 1: install the servo disc on the ab/adduction servo (x4)
Put a horn on the servo, turn it to neutral, remove the horn. Seat the disc with its holes at roughly the 45° marks, add a dab of Loctite to the M3x6 socket screw and drive it in until the disc seats. Poorly made discs take a lot of torque at first; stop when the torque rises again at full seating or you can break the servo.
CHECKDisc is fully seated with holes at about 45° while the servo is at neutral; the screw is snug, not forced.- Parts in
- JX CLS6336 servo (3 per leg); upstream recommends buying a few sparesactuator.jx-cls6336
- 25T disc servo spline, ab/adduction connector (pack of 5, 4 used)structure.servo-disc-25t
- M3 x 6 alloy steel socket head screw (pack of 100; 16 carbon fiber to body, 4 servo discs)fastener.m3x6-socket
- 25T servo arm (horn)structure.servo-arm-25t
- Tools
- 2.5 mm hex driver, Loctite
- Torque
- —
- Time
- —
- After
- Start
- Source
- pupper.readthedocs.io
- Software03
Flash Raspbian and the RPI-Setup files
Flash 2019-09-26-raspbian-buster-lite with Etcher (fallback: 2020-02-13-raspbian-buster-lite from downloads.raspberrypi.org). Copy the latest RPI-Setup release (github.com/Nate711/RPI-Setup) onto the boot partition, overwriting conflicts. Boot the Pi, set your computer to a static 10.0.0.X / 255.255.255.0 on Ethernet, `ssh pi@10.0.0.10` (password `raspberry`), run `rw`, set up Wi-Fi with `sudo raspi-config`, then `sudo ./install_packages.sh` (pick a new IP and hostname) and `sudo ./time_sync.sh`.
CHECKThe prompt ends with (rw) after `rw`, and `ping www.google.com` gets replies.- Parts in
- microSD card for the Pi (32 GB recommended; listed on the Tools tab)compute.microsd
- Tools
- balenaEtcher, Ethernet cable, USB-C 5 V >= 3 A Pi power supply
- Torque
- —
- Time
- —
- After
- Start
- Source
- pupper.readthedocs.io
- Fabrication04
Print the body supports, Pi case and hips
Print in PLA or PETG at 0.2-0.4 mm layer height and more than 50% infill: FrontFront, FrontBack, BackFront, BackBack, picase, and 4 each of HipInsideFDM and HipOutsideFDM (a 5th of each as a spare is suggested).
CHECK4 body pieces, 1 Pi case, 4 inner and 4 outer hips; the bearing holes in FrontFront and BackFront accept an MR693 bearing with a press fit.- Parts in
- Body support "Front1" (FrontFront.stl), holds 2 hip bearingsprinted.front-front
- Body support "Front2" (FrontBack.stl)printed.front-back
- Body support "Back1" (BackFront.stl), holds 2 hip bearingsprinted.back-front
- Body support "Back2" (BackBack.stl)printed.back-back
- Raspberry Pi case (picase.stl)printed.picase
- Inner hip (HipInsideFDM.stl); upstream suggests a 5th as a spareprinted.hip-inside
- Outer hip (HipOutsideFDM.stl); upstream suggests a 5th as a spareprinted.hip-outside
- Tools
- FDM printer, or a print service (upstream used 3D Hubs: SLS PA12 ~$180, FDM PLA/PETG ~$80)
- Torque
- —
- Time
- —
- After
- 01
- Source
- docs.google.com
- Electronics05
PCB steps 1-4: headers, Vbat/5 V pins and XT60
Solder the 12 three-pin servo headers (tack the signal pins nearest the 2x20 header first, then ground and +). Insert the 2x20 header from the bottom so it sits on the Pi, solder from the top. Add 1x2 pins at 'Regulated 5V' and at 'Vbat' (skip Vbat pins if you cannot crimp Dupont/JST). Solder the XT60 pigtail from the top, matching the + and - labels.
CHECKAll joints shiny and complete; the XT60 polarity matches the silkscreen.- Parts in
- Custom power distribution PCB (Pi hat), pack of 5; 2 layers, 2 oz copperelectronics.pdb
- Male header pins for the PDB servo connectors (pack of 50 strips)electronics.header-pins
- Raspberry Pi 2x20 female stacking header for the PDB (pack of 5 listed, 1 used)electronics.pi-header
- XT60 connector pigtail (pack of 2, 1 used)cable.xt60
- Tools
- Soldering iron (>= 60 W recommended), Vise
- Torque
- —
- Time
- —
- After
- 01
- Source
- pupper.readthedocs.io
- Software06
Install StanfordQuadruped and the joystick service
On the Pi: `git clone https://github.com/stanfordroboticsclub/StanfordQuadruped.git`, `cd StanfordQuadruped`, `sudo bash install.sh` (installs numpy, transforms3d, pigpio, pyserial, PupperCommand, PS4Joystick and pigpio v74, and enables robot.service). Unplug the battery 30 s and power back up. Pair the PS4 controller: hold Share + PS until it double-flashes.
CHECK`sudo systemctl status joystick` shows 'Connected to Bluetooth Controller'; `sudo systemctl status robot` shows no failure (fix with `sudo systemctl restart robot`).- Parts in
- Sony DualShock 4 (PS4) wireless controllerelectronics.ps4-controller
- Tools
- —
- Torque
- —
- Time
- —
- After
- 03
- Source
- pupper.readthedocs.io
- Hips07
Hip step 2: M3 heat-set insert in each inner hip
Safety · human-verified requiredTapered side down, press the insert with just the weight of the iron at about 260 °C, 1 mm at a time, lifting the iron between pushes so it does not stick. Hot tip: use a stand.
CHECKInsert sits flush and square; an M3 screw threads in without the insert turning.This step can hurt a person or ruin parts. Its instructions need sign-off by a human who has done it before relying on them. Stop and ask if anything differs from what you see.
- Parts in
- M3 short heat-set insert (pack of 100; 16 body pieces, 4 inner hips)fastener.m3-insert
- Inner hip (HipInsideFDM.stl); upstream suggests a 5th as a spareprinted.hip-inside
- Tools
- Soldering iron at ~260 °C (500 °F)
- Torque
- —
- Time
- —
- After
- 04
- Source
- pupper.readthedocs.io
- Body08
Body steps 1-2: inserts and hip bearings in the body pieces
Safety · human-verified requiredPress 4 M3 heat-set inserts into each of the 4 body pieces (2 top, 2 bottom), same method as the hips. Press 2 MR693 bearings into FrontFront and 2 into BackFront.
CHECK16 inserts flush; 4 bearings seated and spinning freely.This step can hurt a person or ruin parts. Its instructions need sign-off by a human who has done it before relying on them. Stop and ask if anything differs from what you see.
- Parts in
- M3 short heat-set insert (pack of 100; 16 body pieces, 4 inner hips)fastener.m3-insert
- Body support "Front1" (FrontFront.stl), holds 2 hip bearingsprinted.front-front
- Body support "Front2" (FrontBack.stl)printed.front-back
- Body support "Back1" (BackFront.stl), holds 2 hip bearingsprinted.back-front
- Body support "Back2" (BackBack.stl)printed.back-back
- MR693-ZZ bearing 3 x 8 x 4 mm, ab/adduction axle (pack of 10, 4 used)structure.mr693-bearing
- Tools
- Soldering iron at ~260 °C, Arbor press or vise
- Torque
- —
- Time
- —
- After
- 04
- Source
- pupper.readthedocs.io
- Electronics09
PCB steps 5-7: short test, servo power test, BEC
Safety · human-verified requiredContinuity-test that XT60 + and - are not shorted, and no signal pin shorts to +, - or another signal. Plug in the 2S LiPo (never more than 8.4 V), plug one servo in (signal wire, usually yellow or white, toward the Pi header), then unplug both. Cut the BEC's input JST, solder or crimp its input to Vbat, and plug its 5 V JST onto the Regulated 5V pins.
CHECKNo shorts; the single servo powers up without smoke; with the battery in, the BEC output reads 5 V.This step can hurt a person or ruin parts. Its instructions need sign-off by a human who has done it before relying on them. Stop and ask if anything differs from what you see.
- Parts in
- 5200 mAh 2S LiPo, XT60 (never more than 8.4 V: higher voltage burns the servos)power.lipo-2s-5200
- 5 V regulator (BEC) for the Pi (pack of 2, 1 used)power.bec-5v
- JX CLS6336 servo (3 per leg); upstream recommends buying a few sparesactuator.jx-cls6336
- Tools
- Multimeter, Soldering iron or crimper
- Torque
- —
- Time
- —
- After
- 05
- Source
- pupper.readthedocs.io
- Hips10
Hip steps 3-5: disc to inner hip, inner servo, standoffs and horn (x4)
Mount the inner hip at 90° and tighten the M3x8 flat head through the access holes into the disc. Seat the servo with its shaft in the big round hole: silver M4x10 plastic screws on the left, M3x16 button heads (Loctite) through standoffs on the right. Turn the servo to neutral and fit the horn pointing 45° downward; M3x8 button head on top, M2x8 socket heads in the side clamp, Loctite on all.
CHECKPlastic screws on one side, M3 screws on the other (as in the photos); horn is at 45° down with the servo at neutral.- Parts in
- M3 x 8 alloy steel flat head screw, disc spline to inner hip (pack of 100)fastener.m3x8-flat
- JX CLS6336 servo (3 per leg); upstream recommends buying a few sparesactuator.jx-cls6336
- M4 x 10 thread-forming screw for plastic (pack of 25; 32 used: 16 body, 16 servo mounts)fastener.m4x10-plastic
- M3 x 16 alloy steel button head screw, standoff through servo mounting hole (pack of 100, 16 used)fastener.m3x16-button
- 20 mm M3 aluminium standoff, leg hub (pack of 20, 16 used)structure.standoff-m3-20
- 25T servo arm (horn)structure.servo-arm-25t
- M3 x 8 alloy steel button head screw (pack of 100; ~20 used: hip bearings, servo arms, ball links, feet)fastener.m3x8-button
- Tools
- 2 mm hex driver, T20 Torx driver, Loctite
- Torque
- —
- Time
- —
- Source
- pupper.readthedocs.io
- Legs11
Hip steps 6-7: knee stack and upper link to horn
On each shoulder bolt: thrust bearing, lower leg, thrust bearing, upper leg, locknut; mirror the order of upper/lower for left and right legs. Align the curved edge of the upper leg with the servo horn and fix it with 2 M3x6 button heads, holding the screw nearest the servo vertical to avoid cross-threading.
CHECKKnee rotates freely with no axial play; upper leg is fixed to the horn with both screws.- Parts in
- M3 shoulder bolt, 4 mm shoulder dia., 12 mm shoulder length, lower leg axlefastener.shoulder-bolt
- Thrust bearing 4 x 9 x 4 mm, 3-part, knee (pack of 10, 8 used)structure.thrust-bearing
- Carbon fiber lower legcf.lower-leg
- Carbon fiber upper legcf.upper-leg
- M3 locknut (pack of 100; 12 used: ball links, knee stack, feet)fastener.m3-locknut
- Tools
- 2 mm hex driver, Wrench for the locknut
- Torque
- —
- Time
- —
- After
- 10
- Source
- pupper.readthedocs.io
- Hips12
Hip steps 8-11: outer servo, horn, join the halves
Fix the servo in the outer hip with the two plastic screws nearest the spline. Neutral, then horn at 45° (M3x8 first, then M2x8 to clamp). Join inner and outer halves with M3x16 through the outer hip into the standoffs (Loctite, not fully tight yet); plastic screws on the same side, horns at 90° to each other. Add the other 2 standoffs with 4 M3x10 button heads. Mark left and right; compare with the Fusion 360 model if unsure.
CHECKA rigid hip module with 4 standoffs; the two horns sit 90° apart.- Parts in
- Outer hip (HipOutsideFDM.stl); upstream suggests a 5th as a spareprinted.hip-outside
- JX CLS6336 servo (3 per leg); upstream recommends buying a few sparesactuator.jx-cls6336
- M4 x 10 thread-forming screw for plastic (pack of 25; 32 used: 16 body, 16 servo mounts)fastener.m4x10-plastic
- 25T servo arm (horn)structure.servo-arm-25t
- M3 x 8 alloy steel button head screw (pack of 100; ~20 used: hip bearings, servo arms, ball links, feet)fastener.m3x8-button
- M3 x 16 alloy steel button head screw, standoff through servo mounting hole (pack of 100, 16 used)fastener.m3x16-button
- M3 x 10 alloy steel button head screw (pack of 100; 32 standoffs, 4 ball links)fastener.m3x10-button
- 20 mm M3 aluminium standoff, leg hub (pack of 20, 16 used)structure.standoff-m3-20
- Tools
- T20 Torx driver, 2 mm hex driver, Loctite
- Torque
- —
- Time
- —
- After
- 11
- Source
- pupper.readthedocs.io
- 13
Hip step 12: check each servo's range by hand
Unpowered, move each joint through its range.
CHECKHip goes fully flat on either side; the inner horn goes from 45° up to touching the lower standoff; the outer horn goes from touching the standoff to 45° down.- Parts in
- —
- Tools
- —
- Torque
- —
- Time
- —
- After
- 12
- Source
- pupper.readthedocs.io
- Legs14
Hip steps 13-15: extension rod and parallelogram linkage
Thread the rod ends on equally until the hole centres are 123.5 mm apart. Screw the rod to the outer servo horn from the inside with an M3x8 button head. Fix the other end to the lower leg with an M3x10 button head through the carbon and the rod end, and a locknut.
CHECKHorn, extension rod, upper leg and the top of the lower leg form a parallelogram (the docs' photo correction shows a rod that is too short).- Parts in
- Threaded rod for the extension rod (pack of 10, 4 used)structure.threaded-rod
- 3.0 x 20 mm rod end / ball link (pack of 5; 8 used)structure.ball-end
- M3 x 8 alloy steel button head screw (pack of 100; ~20 used: hip bearings, servo arms, ball links, feet)fastener.m3x8-button
- M3 x 10 alloy steel button head screw (pack of 100; 32 standoffs, 4 ball links)fastener.m3x10-button
- M3 locknut (pack of 100; 12 used: ball links, knee stack, feet)fastener.m3-locknut
- Tools
- 2 mm hex driver, Wrench, Calipers
- Torque
- —
- Time
- —
- After
- 13
- Source
- pupper.readthedocs.io
- Body15
Body steps 3-4: fasten the hips and the bottom plate
Fix two hip assemblies to BackBack and two to FrontBack with the plastic screws, then drive M3x8 button heads through the bearings in FrontFront and BackFront into the hip inserts. Screw both leg/body assemblies to the bottom carbon plate with 16 M3x6 screws.
CHECKAll four hips abduct freely on their bearings and both ends sit flat on the bottom plate.- Parts in
- M4 x 10 thread-forming screw for plastic (pack of 25; 32 used: 16 body, 16 servo mounts)fastener.m4x10-plastic
- M3 x 8 alloy steel button head screw (pack of 100; ~20 used: hip bearings, servo arms, ball links, feet)fastener.m3x8-button
- Carbon fiber plate "Bottom"cf.plate-bottom
- M3 x 6 alloy steel socket head screw (pack of 100; 16 carbon fiber to body, 4 servo discs)fastener.m3x6-socket
- Tools
- T20 Torx driver, 2 mm hex driver
- Torque
- —
- Time
- —
- Source
- pupper.readthedocs.io
- 16
Body step 5: Pi case
Press 4 M2.5 inserts into the Pi case, screw the Pi 4 down with M2.5 socket heads, and stick the case to the bottom plate with Dual Lock.
CHECKPi is rigid in the case and the case holds on the plate when the robot is lifted.- Parts in
- Raspberry Pi case (picase.stl)printed.picase
- M2.5 short heat-set insert for the Pi case (pack of 100, 4 used)fastener.m2p5-insert
- M2.5 x 5 socket head screw, Pi to case (pack of 100, 4 used)fastener.m2p5x5-socket
- Raspberry Pi 4 (2 GB listing linked)compute.rpi4
- 3M Dual Lock SJ3550, 1 in x 4 ft (8 in used) to hold the Pi case and battery; optionalother.dual-lock
- Tools
- Soldering iron, 2 mm hex driver
- Torque
- —
- Time
- —
- After
- 15
- Source
- pupper.readthedocs.io
- Electronics17
Body step 7: plug the 12 servos into J1-J12
Stack the PDB on the Pi and plug each servo into its J1-J12 header following the docs' mapping photo. Signal pins always face the Pi header.
CHECK12 servos plugged in per the mapping, every signal wire toward the Pi header.- Parts in
- Custom power distribution PCB (Pi hat), pack of 5; 2 layers, 2 oz copperelectronics.pdb
- JX CLS6336 servo (3 per leg); upstream recommends buying a few sparesactuator.jx-cls6336
- Tools
- —
- Torque
- —
- Time
- —
- Source
- pupper.readthedocs.io
- Bring-up18
Calibrate the 12 servo offsets
Safety · human-verified requiredRobot on a stand, 2S LiPo in. SSH in and run `rw`, `sudo systemctl stop robot`, then `cd StanfordQuadruped`, `sudo pigpiod`, `python3 calibrate_servos.py`. Follow the prompts, aligning joint centres (not link edges) to horizontal or vertical for each of the 12 motors; the script writes the offsets. Then `sudo systemctl start robot`. Servos move under power: keep fingers out of the linkages.
CHECKEvery joint reaches the prompted horizontal/vertical pose (if not, a disc or horn was mounted wrong) and the script finishes for all 12 servos.This step can hurt a person or ruin parts. Its instructions need sign-off by a human who has done it before relying on them. Stop and ask if anything differs from what you see.
- Parts in
- 5200 mAh 2S LiPo, XT60 (never more than 8.4 V: higher voltage burns the servos)power.lipo-2s-5200
- Tools
- Stand that keeps the feet off the table
- Torque
- —
- Time
- —
- Source
- pupper.readthedocs.io
- 19
First run: activate and trot
Safety · human-verified requiredOptional for slippery floors: bolt a cushioning washer to each foot hole (M3x8, washer, locknut). Fit the top plate. Plug in the battery (the code starts on boot), pair the controller, press L1 to activate, R1 to toggle rest/trot; left stick translates, right stick pitch/yaw, D-pad height/roll, X three times to hop. Use a LiPo alarm and stop when a cell is below about 3.6 V.
CHECKController light goes dim green on bind and bright green after L1; the robot stands and trots in place on R1.This step can hurt a person or ruin parts. Its instructions need sign-off by a human who has done it before relying on them. Stop and ask if anything differs from what you see.
- Parts in
- M3 x 8 alloy steel button head screw (pack of 100; ~20 used: hip bearings, servo arms, ball links, feet)fastener.m3x8-button
- M3 locknut (pack of 100; 12 used: ball links, knee stack, feet)fastener.m3-locknut
- M3 washer for the foot (pack of 100, 4 used)fastener.m3-washer
- Cushioning washer used as a foot (pack of 10, 4 used)other.cushion-washer
- Carbon fiber plate "Top"cf.plate-top
- Tools
- —
- Torque
- —
- Time
- —
- After
- 18
- Source
- pupper.readthedocs.io
- Options20
Optional: BNO080 IMU via Teensy LC
The BOM lists an optional IMU setup (BNO080 breakout read by a Teensy LC connected to the Pi; src/IMU.py reads it over serial). The build guide gives no wiring or firmware steps for it.
CHECKOnly if you add it: IMU data arrives on the Pi's serial port.- Parts in
- SparkFun VR IMU breakout BNO080 (optional IMU setup)sensor.bno080
- Teensy LC, IMU-to-Pi bridge (optional IMU setup)electronics.teensy-lc
- Tools
- —
- Torque
- —
- Time
- —
- After
- 19
- Source
- docs.google.com
Progress is stored in this browser only (localStorage). Nothing is sent anywhere.
Bring-up
Flash · calibrate · first policy- A
Flash firmware
TargetsRaspberry Pi 4 (Raspbian Buster Lite + RPI-Setup, read-only root), 12 x JX CLS6336 PWM servos driven by pigpiod software PWM
Repogithub.com/stanfordroboticsclub/StanfordQuadruped
No microcontroller firmware: run_robot.py (robot.service) runs the gait scheduler, stance/swing controllers and IK in Python and outputs PWM through pigpio. PS4 input comes from PupperCommand/PS4Joystick (joystick.service) over UDP. Gait parameters in pupper/Config.py.
- B
Calibrate
CalibrationOn a stand with the battery in: `rw`, `sudo systemctl stop robot`, `sudo pigpiod`, `python3 calibrate_servos.py` in StanfordQuadruped; align each joint to the prompted horizontal/vertical pose. The script writes the offsets; then `sudo systemctl start robot`.Log the output. It goes in your build report.
- C
First policy
No published policy in the package yet.
Try the policy in the browser sim before it touches hardware. Keep a hand near the power switch the first time a policy runs on the real robot.
Report your build
Moves Stanford Pupper (v1) toward L4 · BuiltA build report is the only thing that proves a package works. It raises the level, puts a point on the map, and tells the Foreman which steps to rewrite.
Level gate
Holds L1 · evidence, not confidence- L0Indexed
Known to exist. Atlas page only.
- 5 sources on record(met)
- L1Compiled
Package validates against the spec; every fact has a source.
- Build package compiled(met)
- 21 sources across robot and package(met)
- L2Sim-verified
Loads in browser and GPU sim, mass within tolerance of the BOM, holds a stand. Unlocks .training.
- No public URDF/MJCF(not met)
- Sim load, mass tolerance and stand are checked on .training(checked elsewhere)
- L3Sourced
Every BOM line resolves to a live offer in at least two regions. Unlocks the one-click cart.
- 0/34 BOM lines have offers in 2+ regions(not met)
- L4Built
At least one community build report with photos and bring-up logs. Unlocks Build it as the main action.
- 0 reviewed build reports(not met)
- Review feed unreachable at last refresh; count is registry-only(checked elsewhere)
- L5Certified
The robot's maintainer signs the package. Unlocks certified teams and kit sales.
- Maintainer signature not recorded(not met)
Levels are cumulative and set by the registry from reviewed evidence. This panel shows what can be measured from the package today.
Same robot, other verbs
- Know ithumanoidrobots.systems/stanford/pupper
- Build itpartialhumanoidrobot.build/stanford/pupperDocs and BOM are public, but both kit vendors named in the docs are gone and the BOM prices are from 2020. The power distribution board needs 2 oz copper (JLCPCB upstream).
- Train ithumanoidrobots.trainingNo public URDF or MJCF.
- Find its crewpartialhumanoidrobots.team/stanford/pupper
- See it on the mappartialhumanoidrobots.earth/stanford/pupper