Zur Startseite

Spracherkennung im Roboter RP6

Anwendung des Modules Elechouse VR V3.1

Nachdem mein RP6 mit Hilfe des SpeakJet das Sprechen gelernt hatte, soll er nun auch Hören können. Wie so oft, ist das einfacher beschlossen als realisiert. Beim Googeln nach erschwinglichen Voice-Recognition Lösungen stellt sich schnell Ernüchterung ein. Bei ebay habe ich dann schließlich das Modul VR V3.1 von Elechouse entdeckt. Der Verkäufer sitzt (natürlich) in Fernost und war ehrlich genug, die Lieferzeit mit 4-8 Wochen anzugeben. Zu meiner großen Überraschung kam die Lieferung schon nach knapp 3 Wochen an.

Das ist der komplette Lieferumfang, den man mit ca. 25,- € bei kostenloser Lieferung bezahlt. Hier der Link zum Manual, in dem auch die Links zur nötigen Software enthalten sind. Die mitgelieferten Steckverbinder reichen für die serielle Schnittstelle und die 7 Ausgänge. Für die serielle Datenübertragung liegt ein kurzes Kabel bei. Den nötigen USB-Adapter muß man ggf. extra beschaffen.

Das Modul kann 80 Sprachbefehle, jeder bis zu 1,5 s lang "lernen". Diese angelernten Befehle werden direkt im Modul abgespeichert. Leider kann die Software aber nur jeweils 7 Befehle gleichzeitig verarbeiten. Es müssen also vor Beginn der Anwendung die 7 aktuellen Befehle aus dem Speicher in den Recognizer "geladen" werden. Das Ergebnis wird seriell und zusätzlich über 7 Ausgangspins als Pegeländerung ausgegeben. Für die Pegelform an den 7 Ausgangspins gibt es verschiedene Möglichkeiten. Die Standardeinstellung ist ein negativer Impuls von 10 ms Länge.

Die Programmierung des Moduls hat mir anfangs einige Schwierigkeiten gemacht, ist aber am Ende einfacher als es scheint. Das Manual ist englisch und dazu offensichtlich von einem Chinesen geschrieben, was das Verständnis nicht immer erleichtert. Es gibt auch den einen oder anderen Druckfehler. Im Angebot auf ebay wurde das Modul als "Arduino compatibel" beschrieben. Nach meinem Verständnis bedeutet das, es funktioniert AUCH mit Arduino aber eben nicht nur! Arduino ist eigentlich (bisher) nicht meine Plattform.
Schnell wurde klar, daß man zumindest zum Setup des Moduls einen Arduino verwenden soll! Ein Uno wird empfohlen. Zum Glück hatte ich aus einem Franzis Lernpaket zufällig einen Arduino-Clone rumliegen. Also musste ich nun doch eine Arduino IDE (1.6.8) installieren. Damit war die Programmierung und das Training des Moduls recht komfortabel möglich. Beim tieferen Einsteigen in die Materie wurde dann auch klar, daß alles auch durch hexadezimale Codes, direkt gesendet über ein serielles Tool möglich ist.

      

Hier oben mal ein schönes Beispiel, wie man sich selbst das Leben schwer machen kann. Im Bild links wird im Manual klar gesagt, wie Arduino und serieller Port des VR verbunden werden sollen. Der "erfahrene" Bastler denkt natürlich: "Ganz klar ein Fehler im Manual!" Schließlich sind am Arduino die Anschlüsse TX und RX auf 0 und 1, wie das Bild rechts zeigt und nicht auf 2 und 3. Also wird die Verbindungent sprechend "korrigiert". Da anfänglich noch andere Dinge nicht stimmten (BAUD Rate, Prozessortyp usw.), funktionierte sowieso erst mal GAR NICHTS! Nachdem aber Stück für Stück alle anderen Fehler raus waren, blieb am Schluß nur diese Verbindung als Fehlerquelle. Als ich die dann (widerstrebend) wie im Manual empfohlen geklemmt hatte, lief plötzlich alles. Wenn man schon mal denkt, man ist clever...

Das mitgelieferte Mikro funktioniert gut und ist mit dem kleinen Schwanenhals auch recht praktisch. Am RP6 war es mir aber etwas "mächtig". Kein Problem: Neben der Klinkenbuchse gibt es noch einen zusätzlichen Steckanschluß, den ich für eine Mikrokapsel genutzt habe, die in der Materialkiste rumlag.

Ein Wort über die beiden LEDs am Modul: Die äussere gelbe leuchtet ständig beim Einschalten und in Ruhe. Sie blinkt hektisch, wenn der Recognizer aktiv ist also praktisch "lauscht". Die innere rote LED leuchtet nur beim Training der Kommandos solange gesprochen werden soll (1,5 s).

Hier nun der Versuchsaufbau zur Programmierung und zum Training des Moduls. Bis das lief, sind einige Abende vergangen. Ich habe die empfohlenden Arduino Programme (vor allem "vr_sample_train.ino") verwendet.

Damit war die Programmierung recht einfach. Hier oben das Ergebnis des Trainings. Ich habe vorerst nur 7 Befehle trainiert. Ein Beispiel: Mit dem Befehl "sigtrain 1 Stop" wird das zweite Kommando aufgenommen und ihm die Signatur "Stop" zugewiesen. Sinnigerweise sollte die Signatur dem gesprochenen Wort entsprechen!
Ich empfehle, Worte zu verwenden, die sich möglichst deutlich unterscheiden. Ein Versuch mit "Light On" und "Light Off" schlug fehl. Der Unterschied war zu gering!
Ein Problem daß ich zuerst nicht lösen konnte war, daß nach dem Kaltstart des Moduls, also nach Einschalten der Betriebsspannung, die Spracherkennung nicht sofort lief! Es musste immer erst wieder über das Arduino-Programm die Laderoutine für die aktuellen Befehle ausgeführt werden. Sicher ließe sich das später durch den Prozessor des RP6 machen, so wollte ich das aber erst mal nicht! Das Modul sollte "stand-alone" arbeiten. Die Lösung habe ich im Manual bei den Befehlen gefunden, die hexadezimal über ein serielles Tool ("AccessPort" empfohlen) direkt in das Modul gehen. Dort gibt es den Befehl "15 - Set Power On Auto Load". Mit diesem Befehl kann man festlegen ob, und wenn ja wie viele (1-7) Kommandos beim "Power On" automatisch in den Recognizer geladen werden sollen. Wenn man das tut, ist der VR sofort nach dem Einschalten der Spannung im Lauschmodus (gelbe LED blinkt)!

Hier ein Print vom Logic Analyzer, der die Impulse auf den Ausgängen des Moduls zeigt, wenn ein Kommando erkannt wird.

 

nach oben