A 4WD differential-drive robot running ROS 2 Humble that detects pickleballs on a court, navigates to them, picks them up with an onboard 6-DOF arm, and returns them to a base station — all while staying outside the court boundary so it doesn't get stepped on.
The original v1 platform paired a Raspberry Pi 4 with a Teensy 4.1 (motor/encoder/IMU via linorobot2), an RPLIDAR A1, and a USB webcam. The v2 redesign in progress swaps in a Jetson Orin Nano Super, a DOFBOT-SE 6-DOF arm, and an rpicam3.
Status: v2 in active development. See:
docs/ARCHITECTURE.md— system design, node graph, TF tree, open architectural questionsdocs/ROADMAP.md— tracks, dependency graph, milestone goals, readingCONTRIBUTING.md— branching, merging, tagging, issue conventions- GitHub Project: Ballbot — live progress
| Part | |
|---|---|
| 1 | Raspberry Pi 4 (4 GB) — being replaced by Jetson Orin Nano Super in v2 |
| 2 | AmazonBasics 128 GB SD Card |
| 3 | Yahboom Aluminum 4WD ROS Robot Car Chassis |
| 4 | L298N Motor Drivers |
| 5 | DFRobot DC-DC Power Module 25W DFR0205 |
| 6 | Screw-down Terminal Block Strips |
| 7 | RPLIDAR A1 |
| 8 | GeeekPi Fan Hat with OLED |
| 9 | Teensy 4.1 (running linorobot2_hardware) |
| 10 | Various standoffs, wires, and crimped connectors |
- Jetson Orin Nano Super (compute upgrade)
- DOFBOT-SE 6-DOF arm + gripper (manipulation)
- Raspberry Pi Camera Module 3 (CSI, replacing the USB webcam)
See ARCHITECTURE.md for the full v2 hardware story including the open question on whether to bypass the DOFBOT STM32 expansion board and drive it directly over I2C from the Orin.
The project builds and runs in the VSCode devcontainers under .devcontainer/. Pick the variant matching your host:
linux-gpu/— Linux host with NVIDIA GPUwsl-gpu/— WSL 2 with GPU passthrough
For GPU passthrough you'll first need the NVIDIA Container Toolkit.
- Allison Thackston — workspace template
- Articulated Robotics — tutorials
- Lidarbot
- linorobot2 and linorobot2_hardware — base platform
- ros2_rover



