# EECS 367 Robotics Projects

### Project 1: A* Search

In the first project, I implemented the famous A* Search Algorithm for a 2D world. (Part of this project was implementing our own priority queue using heapsort.) The video below shows my A* implementation in a demonstrative scenario.

### Project 2: Physical Simulation and PID Control

In the second project, I implemented a physical simulation for a pendulum using Euler's method and velocity Verlet. I then implemented a PID controller for a motor attached to the pendulum, in order to move it to the desired position. The video below demonstrates the velocity Verlet integrator, and the PID controller.

### Project 3: Forward Kinematics

In the third project, I implemented the forward kinematics hierarchy for an arbitrary robot. This included implenting various basic matrix routines, and recursively computing the pose of each link and joint in a given robot. The video below shows the pose of each link of the robot updating as the joint states are modified.

### Project 4: Finite State Machine (for a Dancing Robot)

In the fourth project, I implemented a finite state machine to control a robot choreography system. In other words, *I made a robot dance to some music.* The video below presents my robot dance sequence.

### Project 5: Inverse Kinematics

In the fifth project, I implemented inverse kinematics via graient descent. I did this by first computing the Jacobian matrix of the robot's manipulator (by traversing across each joint in the kinematic chain), and then used the Jacobian's pseudoinverse or transpose to compute the gradient descent step. The video below demonstrates the robot trying to maintain the position of its end effector while I drive it around.

### Project 6: RRT Planning

In the sixth (and final) project, I implemented the RRT planning algorithm, and a variant, RRT-Connect. For planning with the robot, this also required implementing axis-aligned minimum bounding box (AABB) collision detection. The videos below demonstrate RRT-Connect being used for planning in the 2D world first used for A* search, and for planning with a robot.