Typescript + NodeJS + Thrift through gRPC
Typescript, Typescript Compiler API, Thrift, NodeJS, gRPC
Data-driven feature geolocation
Geolocation algorithm that leverages internal data to provide a faster and more desirable bounding box for given geospatial features (e.g. neighborhood, city, zip code, ect.). It is used to geolocate and center a map around a user's desired feature set. To accomplish something ready for production it required collecting geoJson points and the associated strength for each point. Outliers were identified by taking the standard distribution of each point's distance from the center of mass of the initial set. A clean bounding box could then be returned to the caller and used as needed. By using data to find the feature a user is searching for we could provide a truer bounding box for the results in a shorter amount of time than using an external api. The new geolocation system provides users with a better map experience and saves money by removing an expensive third-party api dependency.
Autonomous mobile robotics project
C++, Turtlebot2, Kinect, Robotic Operating System, Path Selection, Visual Odometry
Turtlebot2 with a Kinect sensor for simulated laserscan and visual marker observations. Over the course of the semester we built out an autonomous framework in the Robot Operating System (ROS). Each lab of the semester we built the functionality of an autonomous mobile robot and a simulation system for testing. I had the opportunity to complete a related independent study in addition to the normal coursework. It covered stereoscopic vision for autonomous robots. Over the semester I researched existing technology, worked towards implementing a stereo vision module for the Turtlebot2 and wrote a final term paper on the work I completed.
Haptic feedback glove for movement impaired patients
A composite knit glove with five independent motor and pressure sensor units connected to chords on each finger. The pressure sensors and motor units were managed using an Arduino Due. The design specifications required a system that could manage the input stream from each motor, command input from the server, and an output stream for visualization on the client interface. The Arduino communicated with a desktop application through a USB connection. This allowed for a low latency stream between the Arduino driver and the server that hosted a web interface. The desktop application spun up a server that hosted a user interface to the glove which allowed for visualization and interaction with the glove.