10S Bot – Autonomous Tennis Ball Collector

Photo of robot in it's final stage. Basket and arms are attached.
The Autonomous Tennis Ball Collector is a senior project sponsored by Dr. John Chen in an aim to completely change the way tennis balls are collected on the court. The robot utilizes machine vision to find the next closest tennis ball and then move to that position on the court. It has powered rotating cylinders that are able to collect the tennis balls off of the court and distribute them into an attached basket.

Our Team

The 10S Bot team is composed of four Mechanical Engineering majors and one Computer Engineering major.

Frances Belcher

Mechanical Subteam

I am a fifth year Mechanical Engineering major with a minor in Computer Science. In my free time I enjoy playing on the Ultimate Frisbee team, hanging out with my roommates and going on runs!

Matthew Hoffman

Mechanical subteam

I am a fourth year Mechanical Engineering major with a General Concentration. I love cats and playing indoor and outdoor volleyball in my free time.

Alex Petrov

Electrical Subteam

I am a fourth year Computer Engineering major. My academic interests include embedded systems and software development. I enjoy hiking and going to the beach in my free time.

Michael Yiu


I am a fourth year Mechanical Engineering major but am staying an additional year for a Masters in Mechanical Engineering. I have a passion for robotics, and in my free time I enjoy going to the beach and picnicing.

Image of Robert. He is smiling and wearing a green button up shirt.

Robert Luttrell


I am a senior mechanical engineering major with a minor in computer science. I’m interested in systems programming and backend software development. I enjoy working on my car and 3D printing over-engineered parts to solve day to day problems.  


This project was made possible by the generous support and guidance by our sponsor, Dr. John Chen!

Special thanks to our amazing senior project advisor, Sarah Harding for supporting us throughout the process. 

Our Project Video

Check out this video to get an overview of our project and the work we’ve been doing with it for the past three quarters!

Our Project's Digital Poster

Problem Statement

Dr. Chen is an avid tennis player who after long practice sessions would rather take a break than collect tennis balls. He would like an autonomous device to quickly collect the tennis balls so he can rest, drink water, and talk with his training partner instead of exerting energy to manually pick up the balls himself.

Design Constraints

Our design constraints are centered around ease of use for the customer and maximizing the efficiency of the robot. They include:

  • Weighs less than 25 pounds
  • Store 72 tennis balls
  • Clear a tennis court in 15 minutes or less
  • Have a maximum size of 10 cubic feet
  • Operator time must be 5 minutes or less

Design Process

Initial Design Concepts:

  • – Four mecanum wheels would create an omnidirectional robot.
  • – Cage for tennis balls was on top of robotic base
  • – Vacuum powered suction to pull the balls off the court
  • – Software ideation included LIDAR, topographical mapping and tactile sensors
Drawing of concept art, includes ramp and open basket.
Initial design concept, includes ramp and tactile sensor.
Drawing of initial design, includes basket and arms sticking out the front.
Initial design concept, features arms and suction power.

Initial CAD Model:

  • – Featured small opening for balls to pass through into open chamber
  • – No consideration for electrical components and housing
  • – Projected to not pass several of our specifications
Image includes 2 different views of the CAD model with annotations.
Initial CAD Design

Structural Prototype Key Takeaways:

  • – 3D printed rotating cylinders did not have the capacity to move the tennis balls
  • – Discovered that cylinder rods need to be secured at both the top and the bottom
  • – Discovered that if the wheels were not exactly perpendicular with the ground, the motors had large difficulties driving the robot
Structural prototype made to confirm success of rotating cylinders for ball collection.

Structural Prototype – Electrical:

For the electrical sub team, their prototype consisted of attaching the motors, wheels and other electrical components to a piece of plywood to confirm that these parts would function properly. while the plywood was not ideal for testing purposes, this created a strong foundation to base the verification prototype on.

Grainy image of plywood with motors attached and a large battery in the center.
Electrical subteam structural prototype made to test the motors and wheels.
Torque graph for the motors we implemented in the structural prototype.

