Build Overview
SidewalkPilot is built on a Yahboom Ackermann 520M chassis with JGB37-520 DC drive motors rated for 12 V and 550 RPM. It carries three computers, a camera, LiDAR, GPS/compass, wheel-speed sensing, steering and motor electronics, a dashboard, and several separate power sources. It is closer to a mobile systems-integration bench than a stock RC car.
Major Assemblies
| Assembly | Main parts | Purpose |
|---|---|---|
| AI Model Manager | Jetson Orin Nano | Series 1/2 PyTorch CUDA and Series 3/4 ONNX Runtime CUDA camera-steering inference |
| Chassis and steering | Yahboom Ackermann 520M, JGB37-520 DC motors (12 V, 550 RPM), high-torque steering servo, steering rods/linkage | Physical vehicle, drive power, and car-like front-wheel geometry |
| Hardware and safety controller | Raspberry Pi 5, PCA9685 Servo Controller, AT8236 Motor Controller | Sensors, controller, servo, motors, safety, logs |
| Display computer | Zero 2 W, Waveshare 64x32 HUB75 panel | Independent live telemetry display |
| Vision | Raspberry Pi Camera Module 3 Wide | Forward sidewalk image stream and training photos |
| Obstacle sensing | Youyeetoo FHL-LD19 360-degree LiDAR, CP2102 UART-to-USB Adapter | Center-corridor slowdown and emergency braking |
| Navigation | BN880 GPS and HMC5883L-compatible compass | GPS fixes feed the route manager; compass is currently bench-only |
| Motion sensing | Hall-effect wheel-speed sensor | Wheel-speed estimate |
| Manual control | Xbox Series X controller | Steering, throttle, brake, model/page controls, takeover, quit |
Compute and Network Layout
The Jetson Orin Nano is the AI brain. The Raspberry Pi 5 is the wired hardware and network hub that carries camera frames to it and applies returned steering predictions through the safety-controlled steering and motor path.
- Raspberry Pi 5 to Jetson Orin Nano: dedicated Ethernet, Raspberry Pi 5
10.42.0.1, Jetson Orin Nano10.42.0.2, inference TCP port8770. - Raspberry Pi 5 to Zero 2 W: USB Ethernet gadget, Raspberry Pi 5
192.168.10.1, Zero 2 W192.168.10.2, telemetry UDP port8765. - Xbox controller: Bluetooth HID directly to the Raspberry Pi 5.
- LiDAR: USB serial through a CP2102 UART-to-USB Adapter, current serial device
/dev/ttyUSB0.
The two wired links are separate. Dashboard recovery must not rewrite the Jetson Orin Nano Ethernet configuration, and Jetson Orin Nano availability must not determine whether the dashboard works.
Power Domains
The project uses separate sources because compute, motors, and the display have different load behavior:
- INIU 140 W power bank for Jetson Orin Nano compute;
- INIU 45 W power bank for Raspberry Pi 5/auxiliary compute;
- OVONIC 3S LiPo for drive motors;
- OVONIC 2S LiPo for the display domain;
- Buck conversion and fusing where the load requires regulated voltage.
Exact wiring, converter ratings, connector polarity, and fuse selection must be checked against the physical build before reproduction. Software documentation is not a substitute for measuring the assembled power rails. Never connect an unverified LiPo or buck output directly to a Raspberry Pi 5, Jetson Orin Nano, servo, or display.
Control Wiring
Current software assignments include:
| Function | Assignment |
|---|---|
| PCA9685 Servo Controller | I2C address 0x40, channel 0, 50 Hz |
| Steering pulse range | 1000 to 2000 microseconds |
| Right motor forward/backward | GPIO 19 / GPIO 20 |
| Left motor forward/backward | GPIO 25 / GPIO 13 |
| Hall-effect wheel-speed sensor | GPIO 24 |
| LiDAR | CP2102 UART-to-USB Adapter; no current GPIO motor-enable line |
The live runtime source of truth is code/controller/current/rc_car_app/config.py. Pin changes must update the wiring document, bench test, and config together.
Steering Reality
The steering mechanism is not treated as a perfect mathematical servo. Vehicle load, linkage geometry, backlash, and direction of approach affect the wheel angle. The project has used:
- Fixed-angle PCA9685 tests;
- Controller-driven 15-degree step tests;
- Live center-trim adjustment;
- Left and right wheel regression plots;
- Direction-dependent feed-forward calibration;
- IMU yaw-rate experiments.
The current center trim is +17D. Reference steering limits are intentionally narrower than absolute hardware commands during normal driving. Tight absolute commands remain a separate future maneuver decision, not a default training range.
Bring-Up Order
- Raise the car so wheels cannot drive it unexpectedly.
- Inspect power polarity, fuse state, loose connectors, and steering linkage.
- Power the Jetson Orin Nano and verify
10.42.0.2:8770when autonomous inference is needed. - Power the Raspberry Pi 5 and verify controller, camera, LiDAR, and both dedicated links.
- Power the Zero 2 W/display and verify the dashboard receiver service.
- Confirm manual steering, brake, and quit before placing the car on the ground.
- Run low-speed sensor and AEB checks before autonomy.
The software is designed to tolerate the Jetson Orin Nano being absent without manual-control lag. That is a failure-mode property, not permission to skip the manual bench check.
Useful Bench Commands
python code/test_files/steering/pca9685_servo_test.py
python code/test_files/sensors/hall_sensor_test.py
python code/test_files/lidar/lidar_viewer.py
python code/test_files/sensors/bn880_test.py
python code/test_files/controller/xbox_test.py
sudo python code/test_files/display/hub75_rgbmatrix_test.py
Run only one program that owns a device at a time. Stop the live car service before opening the same camera, serial port, PCA9685 channel, or GPIO from a test tool.
Recurring Physical Failure Modes
| Symptom | Likely area |
|---|---|
USB error -110 or failure to enumerate |
Cable, connector, damaged port, power/ground, host timing |
| Steering returns differently from left and right | Linkage hysteresis, servo load, calibration, rod geometry |
| Car pulls more as throttle rises | Left and right motor-force imbalance, not only steering trim |
Dashboard shows NO LINK |
Controller not sending, dashboard service stopped, or USB network unavailable |
| LiDAR shows no points | Serial ownership, CP2102 UART-to-USB Adapter/device path, LiDAR power, packet stream |
| Controls pause rhythmically | Blocking work inside the runtime loop or repeated network timeouts |
Continue with Project Overview for software ownership and Safety Overview before field operation.