The project posed many interesting and unexpected challenges. Overall, we achieved our overall task: we successfully and consistently pushed our crate on the field to the corresponding coordinates on the board. As a result, we met most of our initial end goals, but with some crucial caveats.
The first of our original goals was to accurately relocate the crate to the specified destination. For the most part, we achieved this goal. We did, however, run into our first trade-off. The inconsistent and unpredictable behavior of the simultaneous linear and angular velocity controllers proved too much, and we were forced to isolate our Turtlebot's movement to either linear or angular, but not both. Additionally, we had to reduce the speed and margin for error in our program to improve accuracy and precision. Despite these limitations, we reliably and consistently relocate the crate to the desired end destination.
The next goal was having the Turtlebot succeed in its task regardless of the initial configuration of the field. As demonstrated in the video above, we fully succeeded in accomplishing this goal. It should be noted, however, that hardware restrictions imposed some limitations on the performance of our robot towards the edge of the camera view (see Design for more details).
One of our most interesting (and challenging) tasks was handling a physical disruption of the Turtlebot's location. If the camera loses sight of the AR Tag on the top of the Turtlebot, the Turtlebot will continue to execute its previous command. Furthermore, the Turtlebot has to quickly recalculate its previous plan of action. Despite these obstacles, we managed to efficiently adjust the Turtlebot to a physical disruption, something many real-world warehouse robot counterparts struggle to do efficiently.
Another adversarial condition we encountered during testing was accounting for movement on our board while the Turtlebot was already executing a command. The planning phase had to be redone from scratch, and the previous position of the crate may not be configured ideally within the square in the simulated grid. We coped by swapping between absolute (real world) and 2D (simulated) coordinates frequently to develop more accurate plans of attack for the Turtlebot. As a result, we are able to perform live end-position updates flawlessly!
The final goal is also the only one we could not meet to our satisfaction. As aforementioned in our first goal's results, we encountered a trade-off that we could not get around. To achieve accuracy, we had to sacrifice speed. To achieve speed, we had to be more lenient with our accuracy. Ultimately, however, we realized that a speedy performance is not useful in the real-world if the task fails at a higher rate (a misplacement of the crate in a real setting can only be noticed by a detection system or human intervention, which is costly). Thus, we consider our attempts to reach this goal a failure, but not a very discouraging one.