Over this past quarter, I have been working on refactoring and improving the RoCo API, and merging the mechanical, electrical, and code interfaces in an organic manner that lets the users work on different parts of the robot concurrently.
Working on RoCo
Over the first two quarters of the past year, the main focus of the RoCo team was to add as much functionality to the API as possible. This led to much of the code being poorly documented. Furthermore, since the development of the mechanical side and the code and electrical sides were progressing independently, there was much overlap between the two code bases. In order to rectify this, we created a new system where all the components, composables, ports and other extensible classes would be contained in their own folder, separate from the user defined classes.
Then, we meticulously added documentation for each of the functions and classes within the API so that others will be able to contribute to RoCo once we deploy it as an open source project. Finally, I added the API for the electrical and code subsystems to the new code base. This involved resolving many minor inconsistencies between the two old code bases as well as renaming and reformatting all the code to follow PEP8 guidelines.
During this time, one of the other members in the RoCo team, Doga, came up with the idea of a two wheeled car robot that was powered and controlled through the user's cell phone. In order to create this robot, Jack had hard coded a prototype using the Arduino IDE. In order to add this functionality to the RoCo API, Jack and I started creating ports and drivers that would allow an android phone to interface with traditional microprocessors. Since the android device is physically on the robot, all the communication is done through hardware serial. To include this feature in the RoCo API, I created new ports that transmit Serial data between components. I also created components that get the serial data and return it through the serial port.
RoCo's new interface
After combining the code bases into a cohesive API, I worked on creating an interface that used the new API to let a user work on different parts of the robot at once. We had previously created interfaces that let the users work on the mechanical side, and the electrical and code sides separately. To create the new interface, I implemented a system of tabs, where upon opening each tab, the user was presented with options for which of the previously created interfaces to open. Each interface runs concurrently so the user can work on multiple parts of the robot at once without losing data.
Looking ahead
There are still many directions to explore with RoCo in terms of what it can do. We have some new members joining us that are using RoCo to make robots controlled with phones as well as designing furniture. I, however, will be moving on to a different project. While I will continue helping out with RoCo my focus will be elsewhere.
To be continued...
-Gopi