During the fall semester of 2016 I took an electrical engineering robotics course at UC Berkeley. The final project for the course challenged students to create their own projects that integrated the fundamental concepts of sensing, path planning, and actuation that had been discussed throughout the semester. This challenge led to the creation of Ballin! - a robotic launcher that can aim and shoot the perfect basket.
I worked within a four person team to create the Ballin! launcher. The vision for Ballin! was my initial contribution to the team. An automatic basketball shooter offered an elegant and fun way to combine the robotics concepts learned in class with fundamental physics principles, and excited me as a mechanical engineer. During the project, I led the design and manufacturing process of the launcher and played a key role in the design and refinement of the motorized platform assembly.
We started by developing a set of design criteria to guide and inform our design process. This required us to think hard about the intended functionality of our robot, the feasibility of our goals, and our priorities in bringing various aspects of the robot to life. The table below on the right outlines the list of design criteria that we collaboratively generated. With our design criteria in mind we moved to ideation -
brainstorming the potential form factors for our motorized platform and launching system as well as various strategies to implement our computer vision and path planning control system. Each of these topics required detailed exploration and iteration (see launcher iterations below) before creating our final prototype. A complete and in-depth discussion of this electro-mechanical design journey has been documented on our project website.
Our final robot can be seen in action below. Our platform utilized stepper motors to control the pan and tilt angle of the launcher. These motors interacted with a motor shield and Arduino which allowed us to serially communicate with them and implement our python-based control system. The control system relied on computer vision feedback from the launcher-mounted web-camera to correctly position the launcher for shooting. Our camera was able to recognize the location and orientation of the hoop using an AR-tag that was attached to the back board. This position/orientation information was fed into our kinematic model to calculate a desired launcher pan and tilt angle that would give our robot the best chance of successfully making the basket. Our python script subsequently sent commands via a serial connection to the stepper motors in order to position our launcher in this desired configuration. The launcher itself was machined out of 6061 T6 aluminum and utilized an internal spring-and-piston assembly to repeatably launch the 1/2" diameter steel ball bearing (our basketball) at a constant velocity. Reloading our standalone launcher was a manual process, but launching was semi-automated - requiring the user to flip a switch that actuated a motorized mechanism to release the launcher.
During final testing, our system was able to successfully make 8 out of 11 shots (72% success rate) into a 3" diameter hoop from distances ranging between 42.8" and 51.3". We also anecdotally found that the system had an effective range of 30" - 50" and could reliably make shots within those geometric boundaries. This performance helped demonstrate that our team was successful in reaching all of our "Minimal Goals" outlined above as well as some of the "Reach Goals" that we set to help push the boundaries of our project.