Thanks Seth and Martin, you both bring up some good questions.
LusidOSC is intended to work across a very large range of interfaces, including surfaces and objects, but also things like 3D gestures and GPS-based tracking, systems with a wide range of ID types and lengths, and can be extended to new technologies and setups without needing to create custom profiles (more on the importance of this later). Saying that TUIO was “Reactable-centric” was not meant harshly; I was just pointing to the fact that TUIO is focused on “‘interactive surfaces’ and its ‘tangibles’”—an exciting, but fairly narrow range of new and emerging interfaces.
Being from the Tangible Media Group at the MIT Media Lab, I certainly have a love for the various surface+tangible interfaces (reactable and audiopad being a couple of my favorites). My main research goal is to make tangible interfaces accessible to people outside research labs who have creative ideas, but may not have the technical expertise or money to build larger expensive tables. I originally planned to use TUIO, but after talking with a lot of people working on next-generation interfaces, I realized the community needs something a little different to really get more people involved.
LusidOSC looks a lot like TUIO (and credit is happily acknowledged), but the small changes allow for it to grow rapidly; both in terms of the range of applications and supported tracking systems.
The fundamental data in a LusidOSC message (unique ID, position, and rotation) is designed to work-by-default, regardless of the type of object, cursor, gesture, etc. since essentially there is only one main profile. Having multiple profiles (as in TUIO), devices are segmented based on capability and use. While this seems convenient at first, it also means that applications get segmented similarly. For example, when a new custom profile or address is created to fit a technology, it won’t trigger any of the other events, even though there may be significant overlap in data. With LusidOSC, any object, cursor, gesture, etc. will trigger an event in your application; as a developer it’s up to you to decide how you want to handle it, but at least you see the object.
Ad-Hoc data is supported in LusidOSC (without the need for custom profiles) so that developers of new systems can rapidly prototype ideas. When the structure of how they wish to send their data has been decided, it can easily be amended to the LusidOSC specification. Libraries will need only minimal changes for protocol updates (just adding labels for convenience to type IDs, but even that wouldn’t be required). As developers, we greatly benefit from being able to experiment at the high level without needing to recompile libraries as we make changes.
There is also a philosophical difference between having a protocol created by a single person with community input and having the community itself creating the protocol. Both can work well, but I lean towards the community itself being in control. In the spirit of that, everything said here about LusidOSC is open for debate end everyone is welcome to join in its development.
LusidOSC is very young, but we strongly believe that changes should be made as soon as they are agreed upon. This is why, after only being released for a little over a month, we are looking at the next version. (Martin, you are definitely correct that it’s difficult to foresee everything when designing a scalable protocol). The next version of LusidOSC (v1.1) will make things a bit more explicit while still being completely backwards compatible.
Based on the discussion so far, I imagine TUIO2 is a good next step for nuigroup. As long as the community chooses to make the source open (for things like tbeta), we’ll have the flexibility to port it over to other protocols (such as LusidOSC) if interested.
Thanks for all of the discussion. It’s great to see people interested in figuring out how to move all of these ideas forward!
Adam