Over the last several years, I've been involved in a variety of technical projects in various areas of robotics, from electromechanical design (Stairclimber), to sensor integration (Firefighting Robot) to surface scanning (Intelligent Robopainter) and pathfinding algorithm (Ground Rover) implementation. More recently, I have become more focused on the computer vision aspects of robotics, while still practising my system integration and project management skills. During my Master's degree, I was fortunate to work on a number of great robotic platforms, including an ABB arm (Project Gemini), a Baxter robot (Project Gemini), a PR2 robot (Team FIND), and HERB (Roaming HERB) of the Personal Robotics Lab at CMU. In my spare time, I work on several personal projects, including hacking away at a Roomba, Kinect and Arduino board to create a household robot that is able to recognize its surroundings quickly and effectively determine useful items that may be misplaced. I look forward to getting more involved with other robotic arms, autonomous vehicles, and embedded systems in the future.

Below are some of my latest creations and projects that I've been involved with.

Project Gemini: Visual Assistance in Assembly Manufacturing (2013-2014)

The Gemini project focused on developing a product that would aid unskilled labourers in assembling parts quickly and efficiently using laser projection and visual feedback. The product took the form of an end effector to be mounted on a compliant robotic arm (such as an ABB or one of the arms on Rethink Robotic's Baxter) and the software that governs the system's execution.

  • Developed the RGB-D based vision system used in the Gemini project to recognize, localize and return feedback on the pose of items of interest in assembly manufacturing using PCL.
  • Designed and implemented the software architecture responsible for the function of the entire system using ROS.
  • Created the algorithms responsible for calculating the inverse kinematic solutions and arm planning to move the ABB and Baxter robotic arms to various positions in the workspace using OpenRAVE and MoveIt!.
  • Produced the embedded code to be run on the Arduino responsible for controlling laser projection and end effector movement.

Team FIND: PR2 Robot Conveyer Belt Project (2014)

The goal of this project was to allow a PR2 robot to enter a known environment, position itself in close proximity with a conveyor belt, wait for an object to be dropped onto the conveyor belt, pick up the moving object using a grasp that was dependent on the object type (e.g. via the handle for a mug) and place it into the appropriate container.

  • Developed an algorithm that would allow the PR2 robot to recognize and locate objects in its surroundings when attempting to pick up moving items from a conveyor belt.
  • Obtained an RGB-D point cloud representation of the robot's environment via a Microsoft Kinect, discriminated the surface of the conveyor belt from the surroundings via RANSAC, detected the objects of interest via euclidean clustering, and used a combination of techniques (viewpoint feature histograms, eigen decomposition) to recognize the object from a library of known objects.
  • Designed and optimized the algorithm to operate in real-time to allow estimation of the object's speed and plan the robot's arm movements.

Roaming HERB: Planning and Controlling around an Obstacle (2014)

A control system for the nonholonomic drive system in the HERB robot was developed in a group of three as part of our final project in a Kinematics, Dynamics and Control class. The HERB robot uses a Segway base consisting of two wheels in a differential drive configuration, with an additional caster wheel to provide balance and support. We represented this using a unicycle kinematics model, where the desired trajectory is described by an ordered path of discrete waypoints. Therefore, we addressed the following problems: path following and control, and vehicle modelling via system identification. To address these challenges we implemented control software that integrates with the simulated and physical HERB robotics system.

  • Developed a method to characterize the drive system as a MIMO plant model for simulation purposes. The model parameters were calculated using 30 trials of recorded experimental data, denoised via a low-pass filter.
  • Modelled the system as four second-order discrete transfer functions with a time delay which was translated into its state space equivalent using a second-order Pade approximation for the time delay.

Seismic SLAM: Indoor Mapping and Item Recognition (2012)

This project involved using a Roomba (Sage), a Kinect and an Arduino as a robotic platform for SLAM (Simultaneous Localization and Mapping) around my house. The goal was for the robot to be able to explore the rooms, recognize some predefined everyday objects and let me know of their location if they are misplaced.

  • Created a physical platform to house the electronics on top of the Roomba.
  • Developed software drivers to allow movement control of the Roomba.
  • Prototyped various SLAM-based odometry and object recognition algorithms via ROS, PCL and OpenCV.

Tronatello: Smart Robotic Painting System (2011 - 2012)

The goal of this project was to design an automated industrial painting system that requires minimal human involvement and does not require any a priori knowledge of the part(s) to be painted. The team consisted of 5 members, all from the Mechatronics class but from different areas of speciality. The final design used ROS as the operating system, one MS Kinect to scan a part loaded onto a conveyor belt, a 4-DOF Clearpath robotic arm moving on a leadscrew with a paint head on end-effector that would paint the part, and another MS Kinect that would perform a quality scan of the paint job.

To check out the design poster I created detailing the project, see here.

  • Lead a team of five engineering students to successfully complete the intended design on time and within a limited budget, fulfilling the duties of a project manager
  • Designed software for the generation of the robotic end-effector path, calculating the required pose at each waypoint, given a raw PCL PointCloud2 object from the Kinect (see image above for a visualized sample output of the algorithm, sans incident angles)
  • Created and presented system diagrams to students, school staff, and visitors from the industry to explain each module of the overall design

Fremen: Four-wheeled Ground Robot (2012)

A four-wheeled ground robot from Clearpath Robotics was used as a robotics platform to explore three areas of study for the UW Autonomous Robotics Class. The three main areas of study were motion control, state estimation and mapping, and path planning. The work was done in a group collaboration of 5 students (dubbed the 'Mentats') in a span of four months. At each stage of development, new concepts were first implemented via MATLAB simulations and then converted to C code on the robotic platform.

  • Created a robot's motion control by building motion model of the robot, identifying model parameters, developing a PID controller for speed control using GPS velocity (simulated via an IR indoor positioning setup), and developing a steering controller
  • Developed measurement models for the indoor positioning and encoder sensors to be used in estimation using an Extended Kalman Filter
  • Designed and implemented a LIDAR inverse measurement model with an occupancy grid mapping algorithm.
  • Controlled the robot navigation using an extended potential field method and applied a wavefront algorithm to move the robot towards an end goal through an obstacle filled course

Lively Lamprey: 3D Traveling Vertebrate (2012)

This was an independent project I worked on for my UW Computational Neuroscience course, extending a 1D lamprey swimming model to a 3D one, simulating an existing neural system using neural networks.

  • Utilized MATLAB to create the subroutines for effective encoding and decoding of signals between hundreds of neurons.
  • Simulated the final simulations and documented the results using the Nengo framework.

Sifteo Cubes: Interactive Gaming Platform (2011)

This was a project I worked on for my co-op internship at Sifteo, which was one of my favourite co-op experiences. Their product, the Sifteo cubes, are small motion-aware cubes that can fit in the palm of your hand, with full-color clickable screens and interact with users and each other when they are shaken, tilted, rotated and placed adjacent to one another. They're mainly aimed at entertainment and educational purposes, and there's a great TED talk by David Merrill about the Siftables prototypes from before the Sifteo company was started.

  • Developed a new design to improve generation of fonts and wireless communication between embedded devices and a host laptop using C, Python, and Qt C++
  • Investigated independently whether the current framework could be modified to use the LLVM or GCC compiler infrastructures and the Clang compiler front to improve development process on ARM Cortex-M3 devices

Scarab: Firefighting Robot (2011)

Designed for the UW Mechanical Engineering Design course in a group of 4, the Scarab was a two-wheeled autonomous robot that could accurately navigate a course of obstacles to extinguish a number of randomly placed candles. The produced design involved storing compressed air in the body of the robot and using a nozzle at the front of the robot to blow out the candles. Light-to-frequency converters were used as the light-sensing sensors on either side of the nozzle to allow the robot to hone in on the exact position of the candle, often finding a dead-on shot within 1-2 seconds. A selanoid was activated and deactivated in succession to fire a burst of air in the direction of the candle. The exact time of the solenoid being open was optimized based on the total volume and pressure inside the robot's internal air chamber; vs. the total number of shots that the robot would be able to fire.

  • Designed, prototyped, and implemented the electrical/sensing system using an Arduino MEGA board, light-to-frequency converted sensors (candle sensing), LED and IR-detector (grid location), IR Rangefinder (soft-stops), and wheel encoders.
  • Scheduled meetings, managed the resources and budget, and lead discussions in the overall system design.

Treppenstufen Mobilit├Ąt: Stairclimbing Wheelchair (2011)

The goal of this project was to propose a mechanism that would allow mobility disabled invididuals to ascend up and down stairs without the aid of attendants. The proposed mechanism design allowed an electric wheelchair allowed the ascension and descension of standard staircases defined by the Ontario Building Code. Smooth motion was provided using a spring-damper system to prevent large jerks when landing on the platform on top of the stairs. Rollers were used to transfer motion from the back wheel of the electric wheelchair to the mechanism, avoiding the need of an external power source. This project was developed in a group of 4 for the UW Kinematics and Dynamics of Machines course, the resulting mechanism was estimated to be built within 16 hours and cost less than $7000.

  • Developed the MD ADAMS simulation of the robot climbing up and down the stairs, using another group member's AutoCAD drawings.
  • Produced the main mechanical mechanism concept design in collaboration with another group member.
  • Managed the group's deadlines and meetings, distributing work and resources accordingly.

Juno Rover: Lunar Rover Vehicle (2010)

Developing for Neptec Design Group Ltd. for one of my co-op internships, the Juno Rover (now dubbed the NTR Rover) is a robot platform that is planned to explore the moon. From the official website, "The NRT Rover will be capable of a variety of functions including exploration, mapping of the lunar surface, drilling for water, excavation, preparation of landing sites for lunar landers and transporting astronauts to their lunar bases."

  • Upgraded an existing Juno Lunar Rover prototype and developed a sensor suite, including an IMU, thermocouples, and rotary joint encoders.
  • Analyzed collected point clouds of terrain data with reference to provided Digital Elevation Models using PolyWorks.

Zanzibar: Real-Time Operating System (2009)

In this group project, I collaborated with my team members (3) to design and implement a small RTX in C to provide a multiprogramming facility, with priority levels, storage management, interprocess communication, basic timing service, system console I/O and debugging support. The final grade earned was 100%.

  • Produced the API, kernel functions, the interprocess communication mechanisms, and assisted in the design of the basic timing service and system console I/O.
  • Organized and scheduled deadlines and meetings by acting as the Project Manager for the group, setting milestones and keeping track of work progress to ensure our quality standard goals were being met.

Magneto: Magnet Detecting and Line Following Speedbot (2009)

For this project, completed with a colleague for UW Sensors and Instrumentation course, a robot was designed and built to follow a track and detect any nearby magnets embedded in the track (without detecting the same magnets twice). The sensor suite included a pushbutton to start, optical encoders to measure the rotation of the wheels, a strength of a magnetic field, IR detection to follow a line on the ground, temperature measurement, and overall system current sensing. Guidance was given on how to go about building the robot starting from a clean PCB but all of the calculations were done individually for each circuit. The final grade earned

  • Soldered the board infrastructure, characterized the motors, and designed each of the circuits involved.
  • Quickly completed a previously undisclosed course with only one minor error, a false positive (or more accuaretly, the same magnet was read twice).

Essay: The Role of Emotions in Human Cognition and Robotics (2012)

This is a paper I wrote for a UW Cognitive Science class, the subjects of which have sparked some good discussions in the past. Here is the issue that I chose to focus on,

"Emotions have puzzled and fascinated thinkers throughout history, from Plato and Aristotle to modern cognitive psychologists. Until relatively recently, the widely accepted view on emotions has been that they are only an interference on the neutral behaviour of a person. However, there has been a rapid increase in the study of the effects of emotion on cognition, popularizing the view that an adequate theory of cognition that ignores emotion is likely to prove inadequate (Eysenck, Keane, 2009). In this paper, the question of the importance of emotions in human cognition and the potential of application of emotions to robotics are discussed."

The PDF copy of this essay can be found here.