HUMI
Languages: C++, AppleScript, MySQL
Libraries: Sockets, OpenCV
Platforms: Mac OS X, Ubuntu (Linux), Arduino Mega 2560
More...
This project is a part of Build18, a week-long ECE hackathon organized by the ECE department at CMU. We're given one week - the first week of Spring semester - to build whatever we want and then present it.
I worked on this with four other ECE sophomores. Here's the gist: the system recognizes faces and gives some sort of a hardware output (hence named HUMI - as in "who am I" and HUman Machine Interaction).
This needs a facial recognition algorithm, a database of faces to both train the algorithm and store a person's preferences (such as room lighting or playlist) and an Arduino Mega 2560 for the output. The facial recognition algorithm used is a variation of the eigenface algorithm.
When a member is added to the database, multiple pictures of that member are taken and used to train the eigenface algorithm. Then, whenever a person is standing in front of the camera, the algorithm will take a picture of that person and compute the probability of him being the member stored in the database. If that probability is satisfactorily high, the green LED light on the Arduino Mega 2560 becomes on and the member's playlist is retrieved from the database and played on the Mac!
Two computers are used in a server-client fashion. The facial recognition and output of personal preferences is done on the client wherease the database is stored on the server. The two machines are communicating via TCP/IP sockets. So, the client recognizes a face, sends a request to the server and the server responds with that person's preferences. This can allow a remote and scalable database and a mobile client such as a Gumstix or Beagleboard to run the facial recognition.
Quadrocopter
Languages: C and MySQL
Libraries: Sockets, POSIX Threads
OS: Angstrom (Linux)
More...
This was the first time I ever saw a quadrocopter and the first thing I thought was "Man, I gotta have one". I had just graduated from high school and had some free time so some friends and I decided to build one from scratch! We ended up donating it to our high school.
It's controlled by an iPhone/iPad. Tilt the device and the plane flies in that direction. My job was mainly to write the software that would run on the Quadrocopter. Here's a summary of what I did...
Wireless Communication: The iPad and the drone communicated over TCP/IP so I wrote the code that would go on the drone and in the iPad app using sockets programming. Had to create separate threads to allow bi-directional communication. A modification of this code can be found on github.
Hardware: Angstrom (Linux) was installed on a 600MHz Gumstix Over Fire. Then, serial communication was used to obtain data from the 9 degrees-of-freedom (DOF) Inertial Measurement Unit (IMU). Finally, the microprocessor instructed the serial servo controller (SSC) to control the thrust provided by each of the 4 motors.
Control Algorithms: A stripped down version of the PID controller was used which compared the drone's roll, pitch and yaw values to the roll, pitch and yaw values of the iPad (which the microprocessor received over Wi-Fi).
Visit the project site if you're interested.
