February 28, 2008

More Projects

These are more recent projects I haven't written up yet.

  • The Laundry Needle, a ridiculously easier way to carry laundry.
  • Olin HVAC, simulating Olin's heating and cooling expenses.
  • Heat-Sink optimization, heat transfer project from Transport Phenomena.
  • Brainfunk, a Flash interpreter for a silly programming language.
  • EAPIsland, an experimental virtual 'meeting room' in Second Life
  • Custom data acquisition software for a professor's usb source measure unit.
  • StreamLight, an injection molded bathroom nightlight

November 21, 2006

K'NEX Computer


Fall of my junior year I began work on logic gates made out K'NEX using a system of balls. Two members of my Computer Architecture class joined me and we set out to create an entire 4-bit computer. The picture above is of a 4-bit adder.

There are more photos and updates at knexcomputer.blogspot.com

November 4, 2006

Fred the RoboWheel

While working in the Olin Robotics Lab, Jeff DeCew and I decided to make a flexible wheel robot that would deform its shape in order to roll. After we successfully created a 10-minute feasibility prototype, I began work on a simulation. I modeled the flexible plastic rim with masses and hinge springs, comparing my model's deformation to compression data we took with an Instron machine.

From there I created a control system that changed the shape of the wheel based on which section was touching the ground. I tried this on 3 different robot designs.

The simulation was written in Python using the VPython 3D library. All physics were hand coded by me.

October 10, 2006

Hello, Mr. McClane...

This is another modeling assignment for my 3D animation class. We had to model a human head using polygons. I chose Bruce Willis, cause he's a badass... and he's bald.

Again, this model was done using MAYA 6.

September 20, 2006

Airship

I took a 3D animation class at Wellesley College. Our first assignment was to model an airship using NURBS.

It's a cross between a tie-fighter and harrier jet. The ship was modeled using MAYA 6.

August 10, 2006

Keep Talking

Keep Talking is a puzzle game that utilizes constraint based physical dynamics. The only trick to the game is that you use your microphone to play.

The main character is a smiley face you move with your mouse. To affect things in the environment, you yell, causing objects to be attracted or repelled.

It's surprisingly fun to play, but even more fun to watch someone attempt to play it.

It's available on RRRRThats5Rs.com, a site full of frustrating games by Ben and me.

May 9, 2006

Virtual Model Control Scripts

In my research position with Gill Pratt, I learned about Virtual Model Control. It is a method of control that allows the user to abstract away the complexities of a multi-joint robot. Instead of writing algorithms to control the robot at the joint level, the user can create a control system which acts upon a set of 'virtual' parts. This can make control more intuitive, and it makes it very easy to try different ideas without having to re-adjust everything at the joint level, since that is done automatically.

What isn't done automatically is the initial math needed to transform the virtual part forces into joint level torques. I wrote a script which takes a description of a robot, computes the kinematics, and does the math necessary to make virtual model control possible. This script was written in Python and relied heavily on symbolic math manipulation. I found a script that did basic symbolic operations, but I modified it to include basic factoring, trigonometric operations, matrices and jacobians.

This video was created by my project partner Jeff DeCew as a demonstration of our work. The 'Yobot' acts as if there are springs attached to it. There are virtual springs between it and the ground as well to keep it upright. The spring lengths are dynamically changed during the video to make the robot move. At one point they are turned off and then back on again.

March 12, 2006

Ultrasonic Positioning: 'Mass-Spring' Tracking Algorithm

Classmates of mine built a 3D Ultrasonic position system for a class project. I joined the project the next semester and developed a better tracking algorithm.

Ultrasonic positioning involves using sound waves to determine an object's distance from a number of known locations, and then computing the location of the object. There are a number of algorithms for doing it; one of the more popular is known as the Least Squares method. The method uses annoying linear algebra, and can break if given bad input data.

While trying to understand Least Squares, I developed a positioning/tracking algorithm that was more robust and feels more intuitive. Instead of building and inverting matrices, I create virtual springs between my known locations and the object I want to track. Since springs naturally want to settle to a certain 'rest' length, I set that length to be the ultrasonic range measurement for the given sensor. The object's initial position starts as a guess, and the springs apply forces until it reaches its true location.

Since the object is modeled as a mass, it has inertia and can resist impulse spikes from the springs due to bad data.


The simulation was written in Python. Visuals by VPython.

December 15, 2005

"Brain" Book

I made this book for my Advanced Digital Photography class. It consisted of a series of photos individually suspended from cardboard frames. The photos were hung using thread, so that it was possible to look through the pages of the book.

The threads give the feel of neurons, and the entire book was supposed to be like looking into the mind's eye.

November 29, 2005

Cell Membrane Simulation


