Our design involved a tabletop football table that we modified using 3D printed and a timing belt in order to move the goalie. A camera is mounted above the table to get a birds-eye view of the field, and sends data to the computer through a USB connection. An ESP32 microcontroller controls the motor that moves the goalie, with decisions on where to move being made by a Python program that takes in position data for the ball and goalie from the camera.
Speed: Move quickly enough to respond to ball, around 10 cm/s.
Form Factor: Small physical setup requiring little setup to play after initial construction.
Force: Actuate with enough force to move players.
Effectiveness: Block around 75% of shots.
Cost: Keep cost <50$ including cost of table.
There are a few groups out there that have built automatic foosball players. An example can be seen on the right. Whilst these existing solutions were useful for prompting thought, our big issues with them were: the size of the actuation mechanism, the response times, and the cost. We wanted to make a small physical system that did not require long setup times, as the extended arm design you see on the right requires you to set up the tracks before playing. We also wanted to find a cheaper solution than the $100+ solutions we found online, tasking ourselves with a <$50 build to stay within the class budget. We were also keen for our final product to be a machine you could actually play against, as opposed to a slow-moving lab-demonstration article.
https://www.instructables.com/Autonomous-Foosball-Table/
Compact design - we opted to use only a timing belt in our design in order to simplify our design and ensure that the physical set up of our project is straightforward. This made our design very compact and easy to actuate, but is more sensitive to the belt or motor degrading in quality with time than a more robust set up would be.
Serial communication - rather than using a publisher/subscriber model in ROS to communicate with the microcontroller, we used a Python library to send serial commands. This was done to avoid needing to secure lab computer spots and to avoid setting up a ROS framework on a personal computer, which would have been time consuming. This ran into occasional of packets being dropped or sent out of order.
Color detection - HSV values were used to identify objects since the table gave us a uniform and stable background to observe the colors on. This was less reliable than a method like canny edge detection, but less computationally intense, and therefore better for our setup.