\
Mobile Robotics is a course taught by Professor Matt Zucker at Swarthmore College, and was my first foray into the realm of robotics. The course acts as an introduction to the problems of guiding robots to act intelligently in dynamic, unpredictable environments. It covers a broad range of subjects including robot design, perception, kinematics, navigation and control, optimization and learning, and robot simulation techniques.
This page documents a few of the python-based turtlebot simulation projects from my mobile robotics course.
2-wheeler Kinematic Model
A simple model of a differential drive robot; given the wheel velocity commands at different times, the program plots the path of the two-wheeled roomba-like bot using a generalized kinematic system formula integrated with Eulers method. The produced plot represents the robot’s path integrated with different time steps to demonstrate how time steps affect accuracy.
Soccer Bot
The robot plays soccer! (Sort of; the robot finds and directs (bumps) a ball into a goal made from two pylons without crossing the goal line itself). This project stressed the use of control laws; allowing the robot to turn/move quickly when it is not facing the correct direction, and slow to a near-stop by the time it converges on the desired angle and target destination. Proper frame translations were also essential to in allowing the robot to identify the locations of the ball and goal relative to one another and itself, and to calculate the desired ball-strike angle.
Wall-Follow Maze Solver
This project was created in collaboration with a fellow student, William Hoganson, as our mobile robotics final project. Previously, we had written code to solve mazes with Dijkstra's algorithm and to localize within pre-mapped spaces with particle filters. This project continues in this vein, exploring the difficulties of placing a robot in a completely novel environment. The program allows a simulated turtlebot-like robot to explore and solve mazes using wall following, detecting walls and obstacles with the laser range finder and camera. The end of the maze is marked with a purple ball: one of several objects the robot has been programmed to recognize. The robot solves the maze while using local odometry positioning and global transforms to track and translate it’s path into a map representing the route it took. Upon completing the maze, the robot celebrates by spinning in circles; robots deserve to be happy too :)
A* and Inflated A*
This code implements a classic A* algorithm on maps represented by numpy arrays. The program also allows the user to input different heuristic weighting values to observe the trade offs between optimality and computation time, and observe what situations are best suited to an inflated A* algorithm. At the end it returns the optimal path length and a color-coded map that shows the optimized path the robot took and a color gradient that represents the predicted costs at each node.