Python, C++, ROS, Java, & Matlab


git, linux & continuous deployment to production environments


Path planning, sensor fusion, localization, autonomous vision and navigation


September 2022 – Present
San Francisco

Software Engineer: Planning and Controls


At Cruise I am part of a team building self-driving cars. I improve the planning and reasoning capabilities of the autonomous vehicles.
January 2022 – Present
Sunnyvale, CA

Software Engineer: AWS Robotics

Amazon Web Services

I prototyped a new AWS Robotics offering
August 2017 – Present

PhD in robotics

University of Michigan

My research areas include:

  • Path planning
  • Teleoperation
August 2015 – June 2017

Masters of robotics

Carnegie Mellon

My research areas included:

  • Redundant manipulators
  • High precision localization
  • Deep reinforcement learning for robotic control
  • Multirobot cooperation for nuclear inspection
January 2014 – January 2015

Software Development Engineer


I created software for the Amazon Kindle E-Readers and Tablets.
January 2012 – January 2014

Robotics Engineer


I designed, built, and programmed robots that build airplanes.
January 2010 – January 2012

Research Fellow


Fluid dynamics research.


Robots need both visual and contact sensing to effectively estimate the state of their environment. Camera RGBD data provides rich …

We propose PSSNet, a network architecture for generating diverse plausible 3D reconstructions from a single 2.5D depth image. Existing …

We propose the Selective Densification method for fast motion planning through configuration space. We create a sequence of roadmaps by …

We address the problem of robot motion planning under uncertainty where the only observations are through contact with the environment. …

Localization error, sensor noise, and occlusions can lead to an imperfect model of the environment, which can result in collisions …

Contacting the world can provide stability, support, and sensory information, however, many robots avoid contact whenever possible. …

Robots can provide remote access, manipulation, and inspection capabilities to augment human workers and improve safety in potentially …

In this paper, we propose a touch-based local- ization approach for a potentially large and complex object with multiple internal …

Performing detailed work on objects requires precise localization. Currently humans aid machines in localization either by direct …

A robotic arm manipulator is often an appealing method to position drills, bolt inserters, automated fiber placement heads, or other …


I built a raspberry pi music player that allows me to play any album I own by scanning a barcode from a binder. You can find code and instructions on my github repo. Modern music players are missing some features from the past In the era of records your music collection was an asset. You’d browse titles while over at a friend house, discovering new music and bonding with the collection’s owner.


I made a ROS node that hooks up to a high quality video camera for automatically capturing my robotics experiments, using a bit of custom software and a piece of hardward called a Capture Card. This post will assume you know about ROS. Code and documentation are available: When my robots are working smoothly I naturally want to take videos. I may run an experiment for 100 trials, and I want a video of each one.


My Foray into Normalizing Flows: This post and accompanying code follow my introduction to Normalizing Flows, which have become popular in image compression and generation (e.g. RealNVP, NICE, and glow). My code is modeled after Eric Jang’s tutorial, but written in tensorflow 2. What is a normalizing flow? A normalizing flow is a sequence of invertible transformations mapping one (simple) probability distribution onto another (complicated) probability distribution. For example consider the simple distribution of an image where every pixel is independently sampled from a gaussian.



Virtual reality robotic teleoperation: Pancakes

Operate robotic arms with Vive to cook a pancake breakfast

Virtual reality robotic teleoperation

Operate robotic arms with Vive to fill shopping bag with groceries

3D printed robotic fingertips

Designed 3D printed robotic fingertips to improve grip on cloth

Computer vision aided laundry sorting

Robot picking through deformable objects to find target

Touch localization

Localize robotic arm to manufacturing part with touch

Carnegie Mellon: Snake Robot

Videos of snake robot used for Master’s thesis


Unmanned Aerial Vehicle for autonomous sky photography

FIRST Robotics Mentor

Mentor to a FIRST robotics team since 2013

Caltech robotic challenge

Won Caltech’s Mechanical Engineering robotics class challenge

DNA lamp

Built 3’ DNA lamp out of PVC


Making robots make airplanes