Toys and Course Projects

On this page, I'll begin listing my pet projects, course projects, and toy code as I develop them or find them!

Course Projects

First Person 3D Spatial Sound Turret Game (Originally Physically-Based Modelling)

This game grew out of a collaboration with Joe Di Natale. In this game, the user controls a ship flying over a base the user must defend. At random intervals, an enemy spawner creates spheres which fly around the user, menacing his base! The user relies on vision and 3D spatial sound propagation to localize the enemies and destroy them with either a physics free lazer or a physics-enabled machine gun. The original motivation of the project was completely decoupling the user's head with the turret control. The user can rotate freely without affecting the turret orientation, and can move the turret independant of head motion. We were curious as to whether or not totally decoupled vision and turret control coupled with 3D spatial sound would reduce nausea. This project integrates the Unreal Engine 4 with GSound (a sound propagation library developed at UNC), the Oculus Rift, and an XBox 360 remote. The project presented a substantial challenge in extracting triangles from arbitrary constructs in Unreal Engine, developing an extensible weapon inventory system, developing an extensible enemy system, integrating the propagation system, and properly decoupling turret control and user vision. Below is a demo video and selected screenshots from the project.

Create Games ( Robotics Course)

Create Games was a collaboration with Matt Adams. The project focused on developing a framework for using the I-Robot Create (Roomba sans vacuum) as the pieces in a life-size board game. The system works as a two process tandem system. The Vision system tracks the markers on the Creates and uses a kalman filter to smooth position and trajectory estimation. It provides this data over a network interface.

The GameController accepts user input, controls the parameters of the game, translates game-space to world space, and issues commands to the robots via bluetooth. The general design of the system is to provide a sufficient framework to build board games out of the creates. We coded as an example 1 game, tic tac toe. Below is a video and assorted screenshots from the project.

Ballistics / Spring Simulator (Physically-based Modelling)

The ballistics simulator was used to demonstrate forward integration in physically-based modelling. The turret simulator, built in Unity, allows the user to control the gunpowder amount, gunpowder force, mass, drag, gravity, azimuth, heading, and integration method (forward euler, midpoint, RK4) for a ballistic projectile / turret system. My project treats the simulator as an interactive game, allowing the user to shoot many projectiles and offers a chase cam to see the projectile flying. Flight data is output to a log file. The simulator also supports an experiment mode in which the parameters are varied according to a distribution and successive trails are conducted automatically with no user input.

The Spring simulator demonstrates forward integration with a spring-mass system. The user can vary the mass, damping, spring constant, gravity, integrator (forward euler, midpoint, RK4), and drift control parameters of the system. Spring position over time is recorded to a log file. This simulation also supports an experiment mode in which parameters are varied and many trials are run without user input. Below are some screenshots and a brief demo video from the project.

Collision Detector (Physically-based Modelling)

The collision detector projected integrated Unreal Engine 4 with PQP, a collision detection library developed at UNC. When the simulation starts, projectiles are spawned with random position, velocity, and rotation, and bounce around a closed cube. PQP detects collisions and overlapping triangles, and I use an averaged collision normal to invert each projectiles velocity along the normal, generating visually plausible collision resolution. Angular velocity is not altered in the simulation. The user controls the type of spawned projectile, the number of projectiles to spawn, and the simulation speed (delta time and time acceleration). I implemented a bounding sphere method for coarse collision detection / acceleration. In addition, I implemented an experiment mode where multiple trials are run in succession. The average frame computation time is recorded to a file each time step. Below is a selection of screenshots and brief demo video from the project.

Bead on a Wire (Physically-based Modelling)

This simulator allows the user to interact with bead suspended on wire. The bead is held on the wire by a spring-mass system. The project lets the user drag the bead around the screen and offers the ability to vary system parameters.