🇬🇧 English 🇪🇸 Español 🇩🇪 Deutsch 🇫🇷 Français 🇮🇹 Italiano 🇮🇳 हिंदी (Hindi) 🇷🇺 Русский 🇷🇴 Română 🇯🇵 日本語 🇨🇳 中文 🇵🇹 Português
@blog: The XGO-Duck, a Robot That Can Walk

Turn a collection of printed parts and 15 serial bus servos into a robot duck you can build yourself. Follow the photos to assemble the body, calibrate the joints, and bring it to life with walking, head movements, and a moving beak.

by: ELECTRONOOBS on 2026-10-30

At Luwu Dynamics, we combine neural network inference on the UNO Q Linux processor with servo control and orientation feedback on its STM32. Start with the supplied models; you do not need to train a neural network for your first build. If you're looking to make a PCB for such a project and make it professional, consider using the services of PCBWAay and get high quality boards.

Lay out the parts

• Arduino UNO Q and matching expansion board — 1 each

• Feetech HD1910M servos and three wire cables — 15 each

• Printed structural parts and flexible TPU parts — 1 set

• 10 × 15 × 3 mm bearings — 2

• 16 × 22 × 4 mm bearings — 11

• M2 × 6 flat end countersunk self tapping screws — 200

• M2.3 × 8 flat end pan head self tapping screws — 6

• M3 × 16 round head machine screws — 4

• Battery pack and compatible charger — 1 each

These are the confirmed GitHub BOM purchase quantities, not the exact number installed. Screw counts in each assembly image apply locally to that step; do not add them together as a replacement for the BOM.

Tools: matching screwdrivers, a multimeter, ID labels, deburring tools, and a stable support for the robot. For printing your own parts, use a Bambu Lab printer with Bambu Studio.

Build order: print and check → start the runtime → assign servo IDs and center them → assemble the legs and feet → assemble the head and body → check wiring → calibrate → take the first steps.

01 Prepare the printed parts

Download the models from the hardware repository’s structure folder and keep the original filenames. Import them into Bambu Studio and select your actual printer, nozzle, and material.

A 2x_ prefix means print two copies. The left and right labels distinguish mirrored parts; tpu identifies flexible parts. Put rigid parts and TPU parts on separate print plates.

Printing reference from the official guide. This image does not specify the confirmed printer model or print settings.

Check the fit before printing everything

Print a servo mount and a bearing seat first. Remove supports and burrs, then test the fit. If a part does not fit correctly, resolve the printing or fit issue before producing the full set.

Once printing is complete, sort the parts into body, left leg, right leg, feet, and head and neck groups. Place similar parts side by side to avoid mixing up left and right components.

Checkpoint All required parts are printed, and the servo mounts and bearing seats fit correctly.

Print files: https://github.com/LuwuDynamics/xgoduck_hardware/tree/master/structure

02 Start the runtime on UNO Q

Connect the UNO Q to your network and start the duck runtime. Its web interface will be used to assign servo IDs and calibrate the assembled robot.

1. Install Arduino App Lab on your computer. Connect the UNO Q with a USB data cable, follow the official network setup, and note the board’s IP address.

2. In the runtime repository, choose Code → Download ZIP. Transfer the complete project to the UNO Q, including app.yaml, assets, python, sketch, tools, and the model files.

3. Prepare the dependencies described in the runtime README. In a Linux terminal on the UNO Q, enter the project directory and run:

python3 tools/prepare-bridge.py

sudo bash tools/router-2m.sh

arduino-app-cli app start "$PWD"

If the preparation script reports missing libraries, let App CLI resolve the project dependencies, then retry. The Bridge settings also affect other apps on the board; consult the README when switching apps.

Arduino App Lab reference showing the application entry screen. Your version may look different.

4. On a phone or computer on the same local network, open http://<UNO-Q-IP>:9527/ using the actual board IP. Keep Inference only selected; do not start walking yet.

Checkpoint The control page opens and its status updates. At this stage, the robot is not assembled, so all servos are not expected to be online.

03 Assign and label each servo ID

Assign IDs and center the servos before assembly. Check the board version, connector pinout, and power supply first. Connect only one servo at a time and disconnect power before changing servos.

1. Open Servo setup, enter setup mode, and click Scan all IDs. Select the detected servo and check its current ID.

2. Enter its planned ID in Change ID to, click Change ID, and confirm feedback can be read from the new ID.

3. Set Move to to 2047 and click Write on that row. Then set KP to 5 and KD to 20, and click Write on the parameter row.

4. Exit setup, disconnect power, attach an ID label, and repeat for the next servo. Finish all 15 before assembling the robot.

Leave a comment

Please login in order to comment.

Comments