I led the reinforcement learning research effort of autonomous racing in the ROAR lab. We used the Stable Baseline library with the Carla simulator to train an SAC agent to drive autonomously in the Carla simulator. The agent is able to drive at 150 km/h in the simulator. The research effort is still ongoing and we’re working towards a more stable and robust agent with new algorithms and environment modifications.
I led the development of ROAR lab’s new control suite ROAR_PY
: a streamable, gymnasium compatible control suite that unifies control of vehicles / reading of sensors in simulation and in real world for any robots. The project is currently in active development and is used by the lab for research and teaching.
With procedual and extensible class definitions, OrangeRL decouples the problem of RL from deep neural network function approximators and decouples an agent interface from the underlying backend.
Furthermore, OrangeRL is designed with supporting sequence models in mind.
Currently it only supports the SAC algorithm with PyTorch backend but more algorithms are coming soon.
I (with two other friends) created a HW problem set around a lightweight GPT-2 implementation, NanoGPT. This project is a rich, self-contained Jupyter notebook packed with tutorials and video resources to help students build a lightweight GPT implementation (including a BPE tokenizer, a GPT-2 model based on the Causal Transformer architecture) from scratch. This project also includes a lightweight autograder solution.
In this project, I implemented a simple 2d rasterizer that rasterizes mathematical expressions for shapes into pixel image buffers the implemented features include supersampling, hierarchical transforms, and texture(uv) mapping with antialiasing. The above image was rendered using my program.
In this project, I built Bezier curves and surfaces using de Casteljau’s algorithm, implemented algorithms to manipulate half-edge meshes, and implemented mesh up-sampling using loop subdivision.
In this project, I implemented a CPU-based ray-traced renderer that can render complex scenes with multiple light sources and complex materials. The above image was rendered using my program.
In this project, I further extended Pathtracer-1 to support Microfacet(rough-surface) materials, glass materials and mirror materials.
In this project, I wrote a physics engine that simulates clothing materials. I also implemented shaders to render the cloth (and environments) in real-time.
In this project, we wrote a physics-based cloak simulation mod in Minecraft. The cloak is made of cubical meshes with $32 \times 20$ by size and is simulated by a mass-spring system.
For this project, I built a voice-controlled car using an Launchpad SIXT33N. Me and my partner built the microphone circuit (band-pass) and the motor control circuit. We also wrote the code to control the car using the voice commands.
I served as the team captain one year each for my high school FTC robotics team’s varsity team (4100) and junior varsity team (5100). During my time there, I developed a suite of robotics libraries that supports asynchronous sensor updates, motion profiling, pure pursuit, object detection, etc. I also worked on the mechanical design of the robot, overall management of task assignment, journal keeping (for the engineering notebook), outreach, and presentation.
After I left the team, I volunteered at three FTC events in China, one time as an inspector and two times as the head referee.
For this project in EECS151LB, I implemented a 3-stage pipelined RISC-V CPU with the Verilog HDL. I tested this cpu on an AMD Xilinx PYNQ-Z1 board with a core clock frequency of 75MHz. The CPU supports the RV32I ISA as well as a subset of CSR instructions.
The modifications made to the CPU that is different from the CS61CPU project are:
For this project in CS162, I implemented part of an operating system called Pintos. The OS supports multi-threading, virtual memory, FFS file system, and user programs. The OS is written in C and x86 assembly.
The parts I implemented (with my team) are:
wait
, exec
, exit
, sbrk
create
, remove
, open
, close
, read
, write
, seek
, tell
, filesize
, mkdir
, readdir
, isdir
, inumber
, chdir
alarm
system callpthread_create
, pthread_exit
, pthread_join
, pthread_mutex_init
, pthread_mutex_lock
, pthread_mutex_unlock
, pthread_sema_init
, pthread_sema_up
, pthread_sema_down
.In UGBA 96, our team “Cookie Crumbs” developed a start-up pitch called Clectricity. Clectricity is an idea about an AI platform that connects small businesses with energy experts to help them achieve zero carbon emissions. We used value-proposition analysis, demos, revenue model analysis, target market analysis(competitors and market size), market differentiation analysis to pitch our idea to a panel of judges at the end of the class.
For this project, I made a CPU design based on the RISC-V 32Bit Integer ISA. The final project is a fully 3-stage pipelined CPU with a 32-bit instruction set that supports RV32I ISA.
For this project, I used C and AVX instruction set to implement a matrix library that can perform matrix multiplication, matrix addition, and matrix transpose. The library is optimized for cache and vectorization.
For this project, I implemented a version control system using Java called Gitlet. Gitlet is a local version control system that mimics the basic features of Git.
The features implemented are: