Pool-inator
The goal of this project was to use the Franka Emika Panda 7 DOF arm (shown below) to play a game of pool on a tabletop pool set.

Group Members
An Nguyen, Caroline Terryn, Catherine Maglione, Joseph Blom, Logan Boswell
Example Game & RVIZ Window
Overview
For a final project in Northwestern University’s ME 495: Embedded Systems in Robotics, my group decided on the goal of using a 7 DOF robotic arm to play pool on a tabletop pool set in order to showcase the various skills gained using ROS2 throughout this course.
Subsystems
- Franka Emika Robot Arm: The arm was controlled using the ROS2 MoveIt API. A wrapper was written to make the API easier to use. The
control
node handles all the movement. - Computer Vision: An Intel RealSense D435 Camera was used for all computer vision. April Tags were used for identifying the pool table’s pockets and calibrating the arm’s starting position. This camera was also used to identify all of the balls on the table. The
transform
node establishes the link between the camera frame and the robot base frame, and theimage_processor_colors
node identifies the pool balls. - Gameplay: A pool algorithm was implemented so the robot would start a game by breaking and keep playing until all of the balls besides the cue ball (red ball in our case) were pocketed. Then, the robot would knock the cue ball into a pocket and return to its home position. If the cue ball was accidentally knocked in a pocket, the arm would wait until the cue ball is replaced and it is commanded to resume playing.
My Focus
In this project my focus was on few areas, including movement and gameplay. I wrote some initial movement functions that were used for calibration in the early stages of this project, that were further refined and used for gameplay as the project went on. I also designed some custom pool cues that were easier to the robot to grip and maneuver around the table.
Highlights
Here is a compilation of some of the best shots the robot made on the table.