This past Friday, Christian Prathyush and I met with some of the newer members of our lab who are interested in working on RoCo. Before we completely move to a new project, we got together to discuss what RoCo's status would be by then. One of the topics discussed was the fairly fragmented nature of the RoCo interface. Currently, the interface allows users to create new tabs, which can be used to create or modify mechanical components, base code components, or composite components. This means that the user is able to work on many different parts of the robot concurrently.
While this is helpful to the user, it was decided that it would be more intuitive if the three interfaces were to be connected at a more fundamental level. For example, currently, if a user were creating a robot with the interface and decided to add a servo to the composite component interface this action would have no significance in the interface's understanding of the robot as a whole. If a robot has a servo, in order for the design that RoCo outputs to make sense, the robot must have a mount for the servo as well. However, as the interface is right now, the servo would appear in the composite component interface but the servo mount would not appear in a mechanical interface.
This raises some more issues. If the user is working on multiple mechanical components at the same time, how would the interface know which tab to add the servo mount to? Similarly, if a user added a servo mount to a mechanical component, which corresponding composite component interface would have a servo motor added to it? This scenario is even further complicated if the user is creating multiple robots simultaneously using the interface.
I spent this week thinking about these problems and decided to tackle this issue in the simplest manner. Whenever a component is added to any interface, if the component has both a code/electrical composable as well as a mechanical composable, a dialog box should pop up, asking the user which tab to include the complementing component to. This way, the user can ensure that there will be no missing pieces when creating the robot.
This modification will require a nontrivial amount of work since currently, the RoCo interface has no idea which components have which composables. I have started making provisions for this in the source code and have begun outlining a design to add this feature but may choose to hand this project over to someone else, after taking time into consideration.