This project implements an autonomous robot arm capable of perceiving and picking strawberries along a ridgeline using a Raspberry Pi and computer vision.
The system combines visual perception with a robotic arm to locate and pick strawberries in a structured environment. It uses ROS 2 Jazzy for coordination, Docker for containerized development, and a combination of Raspberry Pi and Arduino for hardware control.
Not damaged, Successful Pick | Not damaged, Partially Successful Pick | Not damaged, Unsuccessful Pick | Damaged, Successful Pick |
---|---|---|---|
|
|
|
|
- Raspberry Pi 5
- 2× Pi Camera Module 3 (1 wide-angle, 1 normal)
- Arduino Uno
- 5-DOF Robotic Arm
- RaspberryPi OS
- ROS 2 Jazzy (inside the dev container)
- Git Bash or similar terminal
- Visual Studio Code
- Dev Containers extension
- Docker installed and running on your system
-
Clone the repository:
git clone https://github.com/ianueph/strawberry-picking-rpi.git cd strawberry-picking-rpi
-
Open the project folder in VS Code.
-
When prompted by VS Code, "Reopen in Container".
-
The container will build and install all dependencies automatically via:
installations.sh
postCreateCommand.sh
After setup and connecting all hardware:
-
Upload YOLO Model Weights
Before launching the robot system, ensure the required YOLOv8 model weights are available. Place the following files in the specified directory:
src/ └── yolo_ros/ ├── ... ├── yolo_bringup/ │ ├── launch/ │ │ ├── strawberry-object-tracking.pt │ │ ├── strawberry-image-class.pt │ │ └── ... │ └── ... ├── yolo_msgs/ │ └── ... ├── yolo_ros/ │ └── ... └── ...
-
Grant access to the Arduino serial device:
sudo chmod 666 /dev/ttyACM0
-
Launch the robot system:
ros2 launch sprpi_arm_bringup main_launch.launch.py
Note: Ensure you have X11 forwarding set up properly if running GUI apps like RViz2. This is handled via mounted volumes and environment variables in
devcontainer.json
.
- Ensure both Pi Cameras are connected and recognized by the Raspberry Pi.
- The Arduino should be flashed with the correct firmware for arm control.
- This project assumes basic familiarity with ROS 2, Linux, and Docker.