Build package
Build openDog V3
James Bruton (XRobots) · Quadruped · orphaned · 2021
Large 3D-printed hobby quadruped using brushless motors with ODrive controllers and printed cycloidal gearboxes; CAD, code and BOM are published.
Build is partial: No written assembly guide and no STL set: the build is shown only in the YouTube playlist and printable parts must be exported from the STEP files. Repo inactive since Mar 2023; some BOM links are dead.
- Drawing
- /xrobots/opendog
- Maker
- James Bruton (XRobots)
- Country
- GB
- Package rev
- v0.1.0
- Level
- L1 Compiled
- Availability
- DIY
- Openness
- 70/100
- HW licence
- MIT
- Last checked
- 2026-09-25
- Actuators
- Brushless motors + ODrive, 3D-printed cycloidal drives, AS5047 encoders
One-person YouTube project; repo last pushed Mar 2023. City omitted (not public on GitHub). BOM.ods lists parts and links but no prices.
Configure
Saved in the URL. Share the link to share the build.Source
One cart across 11 vendors · prices in USD as listed44 lines · 1,794 parts · 17 without an offer in US · 25/44 lines sourced in 2+ regions (L3 gate)
| # | Part | Category | Qty | Unit | Line | Offer |
|---|---|---|---|---|---|---|
ODrive Robotics1 line · unpriced | ||||||
| 1 | ODrive v3.6 BLDC driver (2 axes each) electronics.odrive-v36 · MPN ODrive v3.6 | electronics | 6 | unpriced | — | ODrive Robotics |
DigiKey UK1 line · unpriced | ||||||
| 2 | AMS AS5047P motor encoder board (one per axis, absolute SPI mode) sensor.as5047p · MPN AS5047P-TS_EK_AB | sensor | 12 | unpriced | — | DigiKey UKships globallyUK retailer linked in BOM.ods |
PJRC2 lines · unpriced | ||||||
| 3 | Teensy 4.1 (dog controller) compute.teensy-41 · MPN Teensy 4.1 | compute | 1 | unpriced | — | PJRCVerified listing, not cited upstream |
| 4 | Teensy LC (remote controller) compute.teensy-lc · MPN Teensy LC | compute | 1 | unpriced | — | PJRCVerified listing, not cited upstream; PJRC marks Teensy LC discontinued / not recommended for new designs |
eBay UK8 lines · unpriced | ||||||
| 5 | 5 V / adjustable step-down regulator (set to 5 V for the Teensy and dog electronics) power.reg-5v | power | 1 | unpriced | — | eBay UKships globallyUK retailer linked in BOM.ods |
| 6 | 25-way D-sub connector, male cable.dsub25-male | cable | 1 | unpriced | — | eBay UKships globallyUK retailer linked in BOM.ods |
| 7 | 25-way D-sub connector, female cable.dsub25-female | cable | 1 | unpriced | — | eBay UKships globallyUK retailer linked in BOM.ods |
| 8 | Latching push switch (electronics power) power.electronics-switch | power | 1 | unpriced | — | eBay UKships globallyUK retailer linked in BOM.ods |
| 9 | 3-axis joystick (remote) electronics.joystick-3axis | electronics | 2 | unpriced | — | eBay UKships globallyUK retailer linked in BOM.ods |
| 10 | On/off toggle switch (remote) electronics.toggle-switch | electronics | 5 | unpriced | — | eBay UKships globallyUK retailer linked in BOM.ods |
| 11 | Carbon fibre tube, 28 mm OD, 1 mm+ wall, 1 m length (cut to CAD lengths; offcuts make the foot tubes) structure.cf-tube-28 | structure | 4 | unpriced | — | eBay UKships globallyUK retailer linked in BOM.ods |
| 12 | 4 mm steel bar cut to 31 mm (one per bearing mount around the outside of the cycloidal drives) structure.steel-pin-4x31 | structure | 132 | unpriced | — | eBay UKships globallyUK retailer linked in BOM.ods |
Cool Components1 line · unpriced | ||||||
| 13 | MPU6050 IMU (used only by the experimental_stability sketch) sensor.mpu6050 · MPN MPU6050 | sensor | 1 | unpriced | — | Cool Componentsships globallyLink in BOM.ods returned 404 on 2026-09-25 |
Amazon UK6 lines · unpriced | ||||||
| 14 | NRF24L01 2.4 GHz radio (one in the dog, one in the remote) electronics.nrf24l01 · MPN NRF24L01 | electronics | 2 | unpriced | — | Amazon UKships globallyUK retailer linked in BOM.ods |
| 15 | Latching push switch used as E-stop power.estop | power | 2 | unpriced | — | Amazon UKships globallyUK retailer linked in BOM.ods |
| 16 | Panel volt meter sensor.panel-voltmeter | sensor | 2 | unpriced | — | Amazon UKships globallyUK retailer linked in BOM.ods |
| 17 | 16x2 LCD with I2C backpack (dog status, address 0x27) electronics.lcd-i2c | electronics | 1 | unpriced | — | Amazon UKships globallyUK retailer linked in BOM.ods |
| 18 | Momentary push switch (remote) electronics.push-switch | electronics | 4 | unpriced | — | Amazon UKships globallyUK retailer linked in BOM.ods |
| 19 | Small 2S (or 3S) battery for the electronics, via the 5 V regulator power.lipo-2s | power | 1 | unpriced | — | Amazon UKships globallyUK retailer linked in BOM.ods |
CEF1 line · unpriced | ||||||
| 20 | 6-core foil-shielded signal cable for encoders (metres; 'make sure you have enough') cable.encoder-6core-shielded | cable | 6 | unpriced | — | CEFships globallyUK retailer linked in BOM.ods |
HobbyKing1 line · unpriced | ||||||
| 21 | 6S high-drain LiPo main battery (maker's is 60C; e.g. ZIPPY Compact 4000 mAh 6S 60C) power.lipo-6s | power | 1 | unpriced | — | HobbyKingExample item in BOM.ods |
Belting Online1 line · unpriced | ||||||
| 22 | HTD 5M pitch timing belt, 630 mm length (knee drive) structure.belt-htd5m-630 | structure | 4 | unpriced | — | Belting Onlineships globallyUK retailer linked in BOM.ods |
Simply Bearings3 lines · unpriced | ||||||
| 23 | Thin-section bearing 37 x 30 x 4 mm (one per leg and two per end bracket) structure.bearing-61706 · MPN 61706ZZ | structure | 8 | unpriced | — | Simply Bearingsships globallyUK retailer linked in BOM.ods |
| 24 | Ball bearing 22 x 8 x 7 mm (knee joints, 2 per leg) structure.bearing-608 · MPN 608ZZ | structure | 8 | unpriced | — | Simply Bearingsships globallyUK retailer linked in BOM.ods |
| 25 | Ball bearing 19 x 6 x 6 mm (knee belt idlers, 4 per leg) structure.bearing-626 · MPN 626ZZ | structure | 16 | unpriced | — | Simply Bearingsships globallyUK retailer linked in BOM.ods |
Nyfast2 lines · unpriced | ||||||
| 26 | Nylon washer, 4 mm ID (top and bottom of each drive pin, 32 per drive) other.nylon-washer-4mm | other | 384 | unpriced | — | Nyfastships globallyProduct family page from BOM.ods (variant fragment dropped) |
| 27 | Nylon spacer, 4 mm ID, 5 mm long (16 per drive) other.nylon-spacer-4x5 | other | 192 | unpriced | — | Nyfastships globallyProduct family page from BOM.ods (variant fragment dropped) |
No offer in this region17 lines · unpriced | ||||||
| 28 | 9225 90 KV brushless motor (HobbyKing/Turnigy Multistar 9225 90 KV or EaglePower 8308 stator / 9225 can 90 KV) actuator.bldc-9225-90kv | actuator | 12 | unpriced | — | Offers in CN only |
| 29 | LiPo balance charger suitable for the 6S pack (BOM.ods: 'requires suitable balance charger'; no model given) power.lipo-charger | power | 1 | unpriced | — | No offer found yet |
| 30 | Ball bearing 12 mm OD x 4 mm ID x 4 mm (cycloidal drive internals, 32 per drive) structure.bearing-12x4x4 | structure | 384 | unpriced | — | Offers in CN only |
| 31 | Ball bearing 32 mm OD x 20 mm ID x 7 mm (cam and cap, 3 per drive) structure.bearing-32x20x7 | structure | 36 | unpriced | — | Offers in CN only |
| 32 | Ball bearing 85 mm OD x 65 mm ID x 10 mm (drive top/bottom, 2 per drive) structure.bearing-85x65x10 | structure | 24 | unpriced | — | Offers in CN only |
| 33 | M4 countersunk screw, 12 mm thread (motor mounts, 4 per motor) fastener.m4x12-csk | fastener | 48 | unpriced | — | No offer found yet |
| 34 | M4 socket cap screw, 40 mm thread (cycloidal cam, 1 per drive) fastener.m4x40-socket | fastener | 12 | unpriced | — | No offer found yet |
| 35 | M4 nylon-insert locknut (cycloidal cam, 1 per drive) fastener.m4-locknut-cam | fastener | 12 | unpriced | — | No offer found yet |
| 36 | M4 nylon-insert locknut (cycloidal output, 5 per drive) fastener.m4-locknut-output | fastener | 60 | unpriced | — | No offer found yet |
| 37 | M4 washer (cycloidal output, 5 per drive) fastener.m4-washer | fastener | 60 | unpriced | — | No offer found yet |
| 38 | M3 screw, 15 mm thread (cycloidal cam, 4 per drive) fastener.m3x15 | fastener | 48 | unpriced | — | No offer found yet |
| 39 | M4 hex head bolt, 80 mm (cycloidal output, 5 per drive, cut to length) fastener.m4x80-hex | fastener | 60 | unpriced | — | No offer found yet |
| 40 | 2.9 mm x 18 mm countersunk Pozidriv self-tapping screw (drive cases, 22 per drive, front and back) fastener.screw-2-9x18-case | fastener | 132 | unpriced | — | No offer found yet |
| 41 | 2.9 mm x 18 mm countersunk Pozidriv screw (side-to-side axis mounts, 12 per drive for 4 drives) fastener.screw-2-9x18-axis | fastener | 48 | unpriced | — | No offer found yet |
| 42 | 2.9 mm x 18 mm countersunk Pozidriv screw (legs; BOM says '18 per leg' but lists 56) fastener.screw-2-9x18-leg | fastener | 56 | unpriced | — | No offer found yet |
| 43 | Platinum-cure silicone rubber, Shore 25A, with pigment (cast feet) other.silicone-25a | other | 1 | unpriced | — | No offer found yet |
| 44 | Adhesive to glue the carbon foot tube into the lower leg and foot insert (type not specified) other.epoxy | other | 1 | unpriced | — | No offer found yet |
| Cart total · US | 1,794 | $0.00 | 44 lines unpriced, not in total | |||
Fabricate
Planned for a 256 mm bed- Fabricated parts
- 92
- 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 |
|---|---|---|---|---|---|---|
Cycloidal disk 1 ('Planetary disk1'), toleranced printed.planetary-disk1 | FDM | PLA | 12 | — | — | PLA, 4 perimeters, 30-40% infill (cycloidal drive internals, per README) |
Cycloidal disk 2 ('Planetary disk2'), toleranced printed.planetary-disk2 | FDM | PLA | 12 | — | — | PLA, 4 perimeters, 30-40% infill (cycloidal drive internals, per README) |
Cam printed.cam | FDM | PLA | 12 | — | — | PLA, 4 perimeters, 30-40% infill (cycloidal drive internals, per README) |
Cam cap printed.cam-cap | FDM | PLA | 12 | — | — | PLA, 4 perimeters, 30-40% infill (cycloidal drive internals, per README) |
Top cap printed.top-cap | FDM | PLA | 12 | — | — | PLA, 4 perimeters, 30-40% infill (cycloidal drive internals, per README) |
Bottom cap printed.bottom-cap | FDM | PLA | 12 | — | — | PLA, 4 perimeters, 30-40% infill (cycloidal drive internals, per README) |
Upper mount printed.upper-mount | FDM | PLA | 12 | — | — | PLA, 4 perimeters, 30-40% infill (cycloidal drive internals, per README) |
All other printed parts (drive cases, legs, knee pulleys and idlers, body ends, electronics lid, stand): extract the bodies from 'openDog V3.stp' (inside 'openDog V3.zip'); no per-part list or STL set is published printed.structure | FDM | PLA | 1 | — | — | PLA, 0.3 mm layers, 3 perimeters, ~15% infill (larger parts, per README) |
Foot mould set (mouldA, mouldB, 2 sides, brace) for casting silicone feet printed.foot-mould | FDM | PLA | 1 | — | — | PLA, 0.3 mm layers, 3 perimeters, ~15% infill (larger parts, per README) |
Foot insert (cast into each silicone foot) printed.foot-insert | FDM | PLA | 4 | — | — | PLA, 0.3 mm layers, 3 perimeters, ~15% infill (larger parts, per README) |
Remote base and lid (Remote.stp) printed.remote-case | FDM | PLA | 1 | — | — | PLA, 0.3 mm layers, 3 perimeters, ~15% infill (larger parts, per README) |
Knee jig (openDogV3_jig_knee.stp; purpose not documented in the repo) printed.knee-jig | FDM | PLA | 1 | — | — | PLA, 0.3 mm layers, 3 perimeters, ~15% infill (larger parts, per README) |
Assemble
Every step ends in a check- Steps
- 14
- Subassemblies
- 7
- Hands-on time (sum)
- —
- Critical path
- —
- Your progress · this device
- —
14 steps have no time estimate; times above are lower bounds.
Steps, in build order
- Preparation01
Watch the build videos and open the CAD
There is no written assembly guide. Watch the openDog V3 playlist linked from the README and open 'openDog V3.stp' (unzip 'CAD/openDog V3.zip', ~35 MB) alongside it. Also open 'openDog V3_internals_toleranced.stp' for the printable cycloidal internals, 'openDog V3_foot.stp' for the foot mould and 'Remote.stp'. Export each printable body to STL yourself.
CHECKYou have STLs for every printed body you need and know from the video how each drive, leg and the body go together.- Parts in
- —
- Tools
- STEP-capable CAD (Fusion 360, FreeCAD, Onshape import)
- Torque
- —
- Time
- —
- After
- Start
- Source
- youtube.com
- Fabrication02
Cut tubes, pins and output bolts
Cut the four 1 m carbon tubes to the lengths in the CAD; the offcuts become the foot tubes. Cut 132 pieces of 4 mm steel bar to 31 mm. Cut the 60 M4 x 80 mm hex bolts to the length the drive output needs (from the CAD). Carbon dust is an irritant: cut wet or with extraction and a mask.
CHECKLeg tubes match CAD length; 132 pins are 31 mm; output bolts are the same length.- Parts in
- Carbon fibre tube, 28 mm OD, 1 mm+ wall, 1 m length (cut to CAD lengths; offcuts make the foot tubes)structure.cf-tube-28
- 4 mm steel bar cut to 31 mm (one per bearing mount around the outside of the cycloidal drives)structure.steel-pin-4x31
- M4 hex head bolt, 80 mm (cycloidal output, 5 per drive, cut to length)fastener.m4x80-hex
- Tools
- Saw for carbon fibre (with dust extraction and mask), Hacksaw or cut-off tool, Calipers
- Torque
- —
- Time
- —
- After
- Start
- Source
- github.com
- 03
Print the drives, structure, feet mould and remote
All parts are PLA. Large parts: 0.3 mm layers, 3 perimeters, around 15% infill. Cycloidal drive internals: 4 perimeters and 30-40% infill. Use the toleranced internals file for the drive parts (12 sets).
CHECK12 complete sets of cycloidal internals plus all structure parts; pin and bearing bores accept the 4 mm pins and bearings without forcing.- Parts in
- Cycloidal disk 1 ('Planetary disk1'), tolerancedprinted.planetary-disk1
- Cycloidal disk 2 ('Planetary disk2'), tolerancedprinted.planetary-disk2
- Camprinted.cam
- Cam capprinted.cam-cap
- Top capprinted.top-cap
- Bottom capprinted.bottom-cap
- Upper mountprinted.upper-mount
- All other printed parts (drive cases, legs, knee pulleys and idlers, body ends, electronics lid, stand): extract the bodies from 'openDog V3.stp' (inside 'openDog V3.zip'); no per-part list or STL set is publishedprinted.structure
- Foot mould set (mouldA, mouldB, 2 sides, brace) for casting silicone feetprinted.foot-mould
- Foot insert (cast into each silicone foot)printed.foot-insert
- Remote base and lid (Remote.stp)printed.remote-case
- Knee jig (openDogV3_jig_knee.stp; purpose not documented in the repo)printed.knee-jig
- Tools
- FDM printer
- Torque
- —
- Time
- —
- After
- 01
- Source
- github.com
- Electronics04
Wire the Teensy 4.1, radio, LCD and control power
From the code: ODrive 1-6 on Teensy Serial1-Serial6 at 115200 baud; NRF24L01 on SPI with CE pin 9 and CSN pin 10; 16x2 I2C LCD at 0x27; MPU6050 on I2C (experimental sketch only). Power the Teensy and radio from the 2S battery through the latching switch and the regulator set to 5 V. Use the 25-way D-sub pair as the connector between body electronics and the rest (per BOM; pinout not published).
CHECKRegulator output reads 5.0 V before the Teensy is connected; the LCD shows 'openDog V3' when the firmware runs.- Parts in
- Teensy 4.1 (dog controller)compute.teensy-41
- NRF24L01 2.4 GHz radio (one in the dog, one in the remote)electronics.nrf24l01
- 16x2 LCD with I2C backpack (dog status, address 0x27)electronics.lcd-i2c
- MPU6050 IMU (used only by the experimental_stability sketch)sensor.mpu6050
- 5 V / adjustable step-down regulator (set to 5 V for the Teensy and dog electronics)power.reg-5v
- Small 2S (or 3S) battery for the electronics, via the 5 V regulatorpower.lipo-2s
- Latching push switch (electronics power)power.electronics-switch
- 25-way D-sub connector, malecable.dsub25-male
- 25-way D-sub connector, femalecable.dsub25-female
- Panel volt metersensor.panel-voltmeter
- Tools
- Soldering iron, Multimeter
- Torque
- —
- Time
- —
- After
- 01
- Source
- github.com
- Drives05
Assemble twelve cycloidal drives
Per drive, as the BOM notes describe (sequence from the CAD and videos): 32 small 12x4x4 bearings on the 4 mm pins, each pin with a nylon washer top and bottom and 16 nylon spacers; 11 steel pins around the outside; 3 cam/cap bearings (32x20x7); 2 large 85x65x10 bearings top and bottom; the cam on an M4 x 40 socket screw with a locknut and 4 M3 x 15 screws; 5 cut M4 output bolts with washers and locknuts; motor on 4 M4 x 12 countersunk screws; case closed with 22 x 2.9 x 18 mm screws. The code assumes a 10:1 reduction (one motor turn = 36 degrees of output).
CHECKEach drive back-drives smoothly by hand through a full output turn with no binding or knocking; 10 motor turns give one output turn.- Parts in
- 9225 90 KV brushless motor (HobbyKing/Turnigy Multistar 9225 90 KV or EaglePower 8308 stator / 9225 can 90 KV)actuator.bldc-9225-90kv
- Ball bearing 12 mm OD x 4 mm ID x 4 mm (cycloidal drive internals, 32 per drive)structure.bearing-12x4x4
- Nylon washer, 4 mm ID (top and bottom of each drive pin, 32 per drive)other.nylon-washer-4mm
- Nylon spacer, 4 mm ID, 5 mm long (16 per drive)other.nylon-spacer-4x5
- 4 mm steel bar cut to 31 mm (one per bearing mount around the outside of the cycloidal drives)structure.steel-pin-4x31
- Ball bearing 32 mm OD x 20 mm ID x 7 mm (cam and cap, 3 per drive)structure.bearing-32x20x7
- Ball bearing 85 mm OD x 65 mm ID x 10 mm (drive top/bottom, 2 per drive)structure.bearing-85x65x10
- M4 countersunk screw, 12 mm thread (motor mounts, 4 per motor)fastener.m4x12-csk
- M4 socket cap screw, 40 mm thread (cycloidal cam, 1 per drive)fastener.m4x40-socket
- M4 nylon-insert locknut (cycloidal cam, 1 per drive)fastener.m4-locknut-cam
- M3 screw, 15 mm thread (cycloidal cam, 4 per drive)fastener.m3x15
- M4 hex head bolt, 80 mm (cycloidal output, 5 per drive, cut to length)fastener.m4x80-hex
- M4 washer (cycloidal output, 5 per drive)fastener.m4-washer
- M4 nylon-insert locknut (cycloidal output, 5 per drive)fastener.m4-locknut-output
- 2.9 mm x 18 mm countersunk Pozidriv self-tapping screw (drive cases, 22 per drive, front and back)fastener.screw-2-9x18-case
- Cycloidal disk 1 ('Planetary disk1'), tolerancedprinted.planetary-disk1
- Cycloidal disk 2 ('Planetary disk2'), tolerancedprinted.planetary-disk2
- Camprinted.cam
- Cam capprinted.cam-cap
- Top capprinted.top-cap
- Bottom capprinted.bottom-cap
- Upper mountprinted.upper-mount
- All other printed parts (drive cases, legs, knee pulleys and idlers, body ends, electronics lid, stand): extract the bodies from 'openDog V3.stp' (inside 'openDog V3.zip'); no per-part list or STL set is publishedprinted.structure
- Tools
- Hex keys, Pozidriv screwdriver
- Torque
- —
- Time
- —
- Source
- github.com
- Legs06
Cast the silicone feet
Assemble the printed mould (mouldA, mouldB, sides, brace) around a foot insert and cast Shore 25A platinum-cure silicone with pigment. Glue the carbon foot tube into the lower leg and the foot insert so it cannot rotate.
CHECKFour cured feet with the insert fully embedded; the foot tube does not turn in the insert or the lower leg.- Parts in
- Foot mould set (mouldA, mouldB, 2 sides, brace) for casting silicone feetprinted.foot-mould
- Foot insert (cast into each silicone foot)printed.foot-insert
- Platinum-cure silicone rubber, Shore 25A, with pigment (cast feet)other.silicone-25a
- Carbon fibre tube, 28 mm OD, 1 mm+ wall, 1 m length (cut to CAD lengths; offcuts make the foot tubes)structure.cf-tube-28
- Adhesive to glue the carbon foot tube into the lower leg and foot insert (type not specified)other.epoxy
- Tools
- Mixing cups and scale, Mould release
- Torque
- —
- Time
- —
- Source
- github.com
- Remote07
Build the remote
From Remote.ino: buttons and switches on Teensy LC pins 0-8 with internal pull-ups (buttons on 0-3, toggles on 4-8), joystick axes on A1, A2, A4-A7, NRF24L01 on SPI, and an I2C LCD at 0x27 (20x4 in the code). Include the 'reverse' switch and the motor-enable switch the README describes. The remote's battery and LCD are not in the BOM.
CHECKWith Remote.ino running the LCD shows 'Everything Remote' and each switch/axis changes the transmitted values.- Parts in
- Teensy LC (remote controller)compute.teensy-lc
- NRF24L01 2.4 GHz radio (one in the dog, one in the remote)electronics.nrf24l01
- 3-axis joystick (remote)electronics.joystick-3axis
- On/off toggle switch (remote)electronics.toggle-switch
- Momentary push switch (remote)electronics.push-switch
- Remote base and lid (Remote.stp)printed.remote-case
- Tools
- Soldering iron
- Torque
- —
- Time
- —
- After
- 03
- Source
- github.com
- Drives08
Fit AS5047P encoders and run shielded cables
Mount one AS5047P on each motor and wire it to its ODrive with 6-core foil-shielded cable: SCK, MISO, MOSI, GND and 3.3 V to the ODrive pins of the same name, chip select to a free GPIO (GPIO 1 and 2 are the UART used by the Teensy).
CHECKEach encoder has continuity on every conductor to its ODrive header and the shield is not shorted to a signal.- Parts in
- AMS AS5047P motor encoder board (one per axis, absolute SPI mode)sensor.as5047p
- 6-core foil-shielded signal cable for encoders (metres; 'make sure you have enough')cable.encoder-6core-shielded
- Tools
- Soldering iron
- Torque
- —
- Time
- —
- After
- 05
- Source
- docs.odriverobotics.com
- Legs09
Assemble the legs and knee belt drives
Per leg (from the CAD and videos): two 608 knee bearings, four 626 belt-idler bearings, one 37x30x4 thin-section bearing (plus two in each end bracket), the 630 mm HTD 5M knee belt, carbon tubes and the leg screws. Mount the hip drives on the side-to-side axis with 12 screws per drive.
CHECKEach knee moves through its range by turning the knee drive by hand with the belt tensioned and not skipping; hips swing without rubbing.- Parts in
- HTD 5M pitch timing belt, 630 mm length (knee drive)structure.belt-htd5m-630
- Ball bearing 22 x 8 x 7 mm (knee joints, 2 per leg)structure.bearing-608
- Ball bearing 19 x 6 x 6 mm (knee belt idlers, 4 per leg)structure.bearing-626
- Thin-section bearing 37 x 30 x 4 mm (one per leg and two per end bracket)structure.bearing-61706
- Carbon fibre tube, 28 mm OD, 1 mm+ wall, 1 m length (cut to CAD lengths; offcuts make the foot tubes)structure.cf-tube-28
- 2.9 mm x 18 mm countersunk Pozidriv screw (legs; BOM says '18 per leg' but lists 56)fastener.screw-2-9x18-leg
- 2.9 mm x 18 mm countersunk Pozidriv screw (side-to-side axis mounts, 12 per drive for 4 drives)fastener.screw-2-9x18-axis
- All other printed parts (drive cases, legs, knee pulleys and idlers, body ends, electronics lid, stand): extract the bodies from 'openDog V3.stp' (inside 'openDog V3.zip'); no per-part list or STL set is publishedprinted.structure
- Tools
- Pozidriv screwdriver, Hex keys
- Torque
- —
- Time
- —
- Source
- github.com
- Bring-up10
Flash the dog and remote firmware
Open Code/openDogV3/openDogV3.ino (with kinematics.ino, ODriveInit.ino, thresholdSticks.ino in the same folder) and upload to the Teensy 4.1; upload Code/Remote/Remote.ino to the Teensy LC. The two sketches share a data struct that must match exactly.
CHECKThe dog LCD shows the remote connection state and 'S:' mode number changing when the remote's menu buttons are pressed.- Parts in
- Teensy 4.1 (dog controller)compute.teensy-41
- Teensy LC (remote controller)compute.teensy-lc
- Tools
- Arduino IDE with Teensyduino, Libraries: ODriveArduino, RF24, LiquidCrystal_I2C, Ramp (and I2Cdev/MPU6050 for the experimental sketch)
- Torque
- —
- Time
- —
- Source
- github.com
- Electronics11
Wire the 6S main battery, E-stops and ODrives
Safety · human-verified requiredConnect the six ODrives (hips on ODrive 1 and 4; knees and shoulders on 2, 3, 5, 6 per the offsets in the code) and their motors to the 6S high-drain pack through the latching E-stop switch(es), with a volt meter on each battery circuit. The pack can source very large currents: size wire and connectors for it, insulate every joint, check polarity before first connection, and charge only with a balance charger. Wire gauge, fusing and the exact E-stop placement are not documented upstream.
CHECKWith the E-stop open no ODrive powers up; with it closed every ODrive LED comes on and the volt meter shows pack voltage.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
- 6S high-drain LiPo main battery (maker's is 60C; e.g. ZIPPY Compact 4000 mAh 6S 60C)power.lipo-6s
- LiPo balance charger suitable for the 6S pack (BOM.ods: 'requires suitable balance charger'; no model given)power.lipo-charger
- Latching push switch used as E-stoppower.estop
- Panel volt metersensor.panel-voltmeter
- ODrive v3.6 BLDC driver (2 axes each)electronics.odrive-v36
- 9225 90 KV brushless motor (HobbyKing/Turnigy Multistar 9225 90 KV or EaglePower 8308 stator / 9225 can 90 KV)actuator.bldc-9225-90kv
- Tools
- Soldering iron, Multimeter, Heavy-gauge wire and connectors (not specified upstream)
- Torque
- —
- Time
- —
- Source
- github.com
- Bring-up12
Configure and calibrate each ODrive axis
Safety · human-verified requiredLegs off the ground or on the stand. For each axis in odrivetool, following the ODrive docs the README points to: set motor parameters and run motor calibration; set `axis.encoder.config.abs_spi_cs_gpio_pin = <cs pin>`, `axis.encoder.config.mode = ENCODER_MODE_SPI_ABS_AMS`, `axis.encoder.config.cpr = 2**14`, `odrv.save_configuration()`, `odrv.reboot()`; then `axis.requested_state = AXIS_STATE_ENCODER_OFFSET_CALIBRATION`, `axis.encoder.config.pre_calibrated = True`, `odrv.save_configuration()`. Per the README, `import math` and set `controller.config.vel_limit` and `vel_limit_tolerance` to `math.inf` so the motors do not disarm. Calibration spins the motors: keep hands out of the drives.
CHECKEvery axis enters closed-loop control after a reboot without re-calibrating, and reported positions do not jump when powered off and on.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
- ODrive v3.6 BLDC driver (2 axes each)electronics.odrive-v36
- AMS AS5047P motor encoder board (one per axis, absolute SPI mode)sensor.as5047p
- Tools
- odrivetool (ODrive v3.x firmware, 0.5.x docs), USB cable
- Torque
- —
- Time
- —
- After
- 11
- Source
- github.com
- 13
Set joint offsets and first motion on the stand
Safety · human-verified requiredDog on its stand, motor-enable switch on, E-stop in reach. Menu 1 puts motors in closed loop (ODriveInit sets `motor.config.current_lim` to 20 A per axis); 2 moves legs out to clear the stand stirrups by 1-2 mm; 3 puts shoulders and knees at 45 degrees. Adjust the `offSet10` ... `offSet61` variables (turns; 1 turn = 36 degrees at the output) until mode 3 matches the CAD pose, then re-flash. Menu 10 returns the feet to the stirrups. Large leg motions happen quickly: stand clear.
CHECKMode 3 holds all twelve joints at the CAD default pose; modes 2 and 10 clear and re-seat the stirrups without contact.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
- —
- Tools
- —
- Torque
- —
- Time
- —
- Source
- github.com
- 14
Raise gains, IK demo and walking
Safety · human-verified requiredMenu 4 raises position, velocity and integrator gains (knee/shoulder 20, hips 60, velocity 0.1 in the code); 5 is the inverse-kinematics demo for six axes of translation and rotation; 6 is walking. The remote's reverse switch flips four axes to walk backwards. The dog stops if the radio link drops for 500 ms. Start in open space with the E-stop held by a second person.
CHECKIn mode 5 the body follows the sticks smoothly; in mode 6 the dog steps in place and walks forward/back without a leg faulting.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
- —
- Tools
- —
- Torque
- —
- Time
- —
- After
- 13
- Source
- github.com
Progress is stored in this browser only (localStorage). Nothing is sent anywhere.
Bring-up
Flash · calibrate · first policy- A
Flash firmware
TargetsTeensy 4.1 (openDogV3.ino, Arduino/Teensyduino), Teensy LC (Remote.ino), ODrive v3.6 x6 (stock firmware, configured with odrivetool)
Repogithub.com/XRobots/openDogV3
Teensy talks to ODrives over ASCII serial (Serial1-6, 115200) with the ODriveArduino library; remote link is NRF24L01 (addresses '00001'/'00002'). Code/openDogV3_experimental_stability adds MPU6050 IMU feedback. No ROS, URDF or simulation is published.
- B
Calibrate
CalibrationPer ODrive axis: motor calibration, AS5047P absolute SPI setup (`encoder.config.mode = ENCODER_MODE_SPI_ABS_AMS`, `cpr = 2**14`, CS pin), `AXIS_STATE_ENCODER_OFFSET_CALIBRATION`, `pre_calibrated = True`, save; vel_limit and vel_limit_tolerance = math.inf. Then tune the offSetXY constants in openDogV3.ino until menu mode 3 puts every joint at 45 degrees.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 openDog V3 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.
- 4 sources on record(met)
- L1Compiled
Package validates against the spec; every fact has a source.
- Build package compiled(met)
- 16 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/44 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.
- Orphaned: no maintainer left to sign(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/xrobots/opendog
- Build itpartialhumanoidrobot.build/xrobots/opendogNo written assembly guide and no STL set: the build is shown only in the YouTube playlist and printable parts must be exported from the STEP files. Repo inactive since Mar 2023; some BOM links are dead.
- Train ithumanoidrobots.trainingNo public URDF or MJCF.
- Find its crewpartialhumanoidrobots.team/xrobots/opendog
- See it on the mappartialhumanoidrobots.earth/xrobots/opendog