Introduction | Design | Implementation: Hardware | Implementation: Software | Results & Video | Reflection | Team | Additional Materials |
Key design criteria for our project included both efficiency in energy spent and distance travelled, the ability to operate in real-time, and robustness in catching objects. One of the most significant design decisions made was the usage of Koko, a custom 7 degree-of-freedom robot arm, rather than a Baxter or Sawyer. Given that the arm is still undergoing design iterations, we experienced lapses in mechanical reliability, oftentimes running into issues like broken pieces that needed maintenance or unexpected wear and tear. However, using the Koko provided us 24-hour access and allowed us to customize the arm to our project by adding a custom end effector. Additionally, we had to generate our own URDFs, which we did using a Solidworks URDF plug-in with additional manual parameter tuning. Given that the Koko was a custom project, the control code and hardware specification could be tailored to our design criteria.
For sensing and feedback, we chose to use an Xbox Kinect. This gave us the option to use RGB image sensing, depth sensing using an infrared (IR) camera, or a combination of both. Depth sensing from the RGB channels required an initial depth calibration, the results were relatively noisy in comparison to those from the IR channel, and the update rate of the frames was too slow at times and also nondeterministic. Thus, we opted to use the IR channel. RGB image sensing was used to identify the center of the ball and data from the IR camera identified this point’s position in space. We made the choice to truncate the range and reduce the resolution of the IR sensor to increase the update rate of the sensor, meaning we had to throw the ball from no further than 1.5 meters away from the camera. Since the IR channel was able to transmit data at the maxium 30Hz, we were able to operate at real time rates at the cost of a noticeable reduction in operating range.
We chose to implement a Kalman Filter (KF) for the ball tracking for multiple reasons:
For catching, we used a Velcro ball catching pad affixed to the end effector in order to satisfy the robustness criteria for catching. While use of a gripper to catch the ball would require force control to ensure success, with the use of a Velcro pad application of force is passive, and we only needed to implement position control. Moreover, given that the pad is 7 inches in diameter, accuracy requirements for our projectile estimation decreased, increasing the probability of a successful catch. We selected large tennis balls as the object for our robot to catch given that they readily adhere to the Velcro pad, have a distinct color that is easily recognizable by the RGB image sensing, and are relatively insensitive to drag forces, and thus maintain a parabolic profile, making our trajectory estimation via Kalman filter more accurate.