BLD-120MM-PACK Complete Robot Build Instructions

Here are the most up-to-date and the most complete instructions to build, set up, bring up and operate Maker’s Pet BLD-120MM-PACK robot build pack with BDC-30P driver board.
Robot Assembly Instructions
PC Software Setup Instructions
- Robot firmware download
Windows PC software download:
- Arduino IDE
- Microsoft WSL Installation instructions
- Docker for Windows
- X server, set Display number to 0 (zero)
- PowerShell
Linux PC software download:
- TODO
Robot Bring-up Instructions
- config.yaml for BLD-120MM-PACK with a BDC-30P driver board. BDC-30P accepts ESP32 DOIT DevKit v1 dev board.
Robot Operation Instructions
TODO 2/2025
FAQ and Troubleshooting
Where to Get Technical support
How do I Troubleshoot the Robot
Watch Maker’s Pet YouTube videos for troubleshooting tips.
- Debug ESP32-related issues using the Arduino Serial Monitor.
- Connect ESP32 dev board to your PC
- Open the Arduino Serial Monitor.
- Make sure your Serial Monitor baud rate is set to 115200.
- Inspect the Serial Monitor output.
- Press the ESP32 reset (EN) button to reboot ESP32.
- Debug ROS2-related issues using ROS2 tools
- Inspect the command shell output.
- Read ROS2 documentation.
docker run Fails on Windows PC
1
2
3
4
5
PowerShell 7.5.0
PS C:\Users\ilya> docker run --name makerspet -it --rm -p 8888:8888/udp -p 4430:4430/tcp -e DISPLAY=host.docker.internal:0.0 -e LIBGL_ALWAYS_INDIRECT=0 kaiaai/kaiaai:iron
docker: error during connect: Head "http://%2F%2F.%2Fpipe%2FdockerDesktopLinuxEngine/_ping": open //./pipe/dockerDesktopLinuxEngine: The system cannot find the file specified.
See 'docker run --help'.
PS C:\Users\ilya>
Solution - looks like your Docker engine is not running. Launch Docker Desktop on your Windows PC.
1
2
3
4
PowerShell 7.5.0
PS C:\Users\ilya> docker run --name makerspet -it --rm -p 8888:8888/udp -p 4430:4430/tcp -e DISPLAY=host.docker.internal:0.0 -e LIBGL_ALWAYS_INDIRECT=0 kaiaai/kaiaai:iron
docker: Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:4430 -> 0.0.0.0:0: listen tcp 0.0.0.0:4430: bind: An attempt was made to access a socket in a way forbidden by its access permissions.
PS C:\Users\ilya>
Solution - try rebooting your Windows PC.
docker pull Fails on Windows PC
1
2
3
PS C:\Users\ilya> docker pull kaiaai/kaiaai:iron
error during connect: Post "http://%2F%2F.%2Fpipe%2FdockerDesktopLinuxEngine/v1.47/images/create?fromImage=kaiaai%2Fkaiaai&tag=iron": open //./pipe/dockerDesktopLinuxEngine: The system cannot find the file specified.
PS C:\Users\ilya>
Solution - looks like your Docker engine is not running. Launch Docker Desktop on your Windows PC.
Windows WSL2 Install Fails
ROS2 GUI not Showing on Windows PC
Make sure you have launched the X server on your Windows PC.
Robot’s Motor(s) Appear to Malfunction
- Make sure the battery power switch is ON.
- Make sure the battery is connected to the board and the batteries are not low.
- Check that the power LED on the ESP32 board lights up when the battery power switch is ON.
- Common issue: double check motor connections
- The motor connector housing can slide off, towards the motor’s magnet. Pull the connector housing carefully back into place.
- Make sure the motor wires are connected to the correct board screw terminals.
- The screw terminals connections can fail, e.g. wire breaks off, metal conductors fail to make a contact, etc. Follow instructions in the assembly video to make reliable wire connections.
- Check the green LED light on the motor. The green LED is OFF means the motor’s encoder is not getting its power. For example, because the battery is disconnected, the power switch is off, the motor-to-cable connection failed, the cable-to-board connection failed, etc.
Run the teleop app (ROS2), press the w
key to make the robot’s motor rotate forward.
- If a motor does not move
- Check for cables accidentally blocking the rotation of the motor’s encoder magnet
- Check that neither of the motors is somehow mechanically stalled
- Check the motor M1 and M2 are connected to the board reliably
- Check that the batteries are fresh
- If one motor works, but the other one does not
- try swapping motors, see the assembly video
- If a motor keeps rotating full speed in one direction only,
no matter what the teleop command is (forward, backward, stop, etc.)
- Try swapping the motor’s ENCA and ENCB encoder wires.
- Check if both encoder wires are connected reliably.
- If a motor rotates at full speed only, but changes its direction on teleop commands
- Check if one of the encoder wires has a bad connection (to the board and/or to the motor).
- If a motor rotates in the opposite direction, but otherwise responds correctly
to the teleop commands
- Try swapping the motor’s ENCA and ENCB encoder wires. Next, swap the motor’s M1 and M2 wires.
- If a motor rotates “unevenly”
- Check for flaky wire connections
- If your are using third-party motor, i.e. not purchased at Maker’s Pet, you may need to tune your motors’ PID coefficient in the config.yaml driver board file.
ESP32 Upload Fails
Your sketch compiles successfully, but Arduino IDE shows this error:
1
2
3
4
5
6
7
8
esptool.py v4.5.3
Serial port COM3
Connecting......................................
A fatal error occurred: Failed to connect to ESP32: No serial data received.
For troubleshooting steps visit: Troubleshooting - ESP32 - — esptool.py latest documentation
The selected serial port For troubleshooting steps visit: Troubleshooting - ESP32 - — esptool.py latest documentation
is not present or the board is not connected
This is a common problem. Retry the upload. When Connecting..
appears,
immediately press the BOOT button on your ESP32 board. Keep holding BOOT for 3-5 seconds.
Release the BOOT button and your upload should, hopefully, succeed this time.
Same applies to ESP32 sketch data uploads.
Robot’s ESP32 Fails to Connect to WiFi
- Make sure the WiFi credentials you provided to your ESP32 during the web config are correct.
- Try pressing the reset (EN) button on your ESP32. This often fixes WiFi connection failure problems as long as the WiFi has been configured correctly.
- Make sure your WiFi is 2.4GHz - NOT 5GHz. ESP32 supports 2.4GHz WiFi only.
- Do the WiFi configuration reset (see this FAQ) followed by the web WiFi config. Make sure the WiFi credentials you provide to your ESP32 are correct.
Robot’s ESP32 Connects to WiFi, but Fails to Connect to the Windows ROS2 PC
- Make sure you have launched the
kaiaai/kaiaai:iron
image in Docker - Inside the Docker container running the
kaiaai/kaiaai:iron
image, make sure you have launchedros2 launch kaiaai_bringup physical.launch.py
- Make sure both your robot and your PC are connected to the same local WiFi network
- Make sure your local WiFi network allows devices to connect to each other and does not block ports. For example, WiFi networks in cafes, restaurants often block local-device-to-local-device connections.
- Make sure your PC does not block incoming local connections.
How to Perform WiFi Configuration Reset
- Power up your ESP32 dev board (e.g. using USB or battery power)
- Press the reset (EN) button on your ESP32 dev board
- Within 1 second or less, press and hold the BOOT button on your ESP32 dev board The ESP32 activity LED should start blinking very fast
- Keep pressing the BOOT button for a few seconds until the ESP32 activity LED turns solid on.
- Release the BOOT button. Your ESP32 should reboot and restart in the AP (WiFi configuration) mode.
Arduino IDE Fails to Detect ESP32 COM Port
- Make sure your ESP32 is powered up and its power LED indicator is on.
- Check if your ESP32-to-PC USB cable is damaged. Try replacing your USB cable.
- Check if your ESP32-to-PC USB cable is for CHARGING ONLY. Try replacing your USB cable with a regular one.
- Sometimes ESP32 dev board’s USB-to-serial hardware can fail.
- Try connecting your ESP32 to another PC.
- Try connecting another ESP32 to your PC.
Arduino IDE 2.x SPIFFS Upload Fails - COM Port not Found
Error in Arduino IDE attempting a SPIFFS upload:
1
2
3
4
SPIFFS Filesystem Uploader
Using partition: default
ERROR: No port specified, check IDE menus
Solution - restart your Arduino IDE and retry SPIFFS upload.
Error in Arduino IDE attempting SPIFFS upload:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Using partition: default
Building SPIFFS filesystem
C:\Users\ilya\AppData\Local\Arduino15\packages\esp32\tools\mkspiffs\0.2.3/mkspiffs.exe -c C:
\Users\ilya\OneDrive\Documents\Arduino\kaiaai-esp32/data -p 256 -b 4096 -s 1441792 C: \Users\
ilya\AppData\Local\Temp\tmp-16336-VVuaXOVTskId -. spiffs.bin
/config.yaml
/favicon.png
/index.html
Uploading SPIFFS filesystem
C:\Users\ilya\AppData\Local\Arduino15\packages\esp32\tools\esptool_py\4.5.1/esptool.exe -- ch
ip esp32 -- port COM3 -- baud 921600 -- before default_reset -- after hard_reset write_flash -z
-- flash_mode dio -- flash_freq 80m -- flash_size detect 2686976 C:\Users\ilya\AppData\Local\Te
mp\tmp-16336-VVuaXOVTskId -. spiffs.bin
esptool.py v4.5.1
Serial port COM3
A fatal error occurred: Could not open COM3, the port doesn't exist
ERROR: Upload failed, error code: 2
Solution:
- Close the Serial Monitor window in your Arduino IDE
- Make sure your ESP32 is connected to the PC
- Make sure your ESP32 USB serial port is not malfunctioning
- Try another PC
- Try another ESP32
Arduino IDE 2.x SPIFFS Upload Fails - COM Port not specified
- Restart your Arduino IDE
ESP32 Activity LED Status
- Solid ON - AP mode
- Slow blinking, once per second - connecting to WiFi
- Very slow blinking, once per 20 seconds - connected to WiFi, connecting to ROS2 PC
- Fast blinking - connected to ROS2 PC
Reference ESP32 Serial Monitor Outputs
Firmware Uploaded Without Sketch Data
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ets Jun 8 2016 00:22:57
rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0030,len:1184
load:0x40078000,len:13260
load:0x40080400,len:3028
entry 0x400805e4
Kaia.ai firmware version 0.8.0-iron
ESP IDF version v4.4.7-dirty
SPIFFS mounted successfully
Sketch data not found. Please upload sketch data.
Firmware and Sketch Data Uploaded, WiFi not Configured
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
ets Jun 8 2016 00:22:57
rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0030,len:1184
load:0x40078000,len:13260
load:0x40080400,len:3028
entry 0x400805e4
Kaia.ai firmware version 0.8.0-iron
ESP IDF version v4.4.7-dirty
SPIFFS mounted successfully
/config.yaml found; loaded OK
WiFi SSID unknown
dest_ip unknown
To enter web config push-and-release EN, then push-and-hold BOOT within 1 sec
Setting up WiFi KAIA.AI; browse to http://192.168.4.1
WiFi Configuration - Connect Button Clicked
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Kaia.ai firmware version 0.8.0-iron
ESP IDF version v4.4.7-dirty
SPIFFS mounted successfully
/config.yaml found; loaded OK
WiFi SSID unknown
dest_ip unknown
To enter web config push-and-release EN, then push-and-hold BOOT within 1 sec
Setting up WiFi KAIA.AI; browse to http://192.168.4.1
Writing file /network.yaml, restarting ...
ets Jul 29 2019 12:21:46
rst: 0xc (SW_CPU_RESET) ,boot: 0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv: 0x00, q_drv:0x00, d_drv: 0x00, cs0_drv:0x00,hd_drv: 0x00, wp_drv: 0x00
mode: DIO, clock div:1
load: 0x3fff0030,len:1184
load: 0x40078000, len:13260
load: 0x40080400, len: 3028
entry 0x400805e4
Kaia.ai firmware version 0.8.0-iron
ESP IDF version v4.4.7-dirty
SPIFFS mounted successfully
/network. yaml found; loaded OK
/config.yaml found; loaded OK
To enter web config push-and-release EN, then push-and-hold BOOT within 1 sec
Board model MINI-BDC30P-BODY with BDC-30P, version v1.1.1, manufacturer makerspet.com
LIDAR model LDROBOT LD14P
LIDAR RX buffer size 1024, baud rate 230400
Battery ADC attenuation 7.00, voltage 2.60V
Motor driver type IN1_IN2; motor encoder type AB_QUAD
Motor Max RPM 180.00; encoder PPR 1035.00 TPR 4140.00
Connecting to WiFi NETGEAR48 ... connected, IP 192.168.93.127
Connecting to Micro-ROS agent 192.168.1.113 ...
Connected to WiFi, Robot Battery OFF
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
ets Jun 8 2016 00:22:57
rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0030,len:1344
load:0x40078000,len:13964
load:0x40080400,len:3600
entry 0x400805f0
Kaia.ai firmware version 0.8.0-iron
ESP IDF version v4.4.7-dirty
SPIFFS mounted successfully
/network.yaml found; loaded OK
/config.yaml found; loaded OK
To enter web config push-and-release EN, then push-and-hold BOOT within 1 sec
Board model MINI-BDC30P-BODY with BDC-30P, version v1.1.1, manufacturer makerspet.com
LIDAR model LDROBOT LD14P
LIDAR RX buffer size 1024, baud rate 230400
Battery ADC attenuation 7.00, voltage 0.99V
Motor driver type IN1_IN2; motor encoder type AB_QUAD
Motor Max RPM 180.00; encoder PPR 1035.00 TPR 4140.00
Connecting to WiFi NETGEAR48 ...
Connecting to WiFi NETGEAR48 ... connected, IP 192.168.1.226
Connecting to Micro-ROS agent 192.168.1.113 ...
Connecting to Micro-ROS agent 192.168.1.113 ...
Connecting to Micro-ROS agent 192.168.1.113 ...
Connecting to Micro-ROS agent 192.168.1.113 ...
Connecting to Micro-ROS agent 192.168.1.113 ...
Connecting to Micro-ROS agent 192.168.1.113 ...
Connecting to Micro-ROS agent 192.168.1.113 ...
Connected to ROS2 PC, Robot Battery OFF
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
ets Jul 29 2019 12:21:46
rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0030,len:1344
load:0x40078000,len:13964
load:0x40080400,len:3600
entry 0x400805f0
Kaia.ai firmware version 0.8.0-iron
ESP IDF version v4.4.7-dirty
SPIFFS mounted successfully
/network.yaml found; loaded OK
/config.yaml found; loaded OK
To enter web config push-and-release EN, then push-and-hold BOOT within 1 sec
Board model BDC-30P, version v1.1.0, manufacturer makerspet.com
LIDAR model LDROBOT LD14P
LIDAR RX buffer size 1024, baud rate 230400
Battery ADC attenuation 7.00, voltage 0.99V
Motor driver type IN1_IN2; motor encoder type AB_QUAD
Motor Max RPM 180.00; encoder PPR 1035.00 TPR 4140.00
Connecting to WiFi NETGEAR48 ... connected, IP 192.168.1.5
Connecting to Micro-ROS agent 192.168.1.113 ... success
Syncing time ... OK
UTC time Tue Feb 11 23:02:53 2025
micro-ROS client key 0xDD9181CC; ROS2 node /pet
Micro-ROS initialized
LiDAR info Model: LDROBOT LD14P
startLIDAR() result: OK
Telem avg 106 max 5667ms, LiDAR RPM 0.00, wheels RPM 0.00 0.00, battery 0.99V, RSSI -59dBm
Telem avg 50 max 51ms, LiDAR RPM 0.00, wheels RPM 0.00 0.00, battery 0.99V, RSSI -59dBm
Telem avg 50 max 51ms, LiDAR RPM 0.00, wheels RPM 0.00 0.00, battery 0.99V, RSSI -58dBm
Power consumption
Conditions:
- 9V battery, power switch ON
- connected to ROS2 PC over WiFi
- ESP32 with USB-C
- LDROBOT LD14P LiDAR operating
- two 12V N20 motors
- ESP32 USB disconnected from PC
- Kaia.ai firmware version 0.8.0-iron
Battery current draw:
- around 240ma both motors off
- around 430-450ma both N20 motors full on, spinning freely