About these instructions
An independent walkthrough of AI-FanGe’s tutorial, with assembly detail from wslengzhicheng and electrical limits from ROBOTIS. Sources checked October 30, 2026. The author provides a build video and robot demonstrations; this site has reviewed the documents, not assembled or tested this robot. Some supplementary wiring photos remain placeholders, so use the actual board labels and manufacturer diagrams.
1. Prepare one matching set of parts
- Gather a Pi Zero 2 W, OpenRB-150, fourteen XL330-M288-T servos, BNO080/085/086 IMU, a microSD card of at least 16 GB, a switch and suitable power supplies. The mouth servo is optional ID 15.
- Prepare a reader, USB data cable, multimeter, small screwdrivers, M2/M2.5 fasteners and insulated wiring. Check the exact supply and connector ratings before buying; HD1910 parts and images belong to a different route.
Before continuing
Your inventory identifies every board, servo, connector and supply.
2. Print and sort the structure
- Download the root-level microduck3D打印.3mf from the pinned source, open it in your slicer and inspect every plate and part. Use the author’s video for orientation and PLA as the documented starting material.
- The current README still mentions microduck/cad, but that directory was deleted. Use the actual 3MF link below; simulation meshes are not a replacement print kit. Remove supports and test-fit a servo before printing the whole set.
Before continuing
Left/right parts and fasteners are separated, and holes fit without forcing.
3. Set IDs one servo at a time
- Connect only one unassembled servo to a compatible powered interface. Use Dynamixel Wizard 2.0, Protocol 2.0; scan the actual baud rate, assign its ID, then set 1 Mbps and Return Delay Time 0. Rescan at the new rate and label the case.
- Use IDs 1–5 for right ankle, knee, hip pitch, hip roll, hip yaw; 6–10 for the same left-side sequence; 11 head pitch, 12 neck pitch, 13 head yaw, 14 head roll. Preserve protective shutdown settings; diagnose voltage faults rather than suppressing them.
Before continuing
Every ID is unique and all fourteen devices respond at 1 Mbps.
4. Center the servos and fit the joints
- With the bare shaft unobstructed, use Wizard to move to center, then disable torque and disconnect power. Preserve this shaft position while aligning the horn with the illustrated mechanical reference; do this before closing the structure.
- Fit the opposite idler supports and the correct screws. A horn screw must not penetrate into the gear mechanism; do not clamp an idler so tightly that it binds. Test each joint by hand with power disconnected.
Before continuing
Each joint is aligned and turns freely within its mechanical travel.
5. Assemble feet, legs and trunk
- Build each foot and ankle first: right ID 1, left ID 6. Add knee IDs 2/7 and hip-pitch IDs 3/8, then hip-roll 4/9 and hip-yaw 5/10. Left and right refer to the robot’s own sides.
- Join the hips to the trunk and mount the battery structure. Route wires through the intended channels before tightening covers; move each leg through its allowed travel and check for pinching. Use the linked video and assembly chapter for screw placement.
Before continuing
Both legs have the correct ID order, and no wire is stretched or trapped.
6. Assemble the neck, head and electronics
- Match head/neck joints 11–14 to the author’s exploded view, then mount the Pi, OpenRB and IMU. Keep the documented IMU mounting orientation; do not copy a rotation from a different robot.
- Leave access to USB, the microSD card and the switch. Secure boards on the intended mounts, insulate exposed contacts and verify head movement before closing the shell.
Before continuing
Boards are secure and the head can move without pulling cables.
7. Wire and measure the power rails
- Disconnect the battery. Connect Pi to OpenRB with a USB data cable; connect the XL330 bus and branches using the manufacturer pinout. Supply the Pi with regulated 5 V and verify the shared ground and OpenRB power-source selection.
- ROBOTIS specifies 3.7–6.0 V for XL330, recommending 5.0 V. Measure the actual maximum supply, including a fully charged battery; a nominal 6 V label is not enough. Never apply a raw 2S pack to XL330 or the Pi. Leave voltage protection enabled.
Before continuing
Polarity, continuity and both measured rail voltages are correct before connecting loads.
8. Connect the IMU and inspect the wiring
- For the documented BNO08x module, connect the correctly rated supply to the Pi 3.3 V rail, GND to ground, SDA to GPIO2 / physical pin 3, and SCL to GPIO3 / physical pin 5. Verify VIN versus 3V3 markings on your module.
- Keep I²C wiring short, secure the IMU in the documented orientation and inspect every solder joint. Board photographs marked as placeholders cannot establish pin order. Leave the shell accessible for the first checks.
Before continuing
No exposed short circuits, reversed connectors or loose sensor board remain.
9. Verify and flash the SD image
- Download microduck.img.xz from the author’s image.v1 release. Compute SHA-256 and compare it with the release value shown below; this is the publisher’s checksum, not a claim that this site booted the image.
- In Raspberry Pi Imager choose Pi Zero 2 W, Use custom, the downloaded image and the correct microSD card. Decline OS customization for this image, write and verify, then safely eject. Writing erases the selected card.
SHA-256: 096885dc32fb5b1db2ad69ba6bea868d8ab988f2b47c0d884eb63ba0dfdcb5c4shasum -a 256 microduck.img.xzBefore continuing
The checksum matches and Imager verification succeeds.
10. Configure 2.4 GHz Wi-Fi and log in
- Reinsert the card and edit bootfs/network-config with your country code, Wi-Fi name and password, preserving YAML indentation. This Pi uses 2.4 GHz; the KISS route’s 5 GHz advice does not apply. A display/keyboard and nmcli are the documented alternative.
- Boot and wait 1–3 minutes for initialization. Connect to microduck.local or find its IP in the router. The image documents user / password for first login; immediately run passwd. Keep the computer on the same network.
ssh user@microduck.local
passwdBefore continuing
SSH works with your new password and the Pi has a network address.
11. Check the bus, orientation and model
- Before starting motion, verify that the OpenRB serial device exists and that all intended IDs respond. With the controller stopped, inspect the IMU on I²C bus 1; BNO08x commonly appears at 0x4a or 0x4b. An address alone does not prove correct orientation.
- Compare actual assembly with the author’s IMU_MOUNT_QUAT and joint offsets, especially the knees. Use the matching image’s walk.onnx. A reversed joint, wrong IMU orientation or missing ID must be corrected before enabling torque.
ls /dev/serial/by-id/
i2cdetect -y 1Before continuing
Servo identities, mechanical alignment, sensor orientation and model all match this route.
12. Start, stop and record the first walk
- Support the robot on a clear floor before running the command below: startup enables torque and moves toward neutral. Try a short v toggle and small arrow-key inputs only after the pose is correct; x zeros speed, q stops the loop, and i toggles IMU information.
- If needed, run src/stop.py from a second SSH session. Shut down with sudo shutdown -h now and wait for shutdown before removing power. The image’s gamepad mode turns Wi-Fi off while the controller is connected; disconnect it to restore SSH. Record the image, IDs, offsets and result.
Start on the Pi
cd ~/microduck
PYTHONPATH=src .venv/bin/python src/main.pyStop from a second SSH session
cd ~/microduck
PYTHONPATH=src .venv/bin/python src/stop.pyShut down the Pi
sudo shutdown -h nowBefore continuing
You can stop reliably; unexpected motion, missing feedback or power resets are resolved before another trial.
Continue your build
What would you like to understand next?
Keep the source, your environment and your observations together.