I found this really interesting rant about platforms quite inspirational. A short summary is that if your focus is on making products without being concerned about creating a useful API, it will be harder for people to make things that take advantage of your product. Like facebook and farmville. What does this have to do with robotics?
Well, Arduino is a platform (a very successful one). Many many people have written libraries that works with it, which is why I moved to using it over programming in bare C/C++. JeeLabs has a platform, the JeeNode with different ‘Ports’ that use the Arduino platform (platform on a platform). I have noticed that my past projects (and the controller) are just products, not platforms. When creating my original RC controller and car, I had two distinct code bases. But the focus on creating common drivers (to interface directly with the HW), and API functions that handle those drivers, hasn’t been high on my todo list.
I’ve been struggling to create a packetized communication method to communicate between the controller and anything else, mainly because I couldn’t see the big picture. I couldn’t grasp how the pieces fit together, but now I think I can. By organizing things into layers( HW-ATMega328, Arduino 1.0, Driver, API, Program), I can now see how everything fits together, and how I need to organize things like that, which is essentially a platform. My high level programs will interface with this API, which will handle the nitty gritty details.
I think I’m going to organize things, so that all I’ll need to do is to initialize a library, which will contain all of the low level functions for the API. The challenge will be then to just use the API (ie interface functions) to do things. I’m not sure how this will effect the size of the code, but this may be a good way to do things, because then I could more easily use the same code for different projects (like the Ports library for JeeLabs). This seems like the best way forward, and forward I go!