Projects

Tic-Tac-Toe Reinforcement Learner

I taught a computer how to teach itself to play tic-tac-toe. Reinforcement learning is an area of machine learning inspired by behavioral psychology often used to teach AI to play games. I used a method called Q-learning; this webpage provides a good introduction. Basically I create a map of every boardstate and connect them with the moves, or actions, that bring the game from one state to another. Reward the AI for winning and punish it for losing, and the bot eventually learns how to make good plays consistently. At first, the bot knows only that there are nine possible moves every turn; it doesn't understand that overlapping moves are illegal or even that three in-a-row wins the game. Through the Q-learning algorithm it learns the patterns that lead to a reward. In this case, making three in-a-row and while preventing the opponent from doing the same. In the future I would like to tackle a more complicated game and use deep learning to manage the Q-values.


Dodge Globz Unity game

This was the final group project from a video game design class. We set out to make a fun, party fighting game along the lines Super Smash Brothers or Towerfall. Built with Unity and playable with any dual joystick controller; one joystick controls movement, one controls the shield. Players pick up and throw dodgeballs while using their reflective shield for defense and as a powerful counterattack. Mastering movement by using well-timed jumps and midair lunges leads to an exciting multiplayer experience on the sidescrolling paltformer level.


Aorta Segmentation

The goal of this project was to segment, or pick out, the aorta from each slice of a CT scan by using machine learning techniques. CT scans (cat scans) use X-rays to produce cross-sectional images (slices) of scanned body parts. The associated image shows a CT scan torso slice in the top left, while the masks represent the pixels that comprise the aorta. We used two techniques to segment the aorta out of each slice of torso; sliding window support vector machine (SVM) and a convolutional nueral network (CNN). As expected, the more robust CNN provided better accuracy and precision in this classification task.


Pokemon Augmented Reality

The technical goal of this project was to implement 3D pose estimation for trading cards. This is represented by the labeled white outline superimposed over the cards as shown in the associated video. This pose provides the mathematical basis to animating anything on top of the scene, allowing for augmented reality from any camera orientation. This enables the creation of novel applications that can blend physical and virtual user experiences. This is a very similar problem to the yellow first down line used in american football broadcasts. As the final project for a computer vision class, just about everything was built from the ground up in Matlab. SURF was used for feature detection, k-nearest neighbors for image classification, direct linear transformation to compute the homography, and RANSAC to control for outliers. The prototype proved succesful, but would be greatly improved by using newer techniques in feature detection and image smoothing.


Powder Hunter social skiing app

Power Hunter was a social skiing and snowboarding Android app that allowed users to tag locations on the mountain's trail map with pictures, comments, and terrain reports while sharing with friends or the whole mountain. Built with a friend at MHacks, the University of Michigan's hackathon, it used a tiled mapping system like Google maps, and the backend was implemented with Firebase. The app's mascot, Rusty, was a hit and even earned us a mention in the school's paper.


Cocktail bartending app

Cocktail was a visual drink suggestion and recipe Android app. The first image shows the ingredients screen, where users input the liquors and mixers that they currently have on-hand. Give the phone a cocktail-shaker shake and it will display a random drink recipe that can be made from the available ingredients, as shown in the second image.


Submarine Electronic Control System

Considered the most dangerous club on campus, the human-powered submarine team designs a pedal-powered, wet (not air-tight) submarine each year, sticks a student and scuba tank inside, and races it underwater. I led the technology team from its inception and designed and created all electronic systems inside the submarine. This included a dashboard and the submarine equivalent of a transmission, a variable-pitch propellor controller. Using an arduino, teensy, lcd screen, a variety of motors, and a large array of sensors, I prototyped a system that recorded real-time data, displayed it to the pilot, and performed calculations to control the variable-pich propellor to ensure maximum efficiency.


University of Michigan Human-Powered Submarine (HPS) Team Website

Considered the most dangerous club on campus, the HPS team designs a pedal-powered, wet (not air-tight) submarine each year, sticks a student and scuba tank inside, and races it underwater. Check it out here. I created and managed the team's first ever online presence, leading to more press, members, and funding.


DatFacts parody texting alert service

Based on the classic reddit texting troll, CatFacts, DatFacts extended and automated the prank, enabling the sending of overbearing facts on any topic to any phone number. Built for MHacks, DatFacts proved great fun and caused a bit of a stir on the showroom floor during the hackathon expo. Twilio made the sending of texts very easy, and we scraped Wikipedia for facts.


mem_car  RC car with playback

This is the final group project in a class in which we spent most of the semester building a custom processor with an FPGA. The car was constructed from a kit RC car and mounted on top were the FPGA dev board, a motor driver, a wireless module, a PWM circuit, and batteries. The controller was another dev board with a keyboard and wireless module attached. The car was driven with the WASD keys and remembered its inputs. These could then be replayed back by pressing the R key, thus allowing the car to playback its previous route. In our succesful demo, we navigated the car around a simple maze, drove it back to the start, and then used the playback feature to autonomously manuever through the maze once again.


Connect Four AI Tournament

A friend and I built a Connect Four game shell together and then split off to build competing AIs. Check out the code here.


Snooze n' Shame social alarm clock

Built at my first hackathon (and Michigan's first, MHacks 1), this was an Android alarm clock app that would post shaming Facebook statuses on your behalf for each press of the snooze button.


Rail Gun

Yep, that's a rail gun. Turns out drugstores will just give you spent disposable cameras. Dismantling them for the photoflash capacitors turned into a pretty shocking day. Line up 36 of them in parralel, connect them to the rails through a beefy relay and you got yourself a safety hazard. I somehow turned this into an English class final project. My teacher didn't let me fire it in class, but the physics teacher sure did.


Battleship and Othello AI

My first projects that got me into computer science. Built in Java with a few friends for my high school computer sceince course.