This project formulates my final year dissertation project for my BSc in Computer Science. It is a computer vision-based navigation system using ArUco fiducial markers for guiding autonomous robots through gate formations.
This project implements a low-cost vision system using ArUco markers and a Raspberry Pi to provide directional guidance for autonomous outdoor robots. The system:
- Uses custom ArUco markers arranged in gates to create a navigation path
- Detects markers using computer vision (OpenCV)
- Calculates target points between marker pairs
- Provides directional output via GPIO pins or UART serial communication
- Runs on resource-constrained hardware (Raspberry Pi Zero)
The system uses:
- Custom 4x4 bit ArUco markers (4 types):
- Left marker (ID 0)
- Right marker (ID 1)
- Start marker (ID 2)
- Stop marker (ID 3)
- Raspberry Pi Zero with camera
- OpenCV for computer vision
- Serial UART communication
Install OpenCV and dependencies
pip install opencv-python
pip install numpy
pip install pyserial
python src/detectarucoimage.py
python src/detectarucovideo.py [camera_index]
python src/raspiaruco.py [camera_index]
python src/testserial.py # Send test message
python src/readserial.py # Read serial output
- Place left and right ArUco markers in parallel to form gates
- Start marker initiates navigation
- Stop marker ends navigation
- System calculates target point between valid marker pairs
- Direction is encoded as ASCII characters (A-Z) based on target position
- Camera captures video feed
- OpenCV detects ArUco markers in each frame
- System identifies valid gate formations:
- Left marker must be on left side
- Right marker must be on right side
- Markers should be roughly parallel and similar size
- Target point calculated between valid marker pairs
- Target x-coordinate scaled to A-Z ASCII character
- Direction sent via UART/GPIO to robot controller
├── src/
│ ├── detectarucoimage.py # Image detection test
│ ├── detectarucovideo.py # Video detection test
│ ├── raspiaruco.py # Main Raspberry Pi program
│ ├── readserial.py # Serial read test
│ └── testserial.py # Serial write test
├── Images/ # Documentation images
└── README.md
Sharan Govinden Umavassee
- Project Supervisor: Dr. Klaus-Peter Zauner
- Second Examiner: Prof. Christopher Freeman
- University of Southampton, School of Electronics and Computer Science
This project is part of MEng Computer Science with Industrial Studies at University of Southampton.