Kopfmensch | Ein Großteil der wichtigsten Sensoren befinden sich beim Menschen am bzw. im Kopf. Diese Sensoren sind in vielerlei Hinsicht Bedingung der äußerst differenzierten Interaktion mit der Welt, zu der Menschen in der Lage sind. Darüber hinaus ist der Kopf ein eminent wichtiges Organ der Kommunikation. Nicht nur, dass hier die Systeme lokalisiert sind, die mit verbaler Kommunikation zu tun haben, mittels des Kopfes findet natürlich auch ein sehr wichtiger Anteil der nichtsprachlichen Kommunikation über Mimik und Gestik statt. Für einen humanoiden Roboter, der sich komplexem menschlichen Verhalten immerhin annähern soll, ist also ein Kopf in zumindest rudimentärer Form unerlässlich.
Konstruktion | Der Sensor-Head besitzt zwei Bewegungsfreiheitsgrade. Das ist weniger als bei einem menschlichen Kopf vorhanden sind, bietet aber genug Bewegungsfreiheit, um die Sensorik gezielt zu orientieren. Die eigentlichen Drehachsen werden von igus Rundtischlagern gebildet. Diese werden über eine einstufige Untersetzung von XL-Servos angetrieben. Die Verwednung solcher "Spielzeugmotoren" hat einige Nachteile (Stellbereich, Genauigkeit, Geräuschentwicklung), aber auch wesentliche Vorteile. Insgesamt wird der Aufbau damit recht simpel, weil die Servos sich selber um die Positionsregelung kümmern. Die Elektronik braucht über das entsprechende Steuersignal also nur die Sollposition vorgeben, der Servomotor sorgt im Rahmen seiner Möglichkeiten dann dafür, dass die Position angefahren und unter Last gehalten wird. In beiden Achsen ist eine Bewegung von etwa ±45° möglich, die sich aus dem 2:1 untersetzten 180° Stellbereich der (gehackten) Servos ergeben. Die Kippachse, die in einer Richtung naturgemäß gegen die Gravitation arbeitet (zumindest solange der Roboter aufrecht steht), wird von einer Zugfeder unterstützt.
Elektronik | Die Steuerungsaufgaben für den Sensor-Head sind nicht übermäßig anspruchsvoll, sodass ein 8 Bit AVR Mikrocontroller leistungsstark genug dafür ist. Konkret wurde ein AVR mega644 verwendet, der mit 20 MHz getaktet ist. Der mega644 bietet mit 64 kB verhältnismäßig viel Flash, sodass bei Bedarf z. B. einiges an Bildern für das LCD mit in den Programmcode eingebunden werden kann. Das LCD ist ein 128 x 64 monochrom Typ mit einem KS108 Controller. Die beiden Servo-Motoren des Kopfes werden mittels der PWM-Hardware im AVR angesteuert. Um dem Sensor-Head Sprachfähigkeit zu verleihen, befindet sich ein 1 W NF-Verstärker auf der Platine. Dieser basiert auf einem LM4906 von National Semiconductor, der bequemerweise fast keine externe Beschaltung benötigt. Das Audiosignal kommt vom Steuerrechner, die Sprachsynthese findet natürlich dort statt. Das Audiosignal liegt parallel auch an einem ADC-Eingang des µC an. Das digitalisierte Signal wird verwendet, um die Animation der Mundbewegung zu steuern. Hinter dem LCD befindet sich ein Breitbandlautsprecher über den das verstärkte Audiosignal ausgegeben wird. Als Gleichgewichtssinn verfügt der Kopf über den 3-Achs-Beschleunigungssensor BMA020 von Bosch Sensortec. Der Einfachheit halber verwende ich das entsprechende Modul von ELV. Der Sensor kommuniziert per I²C mit dem µC. Der Sensor-Head ist per USB an den Steuerungscomputer angebunden, die Verbindung zum UART des µC wird über einen FT232R hergestellt, den ich gerne für diese Zwecke verwende, weil er sehr pflegeleicht ist. Die Kommunikation findet (vorerst) über einen schlichten virtuellen COM-Port statt. Die Elektronik wurde auf einer Platine untergebracht, die sich hinter dem LCD befindet.
3D Vision und Spracherkennung | Der Sensor-Head verfügt über insgesamt drei Kamerasysteme. Davon ist Microsofts Kinect sicherlich das potenteste. Die Kinect verfügt neben einer 2D RGB Kamera über einen 3D Sensor. Dessen Funktionsprinzip basiert darauf, dass ein Infrarot Punktmuster in den Raum projiziert wird und aus dessen verzerrter Abblindung auf den Objekten auf räumliche Tiefe in der visuellen Szenerie geschlossen werden kann. Toll ist, dass die Kinect all die komplizierten zugrundeliegenden Berechnung online bei bis zu 30 FPS ausführt, sodass man als Anwender ganz sorglos nur noch den 3D-Stream entgegen nehmen muss und damit dann hantieren kann. Damit aber noch nicht genug, die Kinect bietet außerdem ein Skeletal-Tracking, das es erlaubt, die dreidimensionale Position von 20 Gelenken eines Menschen zu erkennen. Darüber hinaus steht eine sehr ausgeklügelte Audiodetektionstechnologie zur Verfügung, mit der man relativ gut die räumliche Position von Audioquellen bestimmen kann, vor allem aber ist auf dieser Grundlage eine Erkennung von natürlicher Sprache (aktuell Englisch, Französisch, Spanisch, Italienisch und Japanisch) möglich. Damit ist die Kinect ein wirklich großartiger und sehr universeller Sensor für die Robotik, der vieles sehr einfach macht, was zuvor nur mit großem technischen (und intellektuellen) Aufwand möglich war. Neben der Kinect sind noch zwei Logitech QuickCam 9000 Pro Kameras im Sensor-Head verbaut, die für "konventionelle" Stereovision verwendet werden können. Die Logitech Kameras bieten außerdem jeweils noch ein Mikrophon.
Um mal zu demonstrieren, wie man das Skeleton Tracking der Kinect auf sehr einfache Weise für ein relativ komplexes Roboterverhalten verwenden kann, habe ich ein kleines C# Programm geschrieben, dass die Kopfposition eines Menschen im Sichtfeld der Kinect ermittelt und mit dieser Information die Kopfstellung des Roboters so nachregelt, dass der detektierte menschliche Kopf immer mehr oder weniger zentral im Sichtfeld des Roboters bleibt. Das folgende Video zeigt das Ergebnis dieses kleinen Experimentes.
Sprachausgabe | Sprachsynthese lässt sich mittlerweile einigermaßen gut auf einem normalen PC realisieren. Ich verwende Microsofts Speech Synthesis Engine über die man im .NET Framework mit ein paar Zeilen Code eine ganz passable Sprachausgabe realisieren kann. Das Ausiosignal vom PC wird mittels der Elektronik im Sensor-Head verstärkt und über einen kleinen Lautsprecher im Kopf ausgegeben. Das Signal wird parallel von dem µC im Kopf digitalisiert um eine kleine Animation auf dem LCD synchron zur Sprache anzuzeigen. Das Ganze ist erstmal natürlich eher eine Spielerei. Für die Mensch-Maschine Interaktion machen solche Dinge ja aber durchaus in gewissem Maße Sinn. Folgend ein Video von der Sprachausgabe, nur irgendein Blahblah um die Funktion zu demonstrieren.
Hinter diesen Thumbnails gibt es detailliertere Infos zu den anderen Teilprojekten:
Excellent work, I have a small question, what was the controller/processor used to process the images from the kinect and feed the data to the joints ?
Excellent web site you've got here.. It's difficult to find good quality writing like yours these days. I seriously appreciate individuals like you! Take care!!
Sorry für die verzögerte Antwort, lese meinen eigenen Blog nicht so regelmäßig ;-). Vielen Dank für die Erwähnung meines Projektes in eurem/deinem Podcast! Habe dir auch auf robotiklabor.de einen Kommentar hinterlassen. Ja, ist alles privat, steckt viel Geld und gigantische Mengen Zeit drin. Aber ich werde von igus mit verschiedenen Mustern aus deren Produktpalette unterstützt, allem voran natürlich mit den robolink Gelenken.
Kommentare
I have a small question, what was the controller/processor used to process the images from the kinect and feed the data to the joints ?
Thank you,
to find good quality writing like yours these days. I seriously appreciate individuals like you!
Take care!!
Sorry für die verzögerte Antwort, lese meinen eigenen Blog nicht so regelmäßig ;-). Vielen Dank für die Erwähnung meines Projektes in eurem/deinem Podcast! Habe dir auch auf robotiklabor.de einen Kommentar hinterlassen. Ja, ist alles privat, steckt viel Geld und gigantische Mengen Zeit drin. Aber ich werde von igus mit verschiedenen Mustern aus deren Produktpalette unterstützt, allem voran natürlich mit den robolink Gelenken.
Gruß,
Markus vom Podcast http://www.robotiklabor.de
Alle Kommentare dieses Beitrages als RSS-Feed.