An autonomous indoor navigation system for the iRobot Create 3, built using only a single overhead camera and computer vision — no LiDAR, no SLAM. The system detects ArUco markers to compute a homography, converts the maze image into a binary occupancy map, plans an optimal path using a modified A* algorithm, and executes it on the physical robot with real-time bumper-based replanning.
Developed as a group project for the Master's programme in Smart Systems Engineering at Hanze University of Applied Sciences (October 2025).
Developed in collaboration with Reza Rahimi and Rida Karim Kaher as part of the MSc Smart Systems Engineering programme at Hanze University.
My contributions focused on the core algorithmic and software components: image processing pipeline, A* implementation and optimization, path refinement, navigation logic, and robot calibration.
Camera Input
│
▼
Undistortion (intrinsics)
│
▼
Homography → Bird's-eye View (ArUco-assisted)
│
▼
Binarization & Morphological Filtering
│
▼
A* Path Planning (clearance + turn penalty)
│
▼
Path Simplification (Douglas–Peucker)
│
▼
Motion Execution (polar coordinates, differential drive)
│
▼
Bumper Feedback → Replan if collision detected
- Homography-based top-down view using 4 ArUco markers at maze corners
- Robust binarization pipeline — CLAHE contrast enhancement, adaptive thresholding, multi-stage morphological filtering
- Modified A* algorithm with clearance distance (keeps robot away from walls) and turn penalty (reduces unnecessary direction changes)
- Path simplification from ~3550 raw A* points to fewer than 20 waypoints using a custom reduction algorithm
- Polar coordinate path translation — path expressed as (angle, distance) pairs for more reliable robot execution
- Feedback-based replanning — bumper collision triggers backward movement and full path recomputation
- Robot successfully navigated the maze in 1 out of 3 complete test runs
- Each full run took approximately 3 minutes including recovery and replanning intervals
- A* path reduced from 3550 points → ~17 waypoints after simplification
- Main challenges: wheel slip accumulation over distance, ArUco marker visibility loss during recovery
robot-navigation-irobot/
│
├── robot_execution_main.py # Entry point
├── camera_functions.py # Image capture, undistortion, homography
├── image_processing_functions.py # Binarization pipeline
├── find_angle.py # Robot orientation calculation
├── start_goal_detection.py # ArUco-based start/goal detection
├── a_star_implementation.py # Modified A* path planning
├── path_transformation.py # Path reduction and polar conversion
├── requirements.txt # Dependencies
└── README.md
git clone https://github.com/MostafaJahanian/robot-navigation-irobot.git
cd robot-navigation-irobot
pip install -r requirements.txtRequirements: opencv-python, numpy, irobot-edu-sdk
pathlib,heapq, andasyncioare part of Python's standard library.
python robot_execution_main.pyThe system will:
- Capture the maze image via WiFi camera
- Undistort and transform to bird's-eye view
- Binarize the image into an occupancy map
- Detect start and goal positions from ArUco markers
- Plan path using A* with clearance and turn penalty
- Simplify and convert path to polar coordinates
- Execute motion commands on the robot
- Replan automatically upon any bumper collision
Python OpenCV NumPy iRobot Education SDK asyncio A* Algorithm ArUco Markers Computer Vision
A full technical report covering literature review, methodology, results, and discussion is available in the repository: report.pdf