Line Follower (2016)

Competition

Built line follower for Intro to Engineering Design mini-project.

Result

Won class competition for fastest design to complete the entire course. This was out of about 10 designs.

Design

Three light sensors in a row, with the center one slightly forward of the other two. If an edge sensor and the center were activated, the robot would turn slightly toward the edge on which it was activated. If only an edge sensor was activated, the robot would turn sharply in that direction. Otherwise, it would go straight. Calibration occurred automatically on start.

 

Collapsible Gate (2015)

Background

I’m a member of Plast Ukrainian Scouting. At camp, we have a tradition of building a gate (“брама”) every year and then showing it off in a ceremony. This year, our theme was “unbroken” (“незламні”), and, in keeping with that theme, I designed and coordinated the building of a gate which would start off seemingly broken on the ground, and then the entire camp would collaboratively lift it. The audience was stunned with what they saw. I’m so proud and thankful to have worked with such an amazing group of people that we could pull off one of my craziest ideas, together, unbroken.

Gallery

Credit to GreyBack Studios for most of these pictures.

Instrument DB (2015)

Project

Build database for keeping track of data from a variety of instruments on multiple computers. Built for a subproject on the Xenon Dark Matter Search project.

Features

  • Transparently handles time synchronization to the main server
  • Makes sure time increases monotonically, ignoring changes to the system clock
  • Corrects for clock drift
  • Accepts data from multiple sources over the network
  • Export selected data fields on a customizable time interval (ex Pressure A and Voltage B every 5 seconds from 10/15 – 10/19)
  • View live data feeds on a customizable dashboard
  • Local machines tolerate central server or network failure and save data backups until reconnection

Gallery

Tetris AI (2014)

Competition

Build an AI to play Tetris. The team which clears the most rows before losing wins.

Result

First Place. The AI was shut off after clearing 50,000 moves in the competition. It made it to over 1 million moves in testing.

Algorithm

Every possible rotation and position of current+next piece were placed on the board and the “badness” of the board was rated. The board with the lowest badness was selected and the current piece placed in that position. Badness ranking was determined by measuring a variety of factors (ex mean column height, number of holes, column height std dev) multiplied by constants. These constants were tuned using a genetic algorithm running on a laptop for a few days.

Additional Links

Source Code: Github

Maze AI (2013)

Competition

Build an AI which controls a player inside a maze. The player can only see a certain number of places in each direction (5 in the video above). There are doors which can only be opened after picking up a key. The player is trying to get to the goal position in the fewest number of moves possible.

Result

Second place despite getting the highest score. Don’t even get me started.

Algorithm

The AI builds an internal map of the entire board as it explores. After each move, it re-evaluates where it should explore based on current knowledge, generally going to the closest unexplored place at any given time. It knows whether or not a door can be opened based on the number of keys it has and also decides to grab known keys if they are very close compared to the distance to the next unexplored area.

Additional Links

Source Code: Github

Flood-It AI (2011)

Competition

Build an AI to play Flood It.

Algorithm

Used a heuristic based on Dijkstra’s algorithm for the majority of the board. Switched to a brute force for the end.

Result

Dead last. The scoring was based on both fewest moves and shortest amount of time. In the competition, we got 1st place for moves but last place for time because we spent too much of it in the brute force stage. Tweaking a single constant (percent solved using brute force) would have brought us into first place.

My Responsibilities

Worked as part of a team of 5. Each of us was responsible for writing a handful of solvers using various algorithms so we could benchmark them against each other. I came up with and wrote the heuristic algorithm we ended up using, and I also helped with writing the brute force solver.

Additional Links

Source Code: Google Code