Other Projects

Biomedical Machine Learning - Applying Random Forests and AdaBoost from Scratch to Diagnose Heart Disease and Breast Cancer

I used my own machine learning algorithms employing techniques such as SVMs, KNN, and decision tree classifiers to train on open-source patient biomarker data frames to identify signatures of possible heart disease and breast cancer with over 90% accuracy. The 10 most important features were computationally identified and used to reduce the dimensionality of the model - greatly increasing its overall performance in new test datasets.


Artificial Muscle Fibers Powered by Electromagnetic Induction Heating

In this experiment, induction was used as the driving force for an artificial muscle fiber with no moving parts or valves. Using two 21700 lithium ion batteries, a ZVS induction heater, iron oxide nanoparticles, and a nylon sleeved balloon, an artificial muscle fiber using only induction and phase transitions as its mechanism was publicly demonstrated successfully. The project proved that the muscle fibers were possible to create with relatively inexpensive materials in bulk.


Microcontroller Design

I have designed, prototyped, and sent several PCBs into production. These include ones based on the PIC32, ESP32-S3, ESP32-C3, and several AVR microcontrollers. This was done to create the electronics framework for several of the projects showcased above, as well as many that have not been released publicly. I've utilized tools such as EAGLE, Altium, Atmel Studio, Arduino, PlatformIO, and others to design and program these systems.


Thermodynamic and Fluid Dynamic Computational Simulations

I used MATLAB for studies in heat flow across thick copper plates, and viscous fluid flow in a tube with high friction. Dynamic 3D models were generated from data from models such as the 3D heat equation and the Navier-Stokes equation, respectively. The datasets were turned into animations using timestamps to analyze the temporal behavior of the systems.


"IMU-Gripulator" - IMU/EMG Controlled Robotic Manipulator

Collaborators: Katie Hughes, Hang Yin, Felipe Jannarone, Nick Morales, James Oubre

EMG End-Effector Software: https://github.com/katie-hughes/emgripper 

IMU Robot Arm Software: https://github.com/hang-yin/IMUnipulator

My team and I programmed a robot arm using IMU and EMG sensors to pick and place objects by remotely using the arm with a wearable device. We developed the I2C and PWM controller libraries from scratch used to take in the sensor data and output changes to the position of the servos within the arm. The gripper also incorporated a touch sensor feedback system, that would prevent it from damaging or injuring anything in its grasp with a bang-bang control system. Additionally, several modular designs were made for the gripper, including one with an electromagnet to grab metal objects through inductance, and a marker holder to draw on a whiteboard using the arm.


Supercritical Fluid Data Analysis

In this experiment, we measured the turbidity of several samples of O2, H2, and SF6 as they crossed their respective critical points, over incremental temperature quenches. Turbidity is a measure of the amount of light that can pass through the fluid. Using the turbidity values from recorded image sets obtained by HYLDE we attempted to extract the isothermal compressibility and correlation length for the critical fluctuations, which factored into equations used to find the diffusion properties of the compounds.


Impact Dynamics - Falling/Rotating Jack in a Box Simulation

Using Runge–Kutta methods, impact updates, transformation matrices, and Lagrangian/Hamiltonian mechanics, a model of a 4 pointed "jack" was accurately simulated to bounce around in a translating, rotating box containing it. Energy was largely conserved in the system, with minimal losses due to the discretization estimates made by the algorithm.


Catching a Falling Object with a custom URDF modeled assistive robot in RViz

A single-wheeled robot was programmed in simulation to anticipate and catch a falling brick. The robot would determine if the brick was reachable from the time it would take to hit the ground in free-fall, and then compare it to its own distance to the landing spot, divided by its own translational speed - determined by the wheel diameter and angular velocity. The robot was able to accurately catch the brick and make the decision not to chase it if it was unreachable. Additionally, the robot was modelled as a URDF from scratch, and visualized in RViz.