Projects

Embroidotron

For the final project of the course Electromechanical Systems Design course at Carnegie Mellon University (CMU), I worked on a team to create a system capable of converting a sewing machine to an embroidery machine. The Embroidotron is designed to convert any standard sewing machine into a computer controlled embroidery machine. Our goal was to make machine embroidery more accessible, hackable, and fun. We set out to easily convert a sewing machine to a CNC embroidery machine without permanent modification and at a moderate cost.

Granular Planning

For one of the final projects in a planning course at Carnegie Mellon University, I worked in a team to develop an approach that can be utilized for solving planning involving granular materials through the use of weighted A* search.

We tested our approach on a planar robot wiping task that aims to move a collection of cylinders into a goal region while optimizing the total number of actions taken in the plan. The transition model we use to model collisions between the objects in the environment and the robot uses the PyBullet simulator for state estimation and to determine the resulting dynamics of the collisions. Additionally, our transition model consists of a less computationally expensive free space motion transition model to increase performance. Our method was able to successfully produce plans for a variety of environment configurations.

Robotic Arm Motion-Planning

For an assignment in a planning course at Carnegie Mellon University, I developed various sampling-based planners for a robotic arm to move from one configuration to another. The planner returns a set of sequential angles correlating to moves from the start to the end configuration collision free.

I used three variations of the Rapidly Exploring Random Tree (RRT) algorithm:

  • RRT
  • RRTC
  • RRT*

I compared their results in average planning time, success in generating solutions quickly and the number of vertices generated. The planner was written in C++ and simulated in MATLAB through the Mex function.

Drone with Motor Failure

I worked on two separate controllers for flying an Unmanned Aerial Vehicle (UAV) as part of an assignment for a controls course at CMU. The primary objective was to develop a baseline Linear Quadratic Regulator (LQR) controller to fly the UAV without motor failure. The secondary objective was to design a Model-Reactive Adaptive Controller (MRAC) that would help stabilize the quadrotor if it lost more than half of thrust power in one of the rotors.

The project was designed solely in Webots and performance of both controllers evaluated with plots and videos generated at the simulations’ conclusion. Both controllers were developed in Python.

Tesla — Autonomous Vehicle

This project was part of a controls course at CMU. The purpose of this assignment was to look at and design various ways of controlling an autonomous vehicle, in this case a Tesla Model 3, around a sometimes specified track. The various controllers analyzed and developed are the following:

  • Proportional, Integral and Derivative Controller
  • Lateral Full-State Feedback Controller
  • Lateral Optimal Controller
  • Extended Kalman Filter Simultaneous Localization and Mapping Controller

We used a bicycle model to describe the vehicle dynamics where the car is modeled as a two-wheeled vehicle with two degrees of freedom defined separately in longitudinal and lateral dynamics. The project was designed solely in Webots and performance of both controllers evaluated with plots and videos generated at the simulations’ conclusion. Both controllers were developed in Python.

A* Search

This assignment was part of a planning course at CMU. The goal was to develop a planner that allows a point robot to catch a moving target in a set amount of time. During execution, the planner is given an 8-connected 2D gridworld where the robot can move at most one unit along the X and/or Y axes. Each cell is associated with the cost of moving through it. Each map has a collision threshold specified for the planner and any cell with cost greater than this is considered an obstacle the robot cannot traverse. Also given are the start position of the robot and the trajectory of the moving target as a sequence of positions. The target moves at a speed of one step per second.

I designed a planner using weighted A* search. The heuristic I used was a combination of weighted A* to the nearest trajectory point and the object itself if it was relatively close to the robot. To handle and keep track of the states I used linked lists for both the Open and Closed sets.

The planner is written in C++ and executed through the Mex function of MATLAB.