Skip to main content
Tool
Scratch4TUIO
S4t.png
https://github.com/caesarion/Scratch4TuioExtension
Scratch4TUIO integriert Be-greifbare Interaktionen in die Lernplattform Scratch.
Entwickler Sebastian Thiele
Status Aktive Weiterentwicklung
Letzte Aktualisierung 30.09.2015
Sprachen Deutsch, Englisch
Betriebssysteme MAC OS X, Windows, Linux
Plattform Flash
Lizenz Open Source
Links
Schlagwörter Tool:Scratch, Be-greifbare Interaktion, Tool:reacTIVision, Tool:TUIO, Tool:TUIO Simulator
Verwandte Schlagwörter

Scratch4TUIO ist eine experimentelle Erweiterung für Scratch 2.0, die das Tool:TUIO-Protokoll in Scratch integriert.

Das TUIO-Protokoll

Das TUIO-Protokoll ist eine Schnittstelle zwischen Controllern, die durch ein System von Sensoren Gesten oder Objekte erkennen und verfolgen können, und der darüber liegenden Applikationsschicht. Auf diese Weise wird die Applikation von der Sensorik entkoppelt. Das Protokoll unterstützt drei Klassen von erkennbaren Objekte, sogenannten Profilen: TUIO-Objekte, TUIO-Zeiger und TUIO-Blobs. TUIO-Objekte sind durch Marker eindeutig identifizierbare Objekte und besitzen daher eine Symbolnummer, die durch den Marker kodiert wird. TUIO-Zeiger bilden Fingerberührungen oder Mausbewegungen ab. TUIO-Blobs sind alle erkannten Objekte, die nicht aufgrund eines Marker eindeutig klassifizierbar sind. TUIO ermöglicht es bestimmte Eigenschaften der TUIO-Objekte, TUIO-Zeiger und TUIO-Blobs (im Folgenden wird TUIO-Punkt als Oberbegriff für diese Profile benutzt) wie aktuelle Position, Bewegungsgeschwindigkeit, Drehgeschwindigkeit, Bewegungsbeschleunigung und Drehbeschleunigung an die Anwendungsschicht zu senden. Außerdem besitzt jedr TUIO-Punkt eine eindeutige Sitzugsnummer, die er solange er von der Sensorik erkannt wird, behält, sodass es möglich ist, TUIO-Punkte eindeutig zu identifizieren. Die Symbolnummer von TUIO-Objekten reicht nicht zur Identifikation aus, da es den gleichen Marker auch mehrmals geben könnte. So ist die "Art" des TUIO-Objektes zwar eindeutig, aber Objekte gleicher Art wären ohne Sitzungsnummer nicht unterscheidbar. Weiterhin kann über die Sitzungsnummer auch verschiedene TUIO-Zeiger auseinandergehalten werden, um bspw. festzustellen, wie viele Finger sich gerade auf dem Touchdisplay befinden.

Ein prominentes Anwendungsbeispiel des TUIO-Protokolls ist der reacTable. Ein System von Kameras bildet hier die Sensorik, welches auf einem Tisch befindliche Fiducial-Marker als TUIO-Objekte und Fingerberührungen als TUIO-Zeiger erkennt. Die TUIO-Daten werden von einer Applikationssoftware in Musik interpretiert. So kann sich der Nutzer beispielsweise mithilfe der Position und des Drehwinkels von TUIO-Objekten eigene, synthetische Sounds generieren.

Wie S4T funktioniert

Aus den über das TUIO-Protokoll eingehenden Informationen über die getrackten TUIO-Punkte werden in Scratch4TUIO die TUIO-Events ADD, REMOVE und UPDATE berechnet. Ein ADD-Event tritt ein, sobald ein TUIO-Punkt das erste Mal von der Sensorik erkannt wurde (Wenn die Sensorik eine Kamera ist, heißt das bspw., dass ein Objekt in Sichtfeld der Kamera erkannt wurde), ein REMOVE-Event tritt ein, sobald der TUIO-Punkt nicht mehr erkannt wird (also bspw. das Sichtfeld der Kamera verlässt), und ein UPDATE bedeutet, dass sich eine Eigenschaft eines TUIO-Punktes geändert hat, wie zum Beispiel die Bewegung eines TUIO-Punktes vor der Kamera, da sich hier die Position und evtl. auch die Geschwindigkeit und Beschleunigung des TUIO-Punktes ändern.

Außerdem bringt Scratch4TUIO aus Scratch-Nutzer Sicht neue Blöcke mit, die das Reagieren auf die TUIO-Events ermöglichen sowie Blöcke, um Eigenschaften aller derzeit "lebendigen" (d. h. derzeit von der Sensorik erkannten) TUIO-Punkte wie die aktuelle Position, Geschwindigkeit und den Status auslesen können. Auf diese Weise kann Scratch für die Entwicklung eigener, tangibler und/oder gestengesteuerter Benutzerschnittstellen genutzt werden, je nachdem, welche Sensoren-/Controllerschicht genutzt wird. Voraussetzung ist lediglich, dass der Controller die von der Sensorik aufgenommenen Daten via TUIO-Protokoll bereitstellt.

Die Blöcke von S4T

Im Folgenden werden die Scratch4TUIO Blöcke vorgestellt. TUIO-Blobs werden noch nicht unterstützt, sodass die entsprechenden Blöcke auch noch nicht existieren.

Add-Block

when () added:: extension hat

Der Add-Block erwartet als Parameter eine Zahl, welche als Symbolnummer eines TUIO-Objektes interpretiert wird. Alternativ kann auch dieTUIO-Objekt Blöcke oder der TUIO-Zeiger Block in den Parameter geschachtelt werden. Der Add-Block schaltet und führt die angehängten Blöcke aus, sobald ein Add-Event eintritt, welches den Parameter betrifft. Ist bspw. der TUIO-Zeiger Block in den Add-Block geschachtelt, schaltet der Block, sobald ein TUIO-Zeiger erkannt wird, d.h. bspw. ein Finger zum ersten Mal den Touchdisplay berührt.

Update-Block

when () updated:: extension hat

Der Update-Block erwartet als Parameter eine Zahl, welche als Symbolnummer eines TUIO-Objektes interpretiert wird. Alternativ kann auch dieTUIO-Objekt Blöcke oder der TUIO-Zeiger Block in den Parameter geschachtelt werden. Der Update-Block schaltet und führt die angehängten Blöcke aus, sobald ein UPDATE-Event eintritt, welches den Parameter betrifft. Ist bspw. der TUIO-Zeiger Block in den Update-Block geschachtelt, schaltet der Block, sobald ein TUIO-Zeiger eine Eigenschaft ändert, d.h. bspw. ein Finger auf dem Touchdisplay bewegt wird.

Remove-Block

when () removed :: extension hat

Der Remove-Block erwartet als Parameter eine Zahl, welche als Symbolnummer eines TUIO-Objektes interpretiert wird. Alternativ kann auch dieTUIO-Objekt Blöcke oder der TUIO-Zeiger Block in den Parameter geschachtelt werden. Der Remove-Block schaltet und führt die angehängten Blöcke aus, sobald ein Remove-Event eintritt, welches den Parameter betrifft. Ist bspw. der TUIO-Zeiger Block in den Remove-Block geschachtelt, schaltet der Block, sobald ein TUIO-Zeiger entfernt wird, d.h. bspw. ein Finger vom Touchdispay genommen wird.

Any-TUIO-Objekt Update Block

when any TUIO-Object updated :: extension hat

Dieser Kopfblock schaltet, sobald irgendein TUIO-Objekt ein Update erhält.

zuletzt-geändertes TUIO-Objekt Block

(latest TUIO-Object :: extension)

Dieser Kopfblock referenziert das zuletzt geänderte TUIO-Objekt. Es macht semantisch daher keinen Sinn, ihn in den Add-Block, Remove-Block oder Update-Block zu schachteln, da das zuletzt geänderte Objekt erst dann feststeht, wenn das entsprechende Event bereits eingetreten ist. Syntaktisch lässt sich der Block natürlich in die anderen Blöcke schachteln, es passiert allerdings nichts. Dieser Block kann dazu genutzt werden, um Eigenschaften über das zuletzt geänderte Objekte wie den Status (über den Status-Block) oder Attribute wie Geschwindigkeit etc. (über den Attribut-Block) auszulesen.

TUIO-Objekt mit Symbolnummer Block

(TUIO-Object with SymbolID :: extension)

Dieser Block kodiert ein TUIO-Objekt mit einer bestimmten Symbolnummer.

TUIO-Objekt mit Sitzungsnummer Block

(TUIO-Object with SessionID :: extension)

Dieser Block kodiert ein TUIO-Objekt mit einer bestimmten Sitzungsnummer.

TUIO-Zeiger Block

(TUIO-Cursor :: extension)

Dieser Block kodiert einen TUIO-Zeiger.

Attribut-Block

(attribute [] of  () :: extension)

Mithilfe dieses Blockes lassen sich bestimmte Eigenschaften der TUIO-Punkte auslesen. Unterstützt werden die Position, Bewegungsgeschwindigkeit, Bewegungsbeschleunigung, Drehgeschwindigkeit, Drehbeschleunigung, aktueller Drehwinkel.

Status-Block

Is  []  ? :: extension boolean

Mithilfe dieses Blockes kann der aktuelle Status des TUIO-Punktes ausgelesen werden, bspw. kann so erfragt werden, ob ein Objekt gerade in Bewegung ist oder sich dreht.

Weiterführende Links

Interessierst du dich für die Entwicklung von Scratch-Extensions, dann schau unter http://wiki.scratch.mit.edu/wiki/Scratch_Extensions#Javascript_Extensions und https://github.com/LLK/scratchx/wiki. Die offizielle Github-Page von Scratch4TUIO mit einer Installationsbeschreibung findest du unter https://github.com/caesarion/Scratch4TuioExtension.

Beispiele

Im Folgenden werden ein paar mögliche Kombinationen von Scratch4TUIO Blöcken mit Scratch-Blöcken dargestellt:

when any tuio-object :: extension hat
set [newTuioObj v] to (id of newest tuio-object :: extension)
set [xPos v] to (attribute [position x v] of (tuio-object with id (newTuioObj) :: extension) :: extension)
set [xPos v] to (((480) * (xPos)) - (240))
set [yPos v] to (attribute [position y v] of (tuio-object with id (newTuioObj) :: extension) :: extension)
set [yPos v] to (((480) * (yPos)) - (240))
go to x: (xPos) y: (yPos)
when (tuio-object with id (newTuioObj) :: extension) updated :: extension hat
set [xPos v] to (attribute [position x v] of (tuio-object with id (newTuioObj) :: extension) :: extension)
set [xPos v] to (((480) * (xPos)) - (240))
set [yPos v] to (attribute [position y v] of (tuio-object with id (newTuioObj) :: extension) :: extension)
set [yPos v] to (((480) * (yPos)) - (240))
go to x: (xPos) y: (yPos)
when any tuio-object added :: extension hat
set [newTuioObj v] to (id of newest tuio-object :: extension)
forever
	set [xPos v] to (attribute [position x v] of (tuio-object with id (newTuioObj) :: extension) :: extension)
	set [xPos v] to (((480) * (xPos)) - (240))
	set [yPos v] to (attribute [position y v] of (tuio-object with id (newTuioObj) :: extension) :: extension)
	set [yPos v] to (((480) * (yPos)) - (240))
	go to x: (xPos) y: (yPos)
end