Autonomous Maze-Solving Rover
This robot was dubbed the Toddler because its task was to learn how to avoid obstacles, navigate a maze through localization, and deliver a payload to and from predefined points.
​
Role Mechanical design and fabrication of chassis and robot components, circuit design, and localization code author
When September - December 2018
Team 5 University of Toronto engineering students
Tools Solidworks, FDM 3D printer, laser cutter, Git and Arduino programming platform using C
DESIGN OVERVIEW
​
The goal of this project was to design and build a robot capable of: (1) obstacle avoidance, (2) localization in a predetermined maze, and (3) the loading and delivery of a wooden block. The final design prioritizes the objectives of simplicity, low cost, and small footprint (cross sectional area). It uses five ultrasonic sensors for navigation and load detection, and three DC motors to achieve locomotion and load pick-up.
​
​
​
Context
THE REQUIREMENTS
​
The rover had to fulfill the following requirements:
-
the rover should navigate around the walls without any collisions
-
the starting point will be a random location on the maze
-
the drop off zone, point B, will be randomly selected
-
the rover will show indication (i.e. blink an LED) when it:
-
arrives at the loading zone (denoted by "L/Z" in Figure A)
-
detects the load at the loading zone
-
returns the load at the delivery point B
-
-
the payload will be less than 2” x 2” x 2” in size
​
​
THE FINAL DESIGN
​
MAZE SOLVING STRATEGY
Upon entering the maze, the robot is programmed to randomly explore, enacting obstacle avoidance algorithms until it localizes itself in the maze. Obstacle avoidance is accomplished using sensor readings to generate a steering input, and modulate power given to the wheels. Localization uses these sensor readings to obtain location and orientation at a unique 4-way intersection (marked by the star shown in Figure A). The robot then follows a hard coded path to the loading zone (denoted by "L/Z" in Figure A), where it picks up a block, and back to a pre-specified drop-off zone (denoted by "B" in Figure A).
​
OBSTACLE AVOIDANCE STRATEGY
For robot movement, a two-tiered PID system was employed. As motor speed proved difficult to control with simpler linear algorithms, the first PID controller used encoder values to adjust PWM duty cycles for the two motors to precisely control wheel position. Parameters were adjusted to help the robot achieve the desired position as quickly as possible, with minimal overshoot. Speed was controlled by incrementing the positional setpoint for the PID controller over time. A second PID controller was used to provide steering input, to help the robot drive in the center of the track. When a wall is present on either side of the robot, ultrasonic sensors provide feedback to keep the distance between the sensor and the wall equal to a target value. The output of this control system is used to modulate the desired setpoint of the first encoder PID (i.e if the right wall is too close, the right wheel should move faster than the left wheel). When the robot reaches the intersections without immediate walls, the desired motor powers of either wheel at the moment before the walls were ‘lost’ are maintained by the encoder PID until the robot again senses a wall. At this point the wall tracking PID is turned back on prior to the encoder PID. The robot prioritizes right turns, then left turns, then forward movement until localization is achieved.
​
KEY DESIGN FEATURES
​
Robust sensor selection: ultrasound sensors are used instead of infrared sensors because their effective range is longer, and their readings are not affected by surface type or color.
​
Minimized Power Requirements for Maximal Grip Strength and Range: the gripper is driven by one DC motor, has few moving parts, and requires no current to hold the block in place. Due to the need to grip and pick up the block, movement in orthogonal directions is required. For simplicity, the gripper uses a string and two sets of elastic bands, performing two orthogonal motions in sequence.
​
Tiered Chassis: driven by the gripper dimensions and sensor clearance needs, the modified hexagonal tiers provide structure as well as organization while minimizing the rover's footprint.
​
Two-tiered PID Control: rover chassis position control layered on wheel peed control allows the rover to drive as straight as possible and dynamically adjust its heading.
​
Zero Turning Radius & Continuous Motion Navigation: minimizing the turning radius allows for minimal risk of wall collision while continuous movement (as opposed to incremental) allows for better PID control.
​
​
​
Process
​
DESIGN STAGES & DELIVERABLES
​
As outlined in the figure below, project responsibilities were divided into subsystems and organized using a Gantt chart.The subsystems tasks were done in pairs where multiple teammates had interest in the subject matter. As this project was a learning tool, I made sure that we were all derived the skills we wanted to learn within the 4 months we had with maximal support.

Figure A - Maze layout the robot had to navigate

DISCOVERY​ (DESIGN PLANNING)
This stage was instrumental in achieving the following goals:
-
understanding the limitations of the sensor and bluetooth hardware we had available
-
understanding state of the art designs that use many more sensors
-
identifying precision wheel drive as an anticipated major challenge
​
Below is a collection of artifacts from this phase (click to enlarge any image):
![]() | ![]() | ![]() |
---|---|---|
![]() | ![]() | ![]() |
![]() | ![]() | ![]() |
BUILD & TESTING
I managed systems integration between the subsystems (i.e. mechanical and electrical). Generally, our team tackled building and testing in stages akin to unit testing so that any potential issues could be isolated. With this strategy of building the minimum viable product first and finding the most elegant solutions through simplification, we changed our original direction of employing omni-wheels and localization using Matlab to the final design seen.





FINAL DESIGN​
The robot performed well overall, though it was found to not perform consistently in the task of obstacle avoidance. This can be attributed to both a lack of maneuverability from the use of two conventional wheels, and the use of only three ultrasonic sensors for obstacle avoidance. Though intensive PID control was implemented to compensate, obstacle avoidance occasionally did not work as desired. To improve the performance of the robot, the team would explore the use of omni-wheels and additional ultrasonic sensors, since these were the weakest parts of the robot. This would enhance the robot’s capabilities in obstacle avoidance to complement its good performance in the tasks of localization and load pick-up.
​
​
My Role
TECHNICAL WORK
​
-
I designed, optimized and built the chassis and rover layout. I used a combination of 3D printed parts, laser cut 1/4" acrylic, and parts from McMaster Carr to assemble the structural core of the rover. Our rover had 2nd smallest footprint in our class.
-
I managed the subsystems integration, built and soldered the circuitry
-
I was 1 of 5 contributors to Git; I was a primary contributor to the localization code and the gripper actuation code; I was a secondary contributor to the speed control PID algorithm
​
​
​
MY TEAM
​
My team consisted of 4 mechatronics engineering students and 1 electrical engineering student. With most of us unfamiliar with collaborative coding projects, it was a great opportunity to learn how to use Git as a multidisciplinary tool to set-up code management protocol. Despite being mostly from the same program, our team was also well balanced with diverse interests and skills in coding or electro-mechanical systems. We complemented each others' heavy 6 course semesters well and had loads of fun developing the Toddler to a ripe old 4 months!
SKILL HIGHLIGHTS
​
-
3D Parametric Modeling in Solidworkds: the assembly has over 65 components; I used it to do physical analysis such as finding the COM as well as size optimization design
-
Code Management on Git: implementing features such as branching for code development as well as comment convention across the team helped reduce work redundancy by an estimated 43 hours
-
PID control: as a secondary contributor to the PID code, I proficiently tested implementations and provided tuning iterations needed to obtain functional code