Obstacle and Environment Navigating Robots
Programmed and built robots with closed-loop environment navigation and obstacle avoidance systems.
My first of these projects was a dual-motor differential drive robot with the goal of navigating through complex, challenging, and unpredictable environments. Specifically, I designed this robot to have line following capabilities, wall avoidance, short-distance small obstacle avoidance, and attraction and repulsion to specific colors (moves towards light of one specific color and away from light of another specific color).
I began by deeply studying animal sensory systems, specifically those that aid in navigation through environments. I focused on: The physical and neurological mechanisms of how bats use echolocation to navigate environments, the neurological decision-making algorithms of how termites automatically follow scent trails detected by their symmetrical antennae, how shrews and other rodents use sensitive whiskers to precisely detect and understand nearby objects, and how fiddler crab's compound eyes detect different colors.
Then, I built a dual-DC-motor caterpillar wheel differential-drive robot, mounted with ultrasonic sensors, 3 closely-spaced infrared sensors pointed towards the ground, repurposed flex-sensors on both sides of the front, and a top-mounted photoelectric sensor. I wired all of these sensors and motors to an arduino microcontroller.
Finally, I wrote closed-loop control systems, deeply inspired by the neurological algorithms and processes I studied earlier, that used information from all of the sensors to control and direct the movement of the robot. After extensive testing, tuning, and refinement, the robot was a able to flawlessly navigate every complex testing course I built for it--each course involved a maze-like series of walls (curved, straight, and angled), small obstacles (round, angled, small, large, etc.), and portions with lines (with straight sections, sharp curves, and shallow curves) on the floor that would take the robot from one maze to another. Additionaly, in the maze sections, I would place a red light on one side of the maze and a green light on the other, and the robot would know to navigate through the maze towards the green light and away from the red light.

The next of these projects was also differential drive robot that navigated through a course, however, this robot focused more on rapid and precise completion of a specific task.
I began with a four-motor differential drive robot equiped with an arduino microcontroller, a swiveling ultrasonic sensor mounted on a servo and 3 closely-spaced infrared sensors facing the ground. The robot had the specific task of following a complex line path, then docking and connecting to a specific cargo, then following a straight wall in reverse, and finally dropping the cargo off in a specific outlined destination box.

I then programmed the robot with C++. Generally, I wrote a different function for each task (line following, docking, reverse wall-following, reaching destination), and then made a mode variable that would switch the robot from one task to the next at the necessary moment. The line following program used a combination of present infrared sensor readings and a constantly changing stored variable of previous action to make more precise, intelligent decisions, and, importantly, to quickly correct itself when making mistakes and losing the line. The docking function used the ultrsonic sensor to detect distance and was rapid and precise. Finally, the wall-following function used a PID-control system to allow the robot to maintain the desired distance from the wall and effectively correct for any deviations. In the end, the robot peformed extrmely well and completed the course in a mere 6 seconds.