Exactly as literal as it sounds: a mobile robot that has to find a target buried in a snowy test environment and clear a path to it, combining a plow-equipped chassis with a camera-guided arm.

System design
The robot splits into two halves: a mobile base with a front-mounted plow for clearing snow and driving to the target, and a multi-jointed arm mounted on top for fine manipulation once it’s in position.

Arm design
The arm uses chain-and-sprocket and timing-belt transmissions to keep the heavier Dynamixel servos (MX-64 for base rotation, MX-106 for the shoulder) low on the base rather than out on the links themselves — the same reasoning behind keeping mass proximal on any serial arm, just executed with bike chain and 3D-printed sprockets instead of anything exotic.

Plow design
A curved plow blade mounted on a linear rail so it can be raised and lowered independent of drive, clearing snow ahead of the robot without needing to lift the whole chassis.

Finding the target
We used a Kinect for combined color and depth sensing, then split the vision pipeline across MATLAB, Python, and OpenCV: convert to HSV and threshold on color to build a mask, find the mask’s centroid to get target direction, and multiply the depth image by that same mask (with a depth-based clutter-rejection step) to get distance to target. Color and depth results get vectorized and combined into a single target vector that feeds the arm’s trajectory planner.

Software-wise, everything hangs off one main.m — GPS and camera initialization, an
Arduino read/write interface for low-level hardware, and separate kinematics/trajectory
planning modules for the arm and plow that both build on a shared Dynamixel driver.
How it went


Full run on the competition course.
Our team's final video for the competition.
This was the first project where I was responsible for a real-time perception pipeline feeding directly into motion planning, rather than perception and control being separate offline steps — debugging the color threshold live, with a Kinect, under lab lighting that didn’t match our test conditions, taught me more about the gap between “works in a demo script” and “works live” than anything before it.