Years later after making the last remote controller and graduating from university in 2017, we decided to do something interesting. We looked through our previous experiences to find something meaningful. We noticed the need for an open-source remote controller is still solid and market does not offer any appropriate solution.
So, we went to work again like the old days. But this time around, we decided to make one remote controller that can adapt to different robots and projects. Of course that would be possible if we would just make the product open-source but we wanted something more. We wanted easy adaption. So even folks without programming background still get the chance to tailor their remote controller to their project. There was only one way to achieve that goal and as you may guessed it, we had to write a lot of code.
We wanted to make sure everyone can customize their remote controller by adding the switches, joystick and many other inputs devices. That means we had to allow code-free customization through the menus which was a huge challenge.
Our previous hardware and firmware would not allow any sort of adoption/customization unless you start writing a lot of code, so we had to think about everything. The user interface, the software architecture and the hardware design.
On the bright side we had a lot of experience and as a result we had clues on what to do and what not to do. But even then we spend a lot of time to develop and test the system all together to make sure users can easily use it. In fact we fabricated the first prototype only for firmware development.
We wrote more than 500,000 lines of code. We made many libraries and many testing automation to make sure our libraries are working correctly. Sometimes we even decide to rewrite the library to make sure it scale better with the project. It was a challenging time but eventually we managed to complete a very large portion of the firmware (80%) in 2018. The firmware gave us the confident to prepare for the next stage, face lifting of the controller.