CLA Course Project
This repository is a complete ROS 2 workspace for the "Go Fetch!" demo on NRG's B3V0 robot platform.
For this demo, Spot will navigate between predefined waypoints, autonomously detect and grasp tennis balls, and deposit them into a designated AprilTag-marked collection bin.
The full integrated demo combines autonomous navigation, ball detection, approach planning, and manipulation into a single behavior tree workflow.
Custom repositories inside src/:
- spot_tennis_demo → Launch files, YOLO detection, and perception pipeline
- tennis_demo_behaviorized → Behavior tree logic, navigation decisions, and manipulation sequencing
- Intended to run on B3V0 shared robot environment
- User must have access to the Docker daemon on the B3V0 machine
- AprilTag-tagged bin must be visible to Spot's left after undocking (can be changed by editing Waypoint A)
- Waypoints B & C must be obstacle-free (set near the Glovebox)
git clone --recursive git@github.com:andonbreitenfeld/go_fetch_ws.git
cd go_fetch_wsIf you forgot to clone recursively:
git submodule update --init --recursivecd go_fetch_ws
colcon build
source install/setup.bashBefore running the demo, ensure the following variable is added to your bashrc:
echo 'export SPOT_ACCESSORIES="ARM RL_KIT"' >> ~/.bashrc
source ~/.bashrcOpen 6 separate terminals and run the following commands in order:
ros2 launch spot_tennis_demo demo_bringup.launch.pyros2 launch spot_navigation bringup_launch.pyros2 launch spot_moveit_config move_group.launch.pycd src/spot_tennis_demo/docker
docker compose up yoloros2 launch spot_tennis_demo perception.launch.pyros2 run tennis_demo_behaviorized run_tennis_tree- Startup: Spot claims, powers on, undocks, and navigates to startup position
- Bin Localization: Continuously attempts to locate the AprilTag bin until successful
- Patrol & Monitor: Cycles between waypoints while monitoring for stable ball detections
- Fetch Sequence: Upon detecting a ball:
- Computes approach goal and navigates to it
- Executes grasp sequence
- Returns to bin and deposits ball
- Resume Patrol: Returns to waypoint cycling until next ball is detected
- Perception: YOLO 3D detections → Custom BallSelector filter node → Stable Ball Pose
- Planning: Custom ComputeApproachGoal behaviors for ball & bin
- Navigation: Used premade WalkToPose behavior for precise positioning
- Manipulation: Custom PickBall and DropBall behaviors
MIT
- Andon Breitenfeld
- Clara Summerford
- Luke Pronga