From the beginning
Still motivated that everything will be great :)
To test our skills we decided to make the MARS robot play catch. The custom development we did can be found in more detail throughout the website. To see full details of the code, feel free to visit our GitHub repository as well.
To interact with the world, MARS needed to see it. We developed a custom computer vision pipeline using OpenCV to compensate for the lack of native detection tools. Our system uses morphological filtering and contour detection to isolate objects from the background, while a custom Foxglove visualization allows us to debug the robot's perception logic in real-time.
Intelligent motion requires more than just knowing where to go—it requires a strategy for getting there. We implemented a Bézier curve trajectory generator to ensure smooth, continuous robot navigation, avoiding the jerky motion of simple point-to-point drivers. For the arm, a multi-stage planning algorithm operates in 3D task space, coordinating complex pickup sequences while preventing collisions.
Execution is just as critical as planning. Our system utilizes a closed-loop feedback controller running at 20Hz to precisely track generated trajectories, correcting errors in real-time. The manipulation subsystem orchestrates 5-DOF inverse kinematics and PWM-controlled gripping, ensuring reliable physical interaction with the target object.
It has been a long process with long nights, a lot of figuring out but also some successes along the way.
Still motivated that everything will be great :)
Tough times
Xander made a new friend
As a first objective we chose a Ramen box to navigate to
All to make that gripper work
Team discussions to the win
We hope Prof. Horowitz will release them so we can finalize our project
Here is a video demonstrating the final outcome of our project. Watch as the MARS robot successfully detects, plans, and actuates to play catch with the ball!
Working on an industry project has the side effect of having to adapt from the class learned code, to a new robot. This comes with new working libraries, non-existing libraries and completely new environments.
Instead of using a centralized job queue, we implemented a distributed state machine where each node publishes a completion flag (boolean) to strictly trigger the next step in the processing chain.
Morphological operations use a kernel (a small matrix) to apply non-linear filtering techniques like erosion and dilation to binary or grayscale images, primarily to clean up noise and shape objects.
Initial long-range detections are often noisy. We implemented a continuous update loop where the planner refines the robot's path in real-time as the perception module generates higher-confidence target coordinates during the approach.
Hardware imperfections and friction cause non-deterministic behavior. We learned that open-loop commands fail to produce straight lines, necessitating active feedback control to continuously correct the robot's heading.
The engineers behind this Intro to Robotics project.