Projects

This page is an archive of my personal projects, which have varying degrees of polish. Unfortunately, projects completed for my undergraduate coursework are not open-source, but you can still read about our results.

PiE Robotics Kit

Pioneers in Engineering (PiE) is a volunteer-staffed organization at UC Berkeley that promotes STEM education among SF Bay area high schools. Every spring, PiE hosts a twelve-week robotics competition where high school students compete in teams to solve the challenges of that year's game. I co-lead engineering during year 11 (spring 2019).

Designed to give students hands-on engineering experience, the PiE robotics kit is a platform for building and operating a robot programmed in Python. The kit allows users to control sensors and actuators through a high-level API without deep technical expertise.

[repo] [docs]
Fig. 1: The game field during a 2v2 match.
Fig. 2: The base robot (assembled). The onboard Raspberry Pi communicates with each Arduino-controlled sensor.

Video Compression Over Radio

Used audio frequency-shift keying, the AX.25 protocol, and APRS to transmit a video between two radios. On top of this layer, a lossy compression algorithm based on JPEG captures the salient features of each frame by:

  • Mapping the RGB frames to YCbCr and downsampling the chrominance components
  • Applying a discrete cosine transformation on each 8x8 block
  • Applying zero-run-length encoding on the reordered and quantized coefficients
  • Huffman coding the coefficient and run-length pairs
[repo templates]
Fig. 3: Input image.
Fig. 4: Output image. PSNR: 26.4 dB.

Signals and Systems Labs

Jupyter notebook programming assignments I helped develop as a teaching assistant for EE 120 at Berkeley. These labs guide students through implementing signal processing algorithms used in real applications and gives students practical experience with scientific computing libraries like NumPy and Matplotlib. I contributed labs about:

  • Feedback control (using state-space and Laplace domain analysis to simulate satellite stabilization)
  • Communication (amplitude modulation and on-off keying)
[repo] [paper]
Fig. 5: Background information.

Turtlebot Steering

We implemented two control strategies for steering a Turtlebot into different positions: a bang-bang controller with proportional full-state feedback and a sinusoidal input controller. Both strategies generate nonholonomic motion by cycling through trajectories for controlling individual state variables. Parallel parking exemplifies this type of motion, where a car can move perpendicular to the direction it's facing by alternating between driving forwards and backwards.

[report] [video]
Fig. 6: Turtlebots.