One of the best parts of the graduate school at Carnegie Mellon has been the project based courses. In fulfillment of an advanced control systems integration course, my group and I developed a method of swinging a suspended ball up and catching it with a cup attached to a quadcopter. The quadcopter was a Crazyflie 2.0. With position and orientation of the quadcopter and ball from a motion capture, control was achieved off board via ROS. All of the heavy controls work (time-varying LQR for trajectory tracking and constrained optimization for trajectory generation) was done by my group member, Daniel Piedrahita and Andrew Tallaksen. I lead implementation of his work on hardware and getting us from simulation to reality.
The above GIF shows the harmony achieved between our constrained trajectory optimization (top right in 3D, lower right in 2D) and our implementation (top left real video, bottom left RVIZ view). The magenta ball in the lower left RVIZ display shows two things, (1) an energy based prediction of the maximum height of the ball for predicting when to switch to, (2) a ballistic trajectory based forward-prediction of the ball’s position. You can see it switch to a ballistic trajectory prediction right before it catches it. This is the heart of why our system was capable of achieving ~40% success rate, a great achievement considering we went from no quadcopter experience to this in a single semester. After the end of the class, a couple of us have voiced our interest in continuing this research in our free time to improve our implementation and make the catch more repeatable.