This project contains 4 lab assignments and a cumulative final assignment in MEAM520 Introduction to Robotics at the University of Pennsylvania. In this course, I implemented an FK (Forward Kinematics) algorithm using DH (Denavit–Hartenberg) parameters, a 2D IK (Inverse Kinematics) algorithm using geometry, an Inverse Velocity Kinematics solver using Jacobian Matrix, an IK solver using numerical optimization, and path planning algorithms using RRT (Rapidly-Exploring Random Tree) and A*.

The final assignment required to grab blocks on static and dynamic surfaces, and place them in a given goal area. The detection was implemented by the teaching team using OpenCV and AprilTags. In the cumulative final assignment, I completed the tasks using the combination of algorithms that I built throughout the semester with newly written functions for rotation representation conversion between rotational matrices and quaternions, real-time angular velocity calculation, AprilTags pairing between two detections, etc.

All algorithms built in this course were executed on ROS (Robot Operating System). Throughout the semester, most testings for algorithms were done in the Gazebo environment. The final assignment was executed in both Gazebo and the physical PANDA arm.

The code can be found here. The report of the final project can be found here.