Torque generated by motors are inversely proportional to their speed. In addition, this proportionality is not linear; torque provided rapidly declines with speed. This information helped guide the progress as we transitioned from structural to verification prototype.


Our finalized CAD model incorporated both the mechanical and electrical components of the robot. This CAD model allowed for dimensions of various components to be finalized and aided in determining tolerances necessary for manufacturing and assembly. We placed all of the electrical components in the CAD model to ensure there would be enough space for them and to optimize the placement. 

Image of our CAD model with electrical components highlighted and annotated.
Final CAD model highlighting placement of electrical components.
CAD model of t-slot used in our design
Image of blue tennis ball basket
Off the shelf basket chosen to fit with our design.

In terms of the mechanical design, the dimensions were based on general manufacturability plus the desire to use an off-the-shelf basket to hold all the tennis balls. There are three 3D printed parts included in the design that were modeled to custom fit with our project. The ramp was modeled to fit with the cylinders and connect well to the basket.

Image of CAD model with a focus on the mechanical components included. Annotations are present to identify the different parts.
Final CAD model featuring the mechanical components, including basket and PVC arms.
Gear with Mechanical Engineering department logo printed on it.

Dr. John Chen

This project is sponsored by Dr. John Chen and the Mechanical Engineering department at Cal Poly!


The software consists of four main parts. These are the computer vision library, the app functionality, the serial communication between the Pi and Arduino, and the  code that drivers the stepper motors.

Computer Vision This piece of software, written in Python3 and hosted on the Raspberry Pi, is in charge of accessing the camera and locating any balls in frame. Video is fed into the Pi through the Pi Camera V2 module. The software then estimates a rough position of the detected ball and sends a list of instructions to the Arduino to move the robot closer. This code was written using the OpenCV library.

App Functionality – The robot is controlled through a Bluetooth enabled, Android device. The BlueDot library provides an Android app controller that can be downloaded from the Google Play store. Using the Pi’s on-board Bluetooth along side the customizable BlueDot library the phone ad Pi were able to communicate from about 80-feet.

Serial Communication – In order for instructions to be sent from the Pi to the Arduino they must be able to communicate. Using the PySerial library, the two devices are able to communicate serially, or byte by byte.

Motor Driver – After receiving instructions from the Pi, the Arduino relays it to the motor drivers to actuate the motors and wheels. The motor drivers have four main functions: drive forwards, drive backwards, turn right, and turn left. A combination list of these four functions are used to drive the robot to the desired ball for collection.


The diagram above illustrates how each component is wired with respect to one another.


Raspberry Pi Model 3B+

Raspberry Pi Camera Module v2

L298N Motor Driver

Arduino Nano

12V, 3000 mAh Battery

ROB-09238, NEMA 17 32.57 oz-in motor


Image of Matthew's hands and the process of taping holes in t-slots.

80/20 T-slot being tapped using a vice and tap tools. This process was performed for all T-slots. 

Image of Miter Saw

To cut the 80/20 T-slots and PVC panels a miter saw was used. 

 80/20 T-slots – The T-slots were cut to length, drilled, and tapped where necessary using the equipment in the Mustang 60 and Aero Hangar machine shops. A miter saw for aluminum was used to cut, a drill press was used to drill holes, and a handheld tapping set was used to tap the end holes.

Acrylic Panels – The acrylic panels for the walls, ramp, and ramp flaps were cut to size using a table saw for wood, and all necessary holes were drilled using a drill press.

Steel Rods – The steel rods for the rotating cylinder shafts were cut to length using a miter saw for steel, and the cut edges were then sanded smooth using a belt grinder. 

3-D Printed Materials – 3-D printed parts were created for two key sections of the robot: attachment pieces for the PVC arms, and attachment pieces to hold the ramp and the basket together in place.

