Open Source

I was an active contributor to the open source robotics software community in undergrad and during my PhD. I still make some contributions to open source software, but they are smaller and less frequent than the projects listed here. Despite being a few years old, many of these projects have aged gracefully because they provide core motion planning or hardware capabilities.

DART - Dynamic Animation and Robotics Toolkit

I regularly contribute to the Dynamic Animation and Robotics Toolkit (DART), a library that provides data structures and algorithms for kinematic and dynamic applications in robotic and computer animation. I work closely with Michael Grey and Jeongseok Lee, the lead DART developers, to improve DART for motion planning and robotic manipulation. I am the author of DART's URI resource support and was involved in the design behind the Skeleton ownership semantic, MetaSkeleton concept, ShapeNode concept, and CollisionGroup implementation.

DART is maintained by the University of Washington Personal Robotics Lab and the Open Source Robotics Foundation (OSRF).

OpenRAVE Plugins

I have released several open source OpenRAVE plugins for robotic manipulation. Most of these plugins were developed in collaboration with my colleagues in the UW Personal Robotics Lab (at the time: Carnegie Mellon University).

I no longer actively maintain these projects, but they still have dedicated users. Your milage may vary in using them: I expect that they largely work out of the box, but may require some effort to work with the latest dependency versions.

prpy - Python utilities used by the Personal Robotics Laboratory

A robot-agnostic Python library developed by the Personal Robotics Laboratory at University of Washington (formerly Carnegie Mellon University) to simplify using OpenRAVE in Python scripts. This includes a high-level planning pipeline, helper functions, and visualization tools. This project is a collaboration with many members of the Personal Robotics Lab.

or_ompl - OpenRAVE bindings for OMPL

An OpenRAVE planner plugin that uses the Open Motion Planning Library (OMPL) to solve geometric motion planning queries. It includes utilities for constructing an OMPL state space from an OpenRAVE robot, checking state validity using an OpenRAVE collision detector, and converting between OpenRAVE trajectories and OMPL paths. This project is a collaboration with Chris Dellin, Matthew Klingensmith, and Jennifer King.

or_fcl - OpenRAVE bindings for FCL

An OpenRAVE collision checking plugin that uses the Flexible Collision Library (FCL) to perform collision checks. Benchmarks show that this plugin is 2–7× faster at performing binary checks than the ODE collision detection plugin included with OpenRAVE. This project is a collaboration with Chris Dellin and Jennifer King.

or_rviz - OpenRAVE bindings for RViz

An OpenRAVE viewer plugin that publishes the environment as interactive markers for visualization in RViz. The plugin supports both opening an RViz window in the same process as OpenRAVE and, with reduced functionality, viewing the markers in an external process. This project is a collaboration with Matthew Klingensmith.

or_urdf - OpenRAVE loader for URDF and SRDF files

An OpenRAVE plugin for loading URDF and SRDF files into OpenRAVE. This project is a collaboration with Pras Velagapudi.

or_parabolicsmoother - OpenRAVE plugin for smoothing trajectories

An OpenRAVE planner plugin for smoothing robot manipulator trajectories under geometric constraints and bounded acceleration. This plugin is based on code originally distributed with the paper "Fast Smoothing of Manipulator Trajectories using Optimal Bounded-Acceleration Shortcuts" by K. Hauser and V. Ng-Thow-Hing. This project is a collaboration with Pras Velagapudi.

Robotic Hardware Drivers

I have also released drivers for controlling robotics hardware. Much of this software was developed in collaboration with my colleagues in the Rutgers University IEEE Student Branch or the Personal Robotics Lab at Carnegie Mellon University to address a specific need we had.

I no longer actively maintain these projects because they are for hardware that is obsolete, not readily available, or that I no longer have access to. This code is most likely useful as a reference for developing new drivers for similar hardware components.

stargazer - Hagisonic Stargazer Driver

A ROS driver for the Hagisonic Stargazer. This package provides a Python interface for communicating to the Stargazer over RS-232 and a ROS node that publishes all detected markers as ROS messages. This project is a collaboration with Michael Dawson-Haggerty and Pras Velagapudi.

fieldforce_tcm - PNI Fieldforce TCM Driver

A ROS hardware driver for the PNI Fieldforce TCM digital compass. This project is a collaboration with Cody Schafer.

stereo_webcam - USB Webcam Driver for Stereo Vision

A ROS hardware driver that capture images from hardware-synchronized PlayStation Eye cameras using direct Video4Linux system calls. This package is intended convert two PlayStation Eye cameras into an inexpensive stereo pair.

jaguar - MDL-BDC24 "Black Jaguar" DC Motor Control Driver

A ROS hardware driver for controlling the TI MDL-BDC24 "Black Jaguar" motor controller. This package communicates with one Jaguar over RS-232 and uses its built-in CAN bus bridge to control additional daisy-chained hardware. This project is a collaboration with Cody Schafer.

hax - Hardware Abstraction for Vex

Hardware Abstraction for VEX (HAX) is a C hardware abstraction layer for the VEX Robotics PIC-18 and ARM Cortex M3 micrcontrollers. HAX provides the first open source development pipeline for VEX robotics. This project is a collaboration with Cody Schafer.