ee106a

Introduction Design Implementation: Hardware Implementation: Software Results & Video Reflection Team Additional Materials

A Ball Catching 7 DOF Robot Arm

Design

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.

Koko: The 7DOF custom robot arm from Pieter Abbeel's lab and our Complete Setup


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:

  1. The KF is a recursive linear estimator which is computationally efficient.
  2. Given linear dynamics and gaussian noise, the KF is the optimal estimator.
  3. The recursive nature of the KF allows for the estimates to converge, and allowed us greater flexibility transparency in implementation later on by just tracking the current best estimate.
  4. The KF is easily extended to include affine dynamics introduced from acceleration due to gravity. We chose a closed form 4th order quartic solver to calculate the intersection of an estimated trajectory with the robot’s workspace (a sphere) because it is extremely computationally efficient, and deterministic in its runtime (eg. not relying on something like fsolve). The trade off was that we added additional complexity to the code, and the math was done in a single coordinate frame that was later changed.

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.

Implementation: Hardware