Computer Scientist | Roboticist | 3D Printing and Graphics
Erin M. Gunn
I am a Computer Scientist and Roboticist with experience in computational geometry, computer vision, 3D reconstruction, mechatronics, 3D graphics and 3D printing. My dream is to work with a diverse team of engineers and researchers to solve difficult spatial reasoning problems on resource constrained hardware.
With professional development experience dating back 10 years (that includes publishing over 20 games), I have returned to school to fill some of the knokwledge gaps my google university education missed. Having tested out of numerous courses up to the junior level, I have taken several graduate level courses and excelled at the research and independent study opportunities I pursued. I will graduate in December of 2022 with my Bachelors of Computer Science degree.
The banner at the top of my website is a recreation of the first original program I wrote. The original version was written in C++ and rendered using OpenGL. I wrote it when I was 16 after learning the skills necessary from a pair of books.
If the highly motivated spatial problem solving mindset demonstrated on this page is something you seek, please don't hesitate to contact me: erin at eringunn.com.
Wolf Robotics LLC
July 2018 - September 2019
Role: Software Engineering Intern
- Researched, planned and led development of a program to automate the identification of potentially weldable seams in customer parts using an off the shelf RGB-Depth camera
- Planned and executed documentation project that enabled our client to address weldability issues with the design of over 300 parts
- Designed and implemented a robot work cell programming proof of concept, enabling software group leaders to make informed decisions on graphics APIs and inter-process communications solutions
Computer Science Club FRCC
August 2018 - December 2019
Role: Officer of Robotics
- Designed, built and programmed line following and sumo robots using off the shelf microcontrollers and sensors
- Organized and ran line following robot competitions, exciting memebers about robotics and control
- Developed and led talks on ‘Github for Students’ and ‘Creative Coding’
- Repaired and trained students on an old ‘Shield Bot’ so that freshmen Java students could implement proportional control in C++ on an Arduino controlled bot for their final project
Freelance Game Developer
August 2012 - July 2018
- Conceived, led and executed the design and development of cross platform games and applications
- Developed workflows that reduced game development time by 50% in subsequent releases
- Uncovered and resolved an issue in the underlying development platform to enable highest quality animations
- Recognized by open source software community for high quality contributions and documentation
KIPP Eastern North Carolina
July 2013 - June 2015
Role: System Administrator
- Managed and supported a multisite Cisco/Windows infrastructure and 600 end user devices
- Planned and executed a transition from Microsoft Exchange to Google Apps for the entire district
- Initiated and executed a testing environment transition, dramatically increasing productivity through increased stability, security and performance
- Identified, proposed and executed changes to the wireless infrastructure to address coverage gaps and issues with bandwidth
- Designe, deployed and configured the entire infrastructure of a new middle school.
2006 - 2012
Role: Assistant Superintendent
- Assisted Project Manager and Superintendent in construction of HUD housing projects ranging from 2-16 million dollars. Projects were generally delivered ahead of schedule and under budget.
- Performed direct oversight of building code, staffing, and warranty issues.
- Coordinated between suppliers and subcontractors to optimize schedule outcome
Implicit CAD Modelling Kernel
Project Type: Personal Interest
Skills: C++ | GLSL | OpenGL | CMake
Goal: Develop a CAD kernel that improves upon OpenSCAD and explore 3D print slicing directly from implicit geometry.
- Implemented realtime raytracing using the sphere marching algorithm and implicit functions
- Constructive Solid Geometry (CSG) is implemented using a binary tree and code generation to hot-reload changes at runtime
Project Type: Personal Interest
Skills: C++ | OpenGL | Box2d | Raspberry Pi | UDP | Serial | CMake | 3D Printing | CAD | Mechatronics | Electronics Reverse Engineering
Goal: Study the effects of latency and packet loss on a remotely controlled inverted pendulum.
- Developed an OpenGL debug viewer that renders the inverted pendulum and a simple GUI
- Designed and implemented a communications protocol with a platform independent API
- Designed and executed experiments that identified that a simple PID controller can maintain stability with small disturbances with latency up to 1 second and packet loss up to 75%.
- Executed the design and development of an API that facilitates rapid development of experiments
- Coded, modeled and constructed an absolute position sensor using two infrared reflectance sensors along with debugging tools
- Reverse engineered and modified the inkjet cartridge motion system of an HP printer to serve as a cart
MTLib - Computational Geometry Practice Implementation
Project Type: Self-Directed Study
Skills: Computation Geometry | Algorithms | C++ | CMake | Test Driven Development
Goal: Learn the foundations of computation geometry to feed my interest in algorithmic robotics.
- Independently completed the Geometric Algorithms course offered by Utrecth University over summer break
- Developed a small C++ library with some of the algorithms and datastructures I learned in the course
- Employed Test Driven Development to ensure correctness and mitigate numerical issues
Triply Periodic Minimal Surface Infill
Project Type: Funded Research @ CSU
Skills: C++ | Python | 3D Graphics | 3D Printing | Numerical Methods | Computational Geometry
Goal: Design and implement an algorithm that enables 3D printing of Fisher-Koch S for biological tissue manufacturing research.
- Developed a novel algorithm that can be used to generate toolpaths in any 3D printing software that supports non-manifold surfaces
- Identified, documented and fixed a bug in the CuraEngine 3D printing slicing software that fixed toolpath generation in ‘Surface Mode’ printing
- Designed and developed a python+Qt application that is used in the BioMedical laboratory for 3D printing bone scaffolds
Status: Preliminary testing on the efficacy of Fisher-Koch S as an infill pattern for 3D printed bone scaffolding is underway. Given promising results, the algorithm and software I developed will be used in clinical trials.
RTLib - A Raytracing Library
Project Type: Coursework
Skills: C++ | CMake | Ray-Tracing | 3D Graphics | Data Structures
Goal: Implement a reference ray-tracer and explore methods of optimization.
- Implemented my 4th raytracer as part of course requirements
- Went above and beyond, implementing an emberrassingly parallel bounding volume hierarchy construction algorithm that executes in O(lgn) time given perfect parallelism
- The result was a raytracer that could render 20,000 spheres and 2,000 triangles at a depth of 7 in under a minute on the CPU
Altitude Heading and Reference Sensor Driver for UAVs
Project Type: Funded Independent Study @ CSU
Skills: Teamwork | Project Management | C++ | Python | UAVs | Serial | GDB | Microcontrollers
Goal: Implement a LORD MicroStrain AHRS sensor into Ardupilot.
- Coordinated with a team of 5 undergraduate students to implement a driver for an industrial grade altitude, heading and reference sensor
- Leveraged existing experience to assist teammates in underestanding the structure of the massive Ardupilot code base and electronics communications interfaces
- Assisted teammates with debugging remotely executed code on a microcontroller using gdb
- Designed and led training on the fundamentals of an RTOS, packet parsing and error checking
Real Time Visual Odometry Prototype
Project Type: Personal Interest
Skills: C++ | OpenCV | Computer Vision
Goal: Leverage OpenCV skills learned in my graduate level image computation course in a new way.
- Implemented real time visual odemetry using ORB features of individual video frames, built a kd-tree of the features and approximated the homography transformation between frames using RANSAC.
- Completed in one day
3D Printer Sensor Integration
Project Type: Funded Research @ CSU
Skills: Teamwork | Project Management | C++ | Python | 3D Printing | Raspberry Pi | Arduino | JSON/MessagePack | Serial
Goal: Design and integrate novel 3D sensors with industrial data collection tools to enable process control for increased reliability.
- Designed and implemented a communication protocol that facilitates data transfrer of sensor data from an Arduino to a Raspberry Pi over serial
- Created an OctoPrint plugin that streams sensor data to a industrial data collection system while a print is in progress
- Made design decisions based on the understanding that the implementation must be simple enough to allow undergraduate engineering students with little to no programming experience to add new sensors and process statistics
Project Type: Independent Study through Google University
Skills: Game Development | Algorithms | Graphics
Goal: Showcasing some projects I completed along my independent learning path.
I started my journey into independent game development around 2010. Along the way, I wrote numerous proofs of concept and prototypes, learning data structures, algorithms and clean coding practices along the way. Here are some of the highlights that accurately demonstrate my programming interests to this day.
This is the project that helped me start landing contract work. In it, I implemented a finite state machine, a quad-tree, steering behaviors, pseudo 3D graphics, marching squares, A* path finding and navigation meshes.
Gameplay Video. Warning: Video contains some gore.
Ludum Dare #?
Another Ludum Dare game I made in 48 hours. This game ended up going through several iterations post-jam in my first attempt at completing a real project. I think that this project is the first time I implemented a PID controller. I also implemented a Catmull Rom spline for a custom camera controller.
Artificial life is one of the most interesting topics I've ever explored in my programming journey. This is a brute-force implementation of Craig Reynolds steering behaviors.
Brute force gravity simulation. I remember wanting to recreate the 'galaxy' screensaver that came with X11.