Some of the things I've done in grad school.

Mobile Manipulation in Unknown Environments with Differential Inverse Kinematics Control

This work is an exploration of mobile manipulator control and the capabilities of our robot. We propose a whole-body differential inverse kinematics control approach for position-controlled industrial mobile manipulators. Our controller is capable of task-space trajectory tracking, force regulation, obstacle and singularity avoidance, and pushing an object toward a goal location, with limited sensing and knowledge of the environment. We evaluate the proposed approach through extensive experiments on a 9 degree-of-freedom omnidirectional mobile manipulator.

Safe Robust Learning for Lagrangian Systems

This is a novel learning control method for Lagrangian systems that combines ideas from robust control with Gaussian process regression (GPR). The main idea is to use GPR to learn an upper bound on the uncertainty in the system online, which is then used in a robust controller. We prove that the learned upper bound is correct with high probability. Further, we verify the approach experimentally on a 6 degree-of-freedom UR10 industrial manipulator.


Some small side projects that may be useful.


Small utilities for PyBullet, including shortest distance computation, point-clouds from cameras, recording video, and ghost objects.


Compiled auto-differentiated code using CppADCodeGen combined with an easy Eigen interface and Python bindings.


A vim plugin to uniquely highlight the current match under the cursor.


Jump to previously-visited directories by name. If there are multiple matches, the user selects the correct absolute path from a list. A cousin of z with a more obvious directory-priority algorithm.


A simple shell script to cut, copy, and paste files between directories from the command line.


Some small side projects that may be fun.

Predator Prey Simulation

A web-based simulation of flocking birds being hunted by predators.


A curses-based version of Conway's Game of Life that allows for multiple species of cell, written in Python.


A simulation of bodies with gravitational attraction and elastic collisions in two dimensions.


A collection of fractals including the dragon curve, Sierpinski triangle, Mandelbrot set, and Koch snowflake.


Some of the more interesting projects done for my undergrad courses.

Nuclear Power Plant Inspection Robot

A mobile robot capable of navigating the boiler room of a nuclear power plant and autonomously performing pipe thickness measurements and collection of other relevant data. Engineering Capstone project. I focused largely on the software systems, particularly the vision system and interface to the robot arm.

Autonomous Obstacle Course Traversal Robot

A mobile robot that autonomously traverses an obstacle course, including ascending and descending a ramp and locating a variable end point. Developed as part of the MTE 380 design project course at the University of Waterloo. I worked primarily on the robot's software, including the signal processing, movement, and state machine.

Read My Lips

An LSTM-based neural network architecture designed to perform lip-reading. Achieved an average accuracy of 86.30% when reading the lips of a known speaker.