Mark Cavolowsky, Adam Bry and I were on a team that created a basic model of the cell membrane. The simulated cells grow and divide, suspended in a simulated fluid. Each cell consists of a loop of masses and springs. The masses interact with the fluid model, which is just a simple diffusion grid. The simulation allows the user to change the concentration of the fluid by clicking on an area with the mouse. The varying concentrations cause interesting effects. Cells can even shrink or burst if the concentration is too extreme, which is what happens with real cells.

With only a couple cells, the simulation is actually fast enough to be interactive. But if left running, the exponential growth of the cells puts tremendous strain on the CPU. It took 20 minutes to compute the final frame.

The simulation was done using the PyGame package for Python.

November 27, 2005

Boids: Bird Flocking Simulation

I implemented a 3D bird flocking simulation (also known as Boids)as part of an emergent behavior project for a class called Computational Modeling.

The program was written in Python using VPython.

October 16, 2005

Numerical Methods


For my Differential Equations class, I researched and implemented various numerical methods for solving ODEs. I learned about estimating error, stiffness, the Runge-Kutta method, and adaptive step solvers.

October 1, 2005

The Secret Lives of Baking Cups


This picture one of a set of images from a project for my Advanced Digital Photography class. I was given a set of baking tins and asked to "think using a different perspective." I decided to pretend that the cups were alive, and I photographed them in different scenes demonstrating their behavior and increasing intelligence. Click the photo to view the whole set.

September 29, 2005

Unique


I took this photo for my Advanced Digital Photography class.

May 1, 2005

USB 3D Arm Input Device


Olin has a class called Principles of Engineering where students work in teams the entire semester creating their own "mechatronic" project. When I took the class the focus was on making a USB device. Mark Cavolowsky, Zac Borden and I created a 3D input device. They did the main mechanical design, while I did the PIC assembly programming and the host computer software for interpreting data from the arm.

We intended it to be a drawing device, but the potentiometer resolution wasn't that good. Occasionally I still use it to interact with 3D objects.

The project website can be found here.

April 21, 2005

Wave Simulation


Mark Cavolowsky, Jeff Dezso and I programmed this wave simulator as a final project for a class called Engineering of Distributed Systems. Since light is wave, we decided to program various different light experiments, including a parabolic mirror, a prism, and the double slit experiment above.

This video shows the double slit, prism, and "sonic" boom experiments.

The simulation was done using MATLAB.

March 27, 2005

More Bouncing Balls: 3D Collision Detection

Spring semester of my freshman year I did a 1 credit Passionate Pursuit where I researched collision detection algorithms. In the process I also learned about OpenGL, rendering, triangle meshes, quaternions, gimbal lock, and surface normals.

The final deliverable was a simulation of a ball bouncing in 3D on a mathematically defined terrain. My friend Doug helped write the simulation in C++ with OpenGL, but I eventually moved to Python because development was much faster.

December 18, 2004

Inverted Pendulum


This is a project from a math and physics course my first semester in college. We were asked to model a second-order system. My group chose to model an inverted pendulum on a cart. After deriving and validating the equations of motion, we decided to implement a control system to keep the pendulum balanced.


After the class was over, I spent a weekend building a real version out of Legos to test our control system. It turned out that the 'best' parameters were not as good as the model predicted, but it did predict failure regions accurately.

This video shows working system. The pendulum itself has very little friction, both in the joint, and on the track. I used a potentiometer to sense angle, and I calculated angular velocity by having the pendulum back-drive a motor.

The control system was created in Simulink. The control circuit involved op-amps in negative feedback. The computer controlled the circuit using the very annoying Simulink Real-Time target and a flaky PCMCIA data acquisition card from Measurement Computing.

December 13, 2004

Window Walker

The final project for the Design Nature class was a walker that had to climb up a window using bellows, suctions cups, and one motor. I worked with Mark Cavolowsky, Jeff Dezso and Hossam Banaja to create one of only 3 walkers in our grade that succesfully climbed vertically.

For some reason, Mark and I decided not to use any gears in our design (we were the only team to do this). Instead, I came up with a crazy crankshaft/linkage contraption to transform the motor's rotation into the linear motion required to drive the system. What made it more complicated is that the motion of the bellows needed to be 90 degrees out of phase with the expanding/contracting motion of the device.

Video of the walker working for the first time. You can see Mark and Jeff's reflections in this window.

October 11, 2004

Hopper Project


Freshman year, for a class called Design Nature, we were tasked with making a plastic device that could jump. It had to use around 3 joules of energy or less and had to wait a second or two after being loaded before jumping. My design used suction cups for the delay and rubber tubing for the energy storage. It was designed to have minimal assembly: the pieces were cut on a laser cutter, and then snapped together.

It was the first hopper to hit the ceiling, forcing the professor to install a plastic sheet to protect the tiles.