I'm a first-year Computer Science Master's student at Stanford University, specializing at the intersection of machine learning and robotics. My research centers around robotic perception and manipulation. In particular, I'm exploring ways in which robots can self-acquire generalizable representations that are useful and efficient for manipulation.

This summer, I interned at Google Brain Robotics under Johnny Lee, trying to teach robots generalizable kit assembly skills. The summer before, I interned at Nimble AI where I built the infrastructure for training and deploying various real-time grasping algorithms for suction and parallel-jaw grasping. Before that, I was a visiting researcher in the Khuri-Yakub Ultrasonics Group at Stanford, applying machine learning to enhance ultrasonic transducers like a chemical nose and a touch screen.

Outside of work I enjoy contributing to open source and blogging.

Jun. 2020 - We're finalists for the 2020 ICRA Best Paper Award in Automation.
Mar. 2020 - I'm a TA for Stanford's CS231n this Spring quarter!
Feb. 2020 - Super stoked to announce that I'll be joining Google X as an AI resident this summer, working on the Everyday Robot Project.
Jan. 2020 - Excited to share that Form2Fit has been accepted to ICRA 2020!
Oct. 2019 - Proud to finally share what I've been up to this summer! Read about Form2Fit on the Google AI Blog.


Form2Fit: Learning Shape Priors for Generalizable Assembly from Disassembly
Kevin Zakka, Andy Zeng, Johnny Lee, Shuran Song
[blog] [webpage] [pdf]


A general-purpose library I use for robotics research.
Tune the hyperparameters of your PyTorch model with a HyperBand implementation.
A Python API for streaming RGB-D data from the PhoXi 3D stuctured light sensor.
A numerical linear algebra library I wrote from scratch. Implements useful decompositions (LU, Cholesky, QR, SVD) as well as eigen algorithms (power, inverse, projected, qr).
A Tensorflow implementation of Spatial Transformer Networks accompanied by a two-part tutorial series.
show more
A processor in Verilog that computes the L2 norm of an N-dimensional complex vector stored in doubly-linked list. Features nifty Python scripts to automate the reading and writing of test benches.