Who is this for?
On a high level, this is for anyone who finds it useful -- that's the ultimate goal of an open platform! With that said, I designed this protocol and the accompanying case study with the idea of making robotics more accessible to those who are just starting out in robotics and those without an engineering background by abstracting the technical aspects and demonstrating the ideas and guiding principles behind modular systems design that leads to resilient and inter-operable systems.
I am using a lot of off-the-shelf parts in this case study because this is not meant to be an advanced electronics tutorial but instead is meant to show a higher level picture of robotic systems design.
What is StackMod?
StackMod is a simple human-readable communications protocol created to help simplify the passing of data between modules in a robotic system. StackMod was designed for use over I2C or Serial. My focus in robotics has been in designing small to medium sized autonomous vehicles so this protocol and the accompanying case study are geared towards developing a robotic vehicle.
How simple is StackMod? Even without knowing anything about this protocol, you can probably figure out what this command does:
{@$MTR2+078}
Yep, that sets the speed of motor 2 to 78 arbitrary units.
Why StackMod?
Modular design in robotics requires the compartmentalization of behaviors and functions into discrete and, ideally, interchangeable modules. As I started building more complex systems with multiple "brains" working together (Raspberry Pis, BeagleBones, and Arduinos), I eventually created a language that could be used to more easily facilitate communication among to all these controllers over I2C. After tweaking that language for various projects, I decided to standardize it and create a formalized protocol, which I am releasing for anyone to use.
There are a lot of full-featured and extensive protocols and libraries out there (Firmata being at the top) and this does not attempt to replace or compete with those. It's a simple single-purpose protocol with the sole focus of use for robotic systems with no overhead or fancy features.