Photo of 3D printing machine with gray filament strewn about.
Failed 3D print of two different parts on the same bed.
Picture of vertical band saw located in the Aero Hangar
Drill press used for manufacturing the ramp and frame.

Final Design

Weight: ~24.5 lbs
Dimensions: -19.25” X 9.25” X 12.5”

Picture of finalized robot. It has a red ramp and a red basket attached to the back. The frame is made of aluminum t-slots.

Final Design Overview:

The final verification prototype for our project combines both the electrical and mechanical components in a cohesive manner. While a battery powers the whole robot, there is a Raspberry Pi and Arduino that are communicating to the motors to generate motion. While this is happening, the battery is also supplying power to the motors that are supporting the rotating cylinders. These are working in conjunction with the PVC arms to corral the tennis balls and move them up the ramp. The ramp and basket are secured to the robot with a 3D printed part. The basket has hooks that allow for it to be removed as needed.

Custom Components

  • 3D printed basket attachment
  • 3D printed PVC arm attachment
  • 3D printed ramp attachment
  • Aluminum t-slot
  • Acrylic ramp
  • Acrylic panels
  • Motor mounts

Stock Components

  • Motors
  • Tennis basket
  • PVC arms
  • Omni wheels
  • Rubber wheels
  • Raspberry Pi
  • Arduino

Design Verification

A total of nine tests needed to be conducted to fully verify that our design meets our eight design specifications.  Of those nine tests, three could not be completed due to the motors not being able to move the robot with ample speed or consistency, and the machine learning for detecting tennis balls not being fully incorporated with the final design. 

Weight Test – The robot was weighed on the freight scale in the HVAC lab, with a recorded weight of 24.5 pounds. This final weight falls within the maximum weight specification of 25 pounds. 

User Testing – Various users who were unaware of how the robot functions were given two tasks during which they were timed: the first was to set up the robot as if they were about to use it on the court, followed by detaching and setting up a full basket of balls. The average time of the first test was 2 minutes and 42 seconds, and the average time of the second test was 36 seconds. The first test easily passes its specification of 5 minutes, while the second test just barely fails its specification of 30 seconds.  

Range Test – The range of the phone app to control the robot reaches 80 feet, which is more than enough distance to control the robot from anywhere on the court.

Ball Collection Test – The spinning cylinders had a high rate of success at delivering balls into the basket or at least onto the ramp. However, battery problems cause the cylinders to stop working after only a few tennis balls have passed through, so this specification does not pass.

Image of a man trying to assemble the 10S bot. He is working on configuring the PVC arms.
User testing the assembly and operation, he was given limited instructions and then timed for completion.
Image of the 10S bot with several tennis balls in the basket.
Testing of the robot's ability to collect tennis balls.

Table of Design Verification Results

Table of specifications with the pass criteria and our results.

This table lists the 8 specifications we were testing for along with the pass/fail results. We successfully passed 3 of the total tests.

Current Status

The current status of the project is that the robot cannot detect tennis balls on the court and is not able to move at a speed or efficiency that we are satisfied with. While we are disappointed the project could not be completed to its full potential, we are hopeful it will continue on in the future. Our sponsor is interested in furthering the project and is willing to bring on new members to complete it.


Improvements to be made for future iterations:

  • Install stronger NEMA17 12V DC motors. 
  • Solder the connections on a perf board
  • Add caster wheels to the front of the robot to redistribute the weight better
  • Add a 3D printed box to house and protect the electronic components
  • Decrease the overall weight of the rotating cylinder collection components

Our Project Gallery

Have a Question About this Senior Project?

Send an email to pschuste@calpoly.edu to be connected with the project team. Please include the title of the senior project you’re inquiring about in the subject line.

Interested in Sponsoring a Mechanical Engineering Senior Project?

Visit our Sponsorship Page to learn more!

Check Out More Projects!

Visit our ME Senior Projects Page to view the latest Mechanical Engineering senior projects from the class of 2021!


Share on facebook
Share on twitter
Share on linkedin