This modular design allowed us to exceed initial design criteria and have the system identify not only four different types of trash, but also the three types of tools as well, with ability to identify significantly more objects by feeding appropriate number of image samples of object type to the training model. In addition, we were able to have Baxter use two distinct tools, with code modularity designed to allow for easy addition of other types of tools (i.e. electromagnets for magnetic objects). And specialized stand-alone tools allowing for easy manipulation by the limited Baxter arms eliminated the need for complex, non-generalizable trash pickup policies.
This proper system design allowed us to abstract away the three distinct subsystems during development, and allowed better team work allocation by having each team member focus on one subsystem, and work together on pre-defining subsystem handles and endpoints for seamless subsystem integration.
In addition, when robustness and reliability of certain tasks were desired, only relevant subsystems had to be improved, without a total overhaul of the entire project. For instance, trash sweeping reliability improved by only working on the structural integrity of the free-standing broom. In another instance when we wanted more trash to be identifiable, we simply had to train the model more with images and make minor adjustments to the policy selection and IK motion planning.
The trade-off, though, to designing such a robust system resulted in us not having as much time as we would have liked to train a larger dataset of trash objects and test a wider range of tools. Nevertheless, we were able to successfully train the model to identify chips, bottle, cans, and the tools, and test manipulation of a broom, dustpan, and sticky tool on the respective trash objects.