Mixed Object Prototyping (M.O.P.) library, a toolkit for rapid prototyping physical-digital objects.
Mixed Objects Library intends to provide developers with a framework for rapid prototyping of interactive physical-digital objects for mixed systems. The library extends Qt, a cross-platform application framework with integrated tools for GUI development. More on Qt can be found at http://trolltech.com/products/qt/ . This toolkit extends Qt for developping mixed objects, like those users interact with in tangible user interfaces, augmented reality, etc., more generally in mixed systems. This documentation is intented to be used by users for prototyping mixed objects, as well as by developers for extending the toolkit.
For getting ready to use the toolkit, users should first install Qt and then install M.O.P.
Current version of the toolkit works with Qt 4.2.3. . Download Qt 4.2.3. from ftp://ftp.trolltech.no/qt/source/qt-mac-opensource-src-4.2.3.tar.gz and follow instructions for installing Qt for Open Source C++ development on your platform.
M.O.P. library is not public yet (waiting for publication).
Depending on the supported hardware and libraries you want to use (Phidget, Interface-Z, ARToolKit, etc.), you need to install what they require.
The toolkit is based on a conceptual description of interactive mixed objects. Here is a simple example of a decription of mixed object and its corresponding code :
Description of a simple mixed object that has a Interface-Z Bend Sensor and a mini screen embedded in it.
MIDIDevice BendSensor("BendSensor", LinkingComponent::IN, 0, true, 7);
ThresholdInputLanguage Threshold("Threshold", 50, false);
DigitalProperty MyProperty("MyProperty", QVariant::Bool);
ShortDisplayOutputLanguage TextMessage("TextMessage", 1000, QVariant::String);
QObject::connect(&BendSensor, SIGNAL(updated(int, QTime)), &Threshold, SLOT(update(int, QTime)));
QObject::connect(&Threshold, SIGNAL(updated(QVariant, QTime)), &MyProperty, SLOT(updateProperty(QVariant)));
QObject::connect(&MyProperty, SIGNAL(PropertyUpdated(QVariant)), &TextMessage, SLOT(Show(QVariant)));
Note that you don't need a screen component. In general in the case of common GUI devices that are also used in physical-digital objects, like screen or loudspeakers, they are already handled.
The Graphical Developer Interface can be used for debugging and simulating the behaviour of a component. Here is the example of the graphical interface for the previous object.
Graphical Developer Interface of a simple mixed object that has a Interface-Z Bend Sensor and a mini screen embedded in it.
For building this interface, you need to write:
For evaluating a prototype, the toolkit currently propose a Logging component. Here is the example of building the Log components for the previous example:
For developping new components for MOP toolkit, we present here the convention of this project (unsorted and ongoing listing).
- The component class nam must be named <Particularity>(<Direction>*)<AbstractionLevel>, with capital letter at the beginning of each word. For example, a component for a phidget input device is named PhidgetInputDevice. On the contrary a component for a phidget device that can be either input or output is named PhidgetDevice.
- New files must be added in the project (.pro) file before compiling.
- A component class must inherit QObject, in order to be able to use the signal and slot mechanism for connecting to other components. For more information on Qt QObject model and signal and slot mechanism, see reference documentation at http://doc.trolltech.com/4.2/signalsandslots.html .
- We named signals "updated" and slots "update", unless a specific semantic is required. Signatures of signals and slots are to be (QVariant, QTime) for respectively the value to be carried and the time stamp. For connecting a component with its debugging interface component, if an additional slot was required, we named it updateFromGUI.
- To take full advantage of the Qt toolkit, we use their Property system for the the log and debugging interface components. Therefore new components must declare relevant members as properties, with the Q_PROPERTY macro. For more information on Qt property system, see reference documentation at http://doc.trolltech.com/4.2/properties.html .
- Class members are preceded by '_' character.
- File must be commented, with:
- name "\file"
- author "\author"
- date "\date"
- brief description "\brief"
- full description if needed
- In header (.h) files are commented :
- properties "\property"
- In source (.cpp) files are commented :
- methods (including slots, getters and setters)
For each of these elements to be commented, here is what is done so far:
- Class are commented with:
- brief description
- group it belongs to
- members and signals are commented with:
- parameters if needed
- what it does
- Developpement of the remaining composisiton components, drawing upon existing solutions (ICARE for example)
Generated on Tue Mar 10 11:18:16 2009 for Mixed Objects by