Personal Projects

HomeLab

This is my current side project. The following is what I want to implement or experiment with:

Competitive programming

This is not a single project, but I think it’s fitting to put here. I have participated numerous programming competitions since primary school (yes, they exist back then in China). I stopped training, but still competes whenever there is an opportunity: I participated in SWERC (ICPC regionals) for the past three years, got second place in Cod’INSA just shy of the Alumni team, and dominated in a recreational code golf contest.

Church worship tools

I wrote two programs to help create Sunday gathering slideshows: an offline verse selector for quick copying and formatting, and a lyric database interface for generating Apple Keynote slides using Applescript. Both of them are written in Python and uses PySide6 for GUI.

HarmoniCut

Programmable music box is a unique instrument. In this video of Wintergatan, he explained the tedious process of programming by punching holes. Heavily inspired by his Marble Machines, I wrote a script that converts standard MusicXML files to SVG for laser cutting.

School Projects

Research: RPLIDAR Mapping on the TurtleBot

I worked on a small research project focusing on Simultaneous Localization and Mapping (SLAM) with a modified Turtlebot 2. The main goal was to evaluate and compare the SLAM performance of a Kinect RGB-D camera (discontinued) and an RPLIDAR A1 2D LiDAR using Cartographer and SLAM Toolbox in ROS 2. We also developed a sensor fusion method to combine the Kinect’s 3D obstacle detection with the RPLIDAR’s range and precision. We conducted experiments in different environments, such as a room with obstacles and an empty hallway, and used the localization error as quantitative metric for evaluation. Here is the unpublished paper in IEEE format.

Boccia assistant robot

As a team of five, we created a robot to assist athletes in Boccia (a Paralympic ball game). Basically it is a ramp where the player can control the angle and height of the ball release. In addition to designing and manufacturing the parts using 3D printers and laser cutters, I also wrote code for an Arduino, a Wi-Fi card, and an Android app to control the machine via Wi-Fi.