Spezifikationen
Ein paar neue Gedanken zu den Fernfühlern und der Versuch, mal ein paar „Spezifikationen“ fest zu legen.
Also, es sollen ja 5 Fernfühler werden. Das sind eigentlich zu wenige, dass jeder ein einzelnes Neuron eines Netzes darstellt. Andererseits wäre das wiederum auch sehr spannend, es trotzdem zu realisieren. Insofern wäre jeder Fernfühler in gewisser Weise ein Neuron oder eigentlich die Repräsentation des 2D-Vektors eines Gewichts in einer SOM. Weiterhin sollen die Fernfühler ja auf Geräusche reagieren. Wenn man hier ein Protokoll integriert, dass die Fernfühler sich sozusagen austauschen können, dann könnte man das neuronale Netz direkt mit den Fernfühlern implementieren.
Folgende Schritte müssten dabei ablaufen:
- Die Fernfühler hören ein bestimmtes Geräusch, das sie anzieht.
- Die Fernfühler tauschen sich über Geräusche darüber aus, welcher der nächste Fernfühler ist (sozusagen das Gewinnerneuron).
- Mit den üblichen Lernregeln lernt dann jeder Fernfühler abhängig vom Abstand zum Gewinner und vom Abstand zur Geräuschquelle sein eigenes Gewicht neu.
Dies bedeutet natürlich, dass da auch eine gewisse Synchronisation statt finden muss. Es wird also schon ein Protokoll benötigt, das man in die Geräusche, die die Fernfühler machen, einbaut. Dieses sollte zumindest beinhalten, in welchem Zustand / welchem Schritt sich der jeweilige Fernfühler gerade befindet und welche ID der Fernfühler hat.
Auf diese Art und Weise ist keine zentrale Instanz, also z.B. ein Server oder ähnliches mehr notwendig. Die Fernfühler selbst bilden das neuronale Netz. Weiterhin kann jeder Fernfühler ein Bluetooth-Modul enthalten. Dadurch können sich Besucher der Ausstellung mit einem der Fernfühler verbinden und sozusagen dessen Sicht auf das Netz sehen. Das ist evtl. auch deshalb spannend, da ja aufgrund der Ungenauigkeiten des Trackings mit Geräuschen und auch evtl. Fehlern bei der Übertragung die Sicht eines Fernfühlers unterschiedlich sein kann zu den Sichten der anderen Fernfühler. Sicht bedeutet dabei für mich, dass jeder Fernfühler eine komplette Repräsentation des Netzes enthält, die aber nur seine Sicht auf die Welt, so wie er sie wahrnimmt, darstellt.
von neuem
jetzt hat Rico den Fernfühler übernommen. Auf dass die beiden Teile endlich einmal sich bewegen.
neue Entwürfe, neue Absichten
nachdem erst einmal die beiden Fernfühler soweit fertig sind und definitiv mehr Kunstwerk als Sitzgelegenheit, versuche ich mich nochmals in der Planung von Möbeln. Die Symmetrie der Beine sollte nicht exact sein. verstellbar quasi. Anbei ein erster Entwurf. Die Motoren sind jeweils an zwei Beinen angebracht. Schön an dieser Variante ist, dass man die Geometrie der Fernfühler fortsetzen kann in einem Fußbodenmuster/einer Markierung. Die Farbe von Kremer ist gekommen, die Tests können beginnen.
Bluetooth-Gedoens
So, nachdem ich mich mit Bluetooth auf Java rumgeaergert habe, will ich hier mal meine Ergebnisse dazu schreiben.
Das Szenario sieht folgendermassen aus: Ein normaler Desktop-Computer mit Java SE 1.6.0u10 dient als Server, als Betriebssystem kommt Windows XP SP3 oder Linux (OpenSUSE 11.0) zum Einsatz. Dieser soll die SOM enthalten und alle per Bluetooth angeschlossenen Benutzer des Systems koordinieren. Fuer die Benutzer des Systems soll ein auf Java ME basierendes Programm auf Handys laufen. Dazu wird das Sun WTK 2.5.2 verwendet. Das Java ME Programm enthaelt eine Visualisierung der SOM und eine Moeglichkeit mit der SOM zu interagieren.
Folgender Sourcecode wird im Wesentlichen auf dem Server ausgefuehrt:
- LocalDevice localDevice = LocalDevice.getLocalDevice();
- localDevice.setDiscoverable(DiscoveryAgent.GIAC);
- StreamConnectionNotifier scnot =
- (StreamConnectionNotifier) Connector.open
- („btspp://localhost:50b813d0;authenticate=false;encrypt=false;name=netact“);
- System.out.println(„Waiting for connection …“);
- StreamConnection scon = scnot.acceptAndOpen();
- System.out.println(„Got connection“);
- InputStream is = scon.openInputStream();
- OutputStream os = scon.openOutputStream();
Auf dem Client, also dem Handy laeuft nun Code, um alle Devices und deren Services aufzuspueren. Der Server-Rechner wird dabei auch gefunden und auch alle vom System installierten Services, allerdings nicht der eigene, neue Service. Dadurch kann ich auch nicht zum Server connecten, denn ich habe keine weiteren Informationen ueber den selbst kreierten Service. Die obige URL enthaelt die UID des Services, ueber den man auch explizit auf dem Client nach dem Service suchen kann, leider wird dieser aber nicht gefunden. Es hilft auch nichts, authenticate oder encrypt auf true zu setzen. Im Gegenteil, das verwendete Bluecove als Bluetooth-Implementierung fuer Java SE kann das sogar gar nicht.
Letztlich habe ich keine Loesung gefunden. Was hilft, ist den Server in C/C++ zu schreiben (derzeit fuer Linux). Dort wird dann keine UID, sondern direkt ein sogenannter Channel (eine Art Port, wenn man es mit z.B. TCP/IP vergleicht) angegeben. Der gleiche Port wird dann auch im Java-Programm auf dem Handy verwendet. Dadurch muss man nur noch nach dem Device suchen, das den Server darstellt, was auch einwandfrei funktioniert. Danach kann man direkt zu dem Channel auf dem Device connecten und es scheint alles wunderbar zu funktionieren.
Plan
Gerade waren Daniel und Hannes da. Pläne gemacht, wie es weitergeht:
Also:
- Die beiden Motoren fahren wieder. Allerdings mit Arduino statt mit den BTKit. Das ist ja sinnvoll, da wir das BTKit nicht mehr haben und es auch nicht mehr aktuell ist.
- Die Motoren reagieren unterschiedlich. D.h. man muss eine Methode hinzuziehen, das Drehmoment zu messen, um den Gleichlauf/Fahrtrichtung zu kontrollieren. Deshalb dachten wir, neue Motoren zu suchen, die diese Kontrolle direkt dabei haben. Dann planen wir gleich für Fernfühler der nächsten Generation, die dann ca. 45cm Sitzhöhe haben und eben andere Motoren (die Akkuschraubermotoren passen nicht in kleinere Hüllen).
- Wir überlegen, die Navigation ausschliesslich auf der Basis von Sound zu machen: Die Fernfühler verständigen sich untereinander mit kodierten Tönen über ihre Umgebung (wo stösst man an, wo ist freie Fahrt). Ggf. könnte man eine Ortung auf der Basis von Ultraschall hinzuziehen. Generell ist aber angedacht, nur eine relative Ortung zu realisieren, keine absolute.
- Später kann man schauen, ob man eine Erkennung von Stimmgeräuschen hinzuziehen kann. Dafür bräuchte man sicher einen stärkeren Chip, sofern man die Filterung lokal macht und nicht auf einem zentralen Rechner. Beispielsweisse so was:http://www.parallax.com/Default.aspx?tabid=407
Ob der passt, weiss ich nicht, aber stärker als der Atmel ist der bestimmt. - Lichtsensoren für Lehnen ausgezogen oder in Ruhestellung
- Abstandssensoren (kleine Reichweite, ca. 40 cm)
- LED’s werden angesteuert als Anzeige des Anregungszustands (des Neurons)
- Microphone müssen wahrscheinlich per Fernfühler vier Stück eingesetzt werden, damit man aus den unterschiedlichen Geräuschen die Ortung bekommt. Wir dachten an ein Kreuz aus einem Rohr, das auf halber Höhe der Fernfühler montiert wird.
- Ich habe nochmal die Fuktionsweise der alten SOM erklärt
- http://ursuladamm.de/projects/inter_zeit_de.html#visu
die neue wird aber anders werden, wir hatten ja angedacht, pro Neuron einen Fernfühler zu haben, das kann alleine aus Kostengründen nicht realisiert werden. Wir müssen uns überlegen, wie wir damit umgehen, dass wir zwei Eingabequellen haben und nicht mehr.
es geht weiter…
Im letzten Sommer begann der Umzug nach Berlin, jetzt endlich ist alles an seinem Ort. Zwei Fernfühler sind fertig. Einer in Berlin, einer in Weimar. In Weimar bastelt nun Daniel an der Motorsteuerung, Matthias in Bonn an der SOM.
Ursula
in München
beim 40jährigen Jubiläum der Informatik sollte der Fernfühler nun sich bewegen und seine Zustände bunt anzeigen. Die LED’s sind eingebaut und der Fernfühler sollte ansteuerbar sein – über ein Gamepad und auch über ein Max/MSP Interface. Nach dem 26.10 kommt er zurück nach Düsseldorf, ich bin sehr gespannt darauf.
setting
ob das jemals so aussehen wird??? Sicher nicht. Etwas lebendiger kann es schon werden. Aber man tut sein bestes mit Hilfe der Bildbearbeitung. Und Tobias ist am Löten. Herr Weidinger hat mit viel Liebe den letzten Prototypen perfekt gemacht: Der Auszug ist 100%, er geht auf die optimale Höhe, so dass Sitz und untere Leiste parallel sind und eine Fläche bilden und die Plastik-„Schürzen“ sind nun nicht mehr gewölbt. Und um die Lehnen oben zu halten, hat er einen netten Schnappschalter gebaut.
neuer Prototyp
Der zweite Fernfühler ist fertig. Vielmehr die zweite Hülle. Herr Weidinger wird noch zu basteln haben. aber im grossen und ganzen ist er so o.k. In der Besprechnung in Karlsruhe haben wir festgestellt, dass erst einmal kleine Schritte von Nöten sind.
Für den Sitzzustand ist bereits eine Lichtschranke angebracht.
Bisher kann man den Motor via Bluetooth über Handy ansteuern (der Chip hat einen Kanal). Von Seiten von Beecon soll noch eine Kollisionsdetektion erfolgen bzw. die Anbringung von Ultraschall-detektoren an vier Seiten des Fernfühlers.
- Auf die Plattform des Fernfühlers will ich noch eine LED-Matrix (4×4 rgb)setzen. Die sollte die Zustände anzeigen:
Eine Person sitzt drauf = rot
Fernfühler tut nix=grün
Fernfühler ist in Bewegung= weiss
Fernfühler sieht Kollision voraus: gelb - ein Programm muss geschrieben werden in Java, das die LED’s ansteuert in Verbindung mit den Inputs (Kollisionsdetektion, Sitzposition)
Wir waren am Überlegen, ob wir den Fernfühler vom Handy oder von einem PC aus ansteuern, weil man aufgrund der noch dürftigen Interaktion mittels einen Bildschirms mehr von den zukünftigen features darstellen können.