Josh Jang
← Work

Following CartA cart that follows you and avoids obstacles.

Year
2025 · 4 months
Role
System design · ROS2 · Sensor fusion · Hardware · Testing
Tags
Robotics · Software · Hardware
Problem
Carrying heavy gear is tiring, and electric carts still have to be steered by hand.
Solution
A cart that tracks you with a depth camera and UWB, and drives around obstacles on its own.
Outcome
Working prototype. Follows at walking speed and avoids obstacles within 1 m.

System architecture

System architecture

Process

  1. Research 1
    Research 2
    Research 3
    01

    Research

    No cart on the market combined following a person with avoiding obstacles. Goal: do both, and keep tracking when the person is briefly blocked.

  2. Hardware photo
    Hardware diagram
    02

    Hardware

    OAK-D camera for color, depth, and on-camera AI. UWB as backup tracking. Raspberry Pi for compute. 24V battery, about 25 min per charge.

  3. Person detection diagram
    03

    Person detection

    YOLOv8 finds the person. The depth map gives their distance and how far off-center they are.

  4. Obstacle avoidance diagram
    04

    Obstacle avoidance

    Anything within 1 m ahead: stop, then turn toward a clear path. Avoiding always wins over following.

  5. Sensor fusion diagram
    05

    Sensor fusion

    The camera leads. UWB steps in when the person is blocked, lost, or the heading drifts.

  6. Following control diagram
    06

    Following control

    The farther you are, the faster it goes, up to a speed cap. It turns to keep you centered.

  7. ROS2 structure diagram
    07

    ROS2 structure

    Separate nodes for camera, detection, UWB, and motors. Each one can be tested on its own.

  8. Motors photo
    Motors diagram
    08

    Motors

    The Pi sends commands to an ESP32, which drives the motors. Rear motor drives, front motor steers.

  9. 09

    Field testing

    Tested outdoors over several sessions. Main issues: depth noise in sunlight, unstable Bluetooth, short battery life.

Gallery

Following Cart gallery 1
Following Cart gallery 2
Following Cart gallery 3
Following Cart gallery 4

Details

Overview+

Most autonomous cart projects stop at simulation. We built the real thing — a cart that sees you with a depth camera, knows where you are with UWB, and follows you while dodging obstacles. The system covers the full robotics stack: perception (YOLO + depth), localization (vision + UWB fusion), planning (following algorithm + obstacle avoidance), and control (rear-wheel drive with front-wheel steering). The hardest part wasn't any single component; it was making vision, localization, and motor control work together reliably in the real world.

System architecture+

The system follows a layered robotics pipeline: Sensors (OAK-D Camera + UWB Module) feed into a Perception System (YOLO person detection, target tracking, depth processing, obstacle detection), which passes through a Sensor Fusion layer combining vision position with UWB distance/angle data. The fused target estimation feeds into a Motion Planner (follow algorithm, obstacle avoidance, speed control), which outputs ROS2 cmd_vel commands. These are split into drive speed and steering angle and sent through the ESP32 to the motor driver: the rear motor drives, the front motor steers.

Highlights+
  • Hardware + Software Integration — most student projects stop at simulation; this project delivered a complete working prototype with AI + robotics + hardware
  • Multi-Sensor Fusion — vision + UWB asymmetric fusion architecture provides robust tracking even during occlusion
  • Full Robotics Stack — covers perception, planning, control, and hardware integration end-to-end
Tech+
  • OAK-D Camera — RGB + Stereo Depth + Myriad X VPU (onboard neural inference)
  • YOLOv8 person detection, real-time inference on Raspberry Pi
  • DWM3001CDK UWB module — distance + angle estimation via BLE
  • ROS2 on Raspberry Pi 4/5 with SSD, Python
  • Visual servoing-based following control algorithm
  • Depth-based obstacle avoidance (1m safety threshold)
  • Rear-wheel drive + front-wheel steering — ESP32 PWM → Cytron MDD3A motor driver
  • 24V LiPo battery, ~25 min prototype runtime
  • DepthAI SDK, OpenCV, cv_bridge, NumPy, pyserial
  • Vision-primary / UWB-backup asymmetric sensor fusion
Challenges+
  • Depth Noise in Outdoor Environments — Stereo depth accuracy degraded significantly under direct sunlight and with reflective surfaces, requiring adaptive threshold tuning and confidence filtering.
  • UWB Connection Stability — BLE connection between the UWB module and iPhone was intermittent, causing gaps in backup localization data. Required reconnection logic and graceful fallback handling.
  • Battery Runtime Limitations — 24V LiPo provided only ~25 minutes of operation with all systems active. Power budgeting and duty cycling of non-critical sensors were explored but not fully implemented.
  • Sensor Synchronization — Vision (30fps) and UWB (variable BLE rate) operate on different timing cycles. Timestamp alignment and data freshness validation were critical for reliable fusion.
Learnings+
  • Single-sensor dependency is dangerous — multi-sensor fusion architecture is essential for robustness in real-world conditions
  • Simulation ≠ reality — real-world noise, lighting variation, and mechanical play introduce problems that never appear in simulation
  • Hardware integration is harder than software — mounting, cabling, vibration, and thermal management are underestimated engineering challenges
  • Full-stack robotics (perception → planning → control → hardware) requires deep integration testing that can't be unit-tested in isolation
Future work+
  • SLAM integration (slam_toolbox, rtabmap) for map-based navigation
  • ROS2 Nav2 with DWA planner for path planning in complex environments
  • Terrain adaptation — slope detection and rough terrain control
  • Multi-user tracking with specific user identification and re-identification
Scope+
  • System Architecture
  • Sensor Fusion
  • ROS2 Integration
  • Perception Pipeline
  • Motor Control
  • Hardware Build