Projektbeschreibung
Super-Yano ist ein interaktiver Roboter, welchen ich als Abschlussprojekt meiner Ausbildung zum Informationstechniker 2006/2007 gebaut habe und mit welchem ich den Preis für die beste Techniker-Abschlussarbeit 2007 gewann.Zweck
Zweck des Roboters ist es, Kindern von 3 bis 8 Jahren Märchen zu erzählen.Auf den Verlauf der Geschichten können die Kinder dabei interaktiv einwirken.
Der Roboter kommuniziert mit Sprachausgabe und Spracheingabe, hält mit Kameras Blickkontakt zu seinen Zuhörern und simuliert menschliche, bzw. tierische Verhaltensweisen.
Ausgangsbasis
Als mechanische Basis habe ich den Kopf einer elektronischen Spielzeugpuppe "Yano" verwendet, umgebaut und erweitert.Die Idee zu diesem Projekt kam mir, als ich Anfang August 2006 zufällig auf das "Robotic F.A.C.E."-Projekt, ein Projekt des MIT Media Lab, gestoßen bin. Hier wurde der Kopf einer solchen Yano-Spielzeugpuppe modifiziert um die Gesichtsmimik von einem PC aus zu steuern.
Angeregt durch das Robotik F.A.C.E. war meine Idee nun, ebenfalls auf Basis der Yano-Spielzeugpuppe, einen interaktiven Roboter zu bauen und zu programmieren.
Ich hatte allerdings nicht vor ein KI-System zu schaffen, sondern vielmehr zunächst die Funktionalität der Yano-Puppe als Geschichtenerzähler beizuhalten und zu erweitern, sowie eine Plattform für mögliche weiterführende Projekte in diesem Bereich der Robotik aufzubauen.
Außerdem wollte ich die Mechanik im Kopf der Yano-Puppe durch ein eigenes System ersetzen, da das Robotic F.A.C.E zeigte, dass die originale Mechanik unzulänglich ist, um ausdruckstarke Mimiken darzustellen.
Das Projekt begann somit mit dem Erwerb einer gebrauchten Yano-Spielzeugpuppe und dem "Ausschlachten" selbiger.
Von Interesse war nur der Kopf - auch die Elektronik und Mechanik aus dem Rumpf wurden nicht mehr gebraucht, da ohnehin eine eigene Ansteuerung der Gesichtsmimik vorgesehen war.
Von der Yano-Puppe wurde somit nur die "Hülle" des Kopfes verwendet.
In den so frei gewordenen Raum im Kopf montierte ich 11 Servomotoren, wie man sie aus dem Modellbau kennt.
Kamerasystem
Um dem Roboter das Sehen zu ermöglichen, baute ich ihm zwei drehbare Kameramodule als Augen.
Die Kameramodule wurden, drehbar gelagert, auf Zahnräder montiert.
Je ein Servo ist für die Drehbewegung zuständig, was es dem Roboter erlaubt mit den Augen in unterschiedliche Richtungen zu blicken.
Hier ein Video dazu:
Servos
Um die Servos anzusteuern, verwendete ich eine Parallax Servocontrollerkarte, welche bis zu 16 Servos unabhängig mit unterschiedlichen Geschwindigkeiten ansteuern kann.Auf PC-Seite erscheint die Karte als normaler serieller COM-Port.
Über ASCII-Befehle auf diese Schnittstelle erfolgt dann die Ansteuerung der Servos. Auf der Karte befindet sich weiterhin eine Steckerleiste, an der das serielle Signal abgegriffen werden kann.
Dies dient dem Zweck die Steuerbefehle an eine zweite Servocontrollerkarte weiterzuleiten um somit bis zu 32 Servos anzusteuern.
Mehr als eine Karte war bei diesem Projekt zwar nicht nötig, aber der offene Zugang zum seriellen Signal erwies sich dennoch als sehr dienlich, da es somit einfach einem Mikrocontroller (ATmega8) zugeführt werden konnte.
Dieser schaltet über ein Relais zwischen den beiden Kameras um (denn ich hatte nur die finanziellen Mittel für einen Videograbber) und steuert ein 4x27-Zeichen Display an, welches dazu dient, Texte die der Roboter vorliest, mitlesen zu können.
Als preiswerte und leistungsstarke Energiequelle für die Elektronik dient ein gewöhnliches AT-Computernetzteil.
Und schließlich wurde alles in ein Gehäuse montiert.
Soweit die Hardware.
Software
Die Software entwickelte ich (abgesehen vom Mikrocontrollerprogramm) mit Visual Studio 2005 in Visual C++.Sie lässt sich in fünf Bereiche gliedern:
- GUI & Hauptprogramm
- Roboteransteuerung
- Gesichtserkennung
- Sprachausgabe
- Spracherkennung
Die Roboteransteuerung findet sich in einer Klasse RobotControl wieder. Sie ist der wohl wichtigste Part, denn sie kontrolliert nicht nur alle Funktionen des Roboterkopfes, sondern sorgt z.B. für synchrone Mundbewegungen während Sprachausgabe und dafür, dass der Roboter Blickkontakt hält, steuert das Blinzeln der Augen und das Wackeln der Ohren.
Ok, mag vielleicht albern erscheinen, dass ein Roboter mit den Ohren wackelt - ich finde jedoch, dass gerade solch kleine "Gimmicks" den Roboter menschlicher erscheinen lassen und somit seine Akzeptanz bei seinen Zuhörern steigern.
Die Gesichtserkennung realisierte ich mit einer Bildverarbeitungsbibliothek von Intel, der OpenCV.
Diese kommt mit zahlreichen Funktionen und Filtern (Konturenerkennung, Farbfilter, etc.) - u.a. auch mit einer bereits trainierten Gesichtserkennung.
Um sie zu integrieren musste ich allerdings einen Umweg über eine Wrapper-DLL gehen, da mein Projekt in managed C++ geschrieben ist und die OpenCV-Files in standard unmanaged C++ vorliegen.
Auch zur Sprachausgabe verwendete ich eine Bibliothek - hier ist es die Speech API von Microsoft, die zum Einsatz kam.
Ihr Vorteil ist, dass sie durch zahlreiche Stimmen (auch von Drittanbietern) erweiterbar ist.
Prinzipiell ließe sich auch Spracherkennung mit der Speech API realisieren, leider zu diesem Zeitpunkt nur auf Englisch und Japanisch.
So musste ich mich nach Alternativen umsehen und fand die Diktiersoftware Naturally Speaking von DragonSoft.
Die Integration geschah sozusagen "durch die Hintertür", denn bei der Installation von Naturally Speaking werden auch ActiveX-Komponenten in das System integriert, die ich sodann in mein Visual Studio Projekt eingebunden hatte. Durch Herumexperimentieren und Artikel in einem Forum gelang es mir schließlich die Komponenten anzusteuern und für meine Zwecke zu nutzen.
Das Hauptprogramm schließlich dient als zentrale Steuereinheit für alle Prozesse und Bereiche und enthält weiterhin auch eine grafische Oberfläche um Einstellungen vorzunehmen und Geschichten aus Dateien zum Vorlesen zu laden.
Insgesamt ist es ein sehr komplexes und umfangreiches Projekt geworden.
Und wenngleich ich selbst eine eher nüchternere Sichtweise darauf habe, so findet Super-Yano bei Betrachtern doch immer wieder eine unglaubliche Begeisterung und hinterlässt nachhaltig Eindruck.
Zum Abschluss sei nun noch mal auf die Bildergalerie und die Demovideos verwiesen.