Pathfinding algorithm for many objects simultaneously
Modified A* algorithm to go from starting position and velocity to ending position with zero velocity in the shortest amount of time
Chooses paths prioritizing smaller sums of current time(from start to current node) and optimal remaining time(calculated with a piecewise function derived from kinematics), as well as preferring paths not predicted to collide with existing paths
Adjustable constraints for how close objects may come to each other, maximum magnitude of acceleration, and disallowed positions
Priority given to paths calculated first
Generates paths in discrete steps of adjustable size
Made in Unity with C#, but no logic depends on the actual 3D simulation's physics or geometry
Entrapption Contraption Renders
The robot my team made for the FTC CENTERSTAGE season
Mostly shiny, metal parts and matte 3D prints
The first animation is a close-up tour of the outside of the robot; the second is a simulation of a barrage game elements, 'pixels', falling around the robot
The falling pixels are a physics simulation with a multitude rigid objects falling and colliding
Sphere Localizer
Uses OpenCV and Python in a Jupyter Notebook to process frames at 10fps
Hough circle transform used to detect a green sphere of known size and calculate its radius in pixels
Angles are calculated from detections' positions in the frame are calculated using the focal length of the camera and the distance away is calculated from the radius of the sphere
Position estimations are accurate within roughly 30mm as long as the sphere is within about 5m from the camera lens
3D position data is saved to estimate the path of a projectile sphere with a quadratic bezier curve
Mandelbrot Set
This uses HTML and JavaScript in Replit
Pixels on a canvas element correspond to the complex plane with the real parts of numbers being horizontal
The Mandelbrot Set fractal is displayed as black on a colorful background, where the color represents the amount of iterations of the recursive equation Z²+c until the value is estimated to diverge
Zooms into/out of where the user clicks by an adjustable factor
Can distinguish pixels approximately 10-16 apart
AI Worksheet Completer
Uses edge detection and contours to form a quadrilateral of interest to a piece of paper detected in the frame
OCR used to detect questions mostly accurately
OpenAI's GPT3.5 model answers the questions concisely and the responses are added under the respective question
After answers are added, the quadrilateral of interest, including the annotated answers, is warped back to its orientation in the original frame
Made in Jupyter Notebook with Python and the libraries OpenCV, OpenAI, numpy, and pytesseract
Assignment Grading Tool
Made with HTML, CSS, JavaScript (React), and Python with a team (I worked on both frontend and backend)
Evaluates large numbers of student essays using a LLM based on customizable categories from a rubric editable by the user
OpenAI's GPT3.5 model was used to analyze the essays
Prompt engineering and trial/error was used to get reliable, structured outputs out of the AI completions
Scores for each rubric category as well as comments about areas of improvement are labeled with student information and compiled into a table
The table can be exported to a Google Sheets document automatically
Platformer Game
Mostly complete game made in Unity
The player navigates 2D spaces collecting floating crystals with various effects
The player can create pairs of portals on objects, which he can go through such that his exiting momentum relative to the second portal is the same as the entry momentum relative to the first
When portals are created, time slows down to make the gameplay easier and smoother
There are 8 levels, each with unique layouts and comments
Vision Assist
Made with Python, JavaScript (React), HTML, and CSS with a team of students (I contribued to the backend)
Uses an AI trained from hand-labeled data of common furniture items as well as a model pre-trained on the COCO dataset
Approximately 2 frames from a device camera processed per second, passing through MiDAS depth estimation and the two AI models to analyze surroundings
Depending on the mode, emits audible feedback through text-to-speech describing potential hazards, or alternatively vibrates the device with a frequency representing the direction to adjust in order to avoid obstacles
Integrated into a website with HTML and CSS, as well as an app using Dart in Flutter (not downloadable)
Leviathan Renders
The robot my team made for the FTC Into The Deep season
Variety of materials and textures from different manufacturing processes represented
Fluid and rigidbody simulations involved as well as depth of field keyframing
NYT Game Solver
Made in Code.org with JavaScript and included databases of words
Computes solutions or optimal guesses for Wordle, Spelling Bee, Letter Boxed, and Sudoku
Wordle solution uses brute force, like Spelling Bee and Letter Boxed, to narrow down solutions and information theory to suggest guesses optimally
Sudoku solver uses a recursive backtracking method
Five pages, navigable with buttons, each with various user inputs
Asteroid Hazard Predictor
Trains and tests on a dataset of 840000 asteroids from NASA from Kaggle
Data thoroughly analyzed using matplotlib and pandas
SMOTE used to oversample hazardous asteroids, balancing the training data
Bagging classifiers, random forest classifiers, and decision trees were tested, all with accuracy above 99.95%
All work done from a Python notebook; results compiled into a poster
Solar System Simulation
Uses ephemeris and planet data from JPL and NASA
Eulers method used to define and test trajectories through the solar system or simulate the motion of a spacecraft
Created a mission from Earth to Neptune's eccentric moon, Nereid
Adjustable scalars for time, planet sizes, Sun size, and viewing region size
Made with C# in Unity
FTC Scouting Tool
Uses HTML, CSS, and JavaScript in Replit
Tracks POWERPLAY robots' capabilities in significant detail
Game timer and score tracking states(autonomous, driver-controlled, and endgame) consistent with matches
Data compiled in a spreadsheet transferrable to Google Sheets
Deconstructing Cubes
A 3D platformer-like game with no gameplay other than 3D motion with gravity; no particular goal
When a cube comes in contact with the capsule, it breaks apart into eight cubes of half the side length and slightly different hue
Interesting recursive patterns arise when the player falls deep into a large cube