PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Robotersteuerung mit Sprachanweisungen



mausi_mick
06.05.2020, 20:20
Habe mich in letzter Zeit mit Voice Recognition beschäftigt und überlegt, ob man damit einen kleinen Roboter steuern kann.
Er sollte nur wenige Befehle abarbeiten wie vor, zurück, links, rechts und auch ein paar Zahlen für Distanzen und Winkel.
Alexa wollte ich dabei meiden/schonen.
Vor Jahrzehnten hat es auf dem Sinclair ZX81 ? sowas gegeben, in Z80 Assembler, da der Programmspeicher sehr klein (1KB ?) war.
Auch war die Hardware lausig (Lautsprecher als Mikrophon, Programm-Sicherung auf Sinclair-Floppy).
Das Ergebnis war auch eher bescheiden ...

Müsste heute eigentlich besser gehen, auch wenn man nicht auf Alexa hört oder umgekehrt.

Hatte noch ein Voice-Recognition Module V3 von Elechouse rumliegen, vor ein paar Jahren besorgt.
Es gibt auch noch Software für Arduino (UNO/Nano) incl. lib. im Netz.

Ich konnte das Module leider nicht vom ESp32 oder STM32-MapleMini direkt ansteuern, dadurch ist der Aufbau etwas komplizierter geworden:

- Verbindung Voice-Module mit Arduino Nano über SoftSerial (RX,TX)
- Verbindung Nano mit ESP32-Sendmodule mit Serial2
- Verbindung ESP32 Sender zum ESP32 Empfänger mit "ESP32-Now" Protokoll oder was immer das ist.
- Verbindung ESP32 zum Maple-Mini , der den Roboter (u.a 2 Schrittmotoren an A4988 und einen Servo) ansteuert über Serial3

Die ESP32-NOW schafft wohl Distanzen von mehr als 100 m (im Freifeld).
Problematisch war die Programmierung des Moduls:

Man kann wohl maximal 80 Sprachbefehle "eingeben" (ich vermute noch mehr, der Speicher ist wohl auf 255/256 begrenzt), aber leider sind nur sieben gleichzeitig verfügbar.
Ich benutze zur Zeit drei Böcke mit je 7 Befehlen oder anderen Steuerungswerten:

Im 1. hab ich Kommandos hinterlegt: Go/Forward, Backword, Left, Right, Start und Stop .
Im 2. Distanzen , die der Roboter geradeaus fahren soll: 10mm, 20mm,50mm,100mm,200mm,500mm und 1000mm
Im 3. Winkel, um die sich der Roboter um seine Achse drehen soll: 2°, 6°,15°,30°,45°,60° und 90°

Die Erkennungsrate ist meist gut, aber bei für ihn wohl ähnlich klingenden Worten wie fünf / fünfzig etc. hat er seine Probleme.

Ich überlege, ob ich die Zahlen in englisch "eingebe", da klingt zumindest five und fifty anders , wobei er wohlbei fifteen auch ins grübeln kommt, aber das verwende ich ja nur bei Winkeln.

...

Moppi
07.05.2020, 08:24
Hallo,

wenigsten einmal interessant, etwas über die Erfahrung mit solchen Modulen zu lesen.
Aber es gibt noch andere Module, habe letztens was bei Heise dazu gelesen, weiß nicht, ob Du die kennst.

https://www.mouser.de/new/sparkfun/sparkfun-easyvr-3-plus-shield/
https://johannadaher.com/2017/09/22/sprachsteuerung-so-programmierst-du-das-easyvr-3-0-shield-mit-einem-arduino-uno/

Ob das Modul dann beim "Verstehen" besser ist??

Ansonsten ist eine Robotersteuerung mühselig, wenn dann stark ähnliche Kommandos verwechselt werden.
Eher ärgerlich, denke ich, als brauchbar.


MfG

mausi_mick
07.05.2020, 11:28
Hallo,

die kannte ich noch nicht, sind aber wohl relativ teuer und schwierig zu beschaffen (Mouser etc.).
Bisher hatte ich nur Erfahrung mit dem Grove Speech Recognizer, der aber nur wenige feste Kommandos hat.
Ich glaub mein Grove-Board war/ist aber defekt. In der vorletzten Make (heise) wurden auch einige vorgestellt.

Ich werde wohl noch die Winkel- und Distanz-Angaben auf englisch umsetezen/umsprechen, da hab ich vermutlich eine bessere Trefferquote.
Ich sollte auch vielleicht ein anders Mikrophon testen.

MfG

Moppi
07.05.2020, 12:35
Weiß ja nicht, was das für ein Mikrofoneingang ist. Man kann, bei einem nicht genutzten dynamischen Kopfhörer, die Tonerzeuger auszubauen, Kabel dran löten und als Mikro verwenden. Die Breitband-Kalottenmembrane wird von einer Spule angetrieben und das funktioniert auch in die andere Richtung, als Mikro. Auch einen größeren Lautsprecher (für mittlere Frequenzen) kann man anschließen, Du hast das oben schon erwähnt. Falls Du meinst, das Mikro wäre von der Qualität zu schlecht.


MfG

mausi_mick
07.05.2020, 13:44
Ich hab keine Ahnung, ich vermute, es ist ein Elektret Mikro, werd mir die Platine mal ansehen(die Electrets gibt es ja mit 2 bzw. 3 Anschlüssen). Und auch mal die Spannung an den Mikrophon-Pins messen. Beim "Training" ist er mir meist ein ´wenig zu schnell, meist reichen zwei Besprechungen. Vielleicht ist auch die Speicherdauer (max. 1,5s) zu kurz bei "längeren" Wörtern (wie z:B. fünfzehn) , so dass intern die fünfzehn oder fünfzig wie eine fünf aussieht.

mausi_mick
08.05.2020, 09:21
Ich hab mal die Befehle auf englisch eingegeben, aber dabei schmerzlich gemerkt, dass wohl nur maximal 80 Worte speicherbar sind.

Ei Video dazu auf Youtube: https://www.youtube.com/watch?v=Sr5DwKosqZw&feature=youtu.be

Moppi
08.05.2020, 10:35
80 Worte sind aber schon viel. Weiß nicht, was heute so geht, aber wenn das Teil 80 Worte genau unterscheiden kann, nicht schlecht für so ein kleines Ding. Du wolltest jetzt aber nicht jede Zahl im Bereich von 0 bis 100 in Einzelschritten einüben (81, 82, 83, 84, ... 96,97,98,99 ...) ?

MfG

mausi_mick
08.05.2020, 11:16
das Problem ist, ich kann den Speicher wohl nur komplett freigeben und müsste dann alle Worte neu "trainieren".
Ich nutze momentan wohl nur 21 Worte, hab aber die restlichen bereits belegt. Die kann ich wohl einzeln dann überschreiben.

Beim Roboter fällt mir auf, dass die Übertragung der Befehle langsam läuft. Die Erkennung der Befehle geht meist schnell (1-2 s), aber die Übertragung und
die Aktivierung des Roboters dauert gefühlt 15 - 20 s.
Ich kann das noch etwas an der ESP32-Scnittstelle bescheunigen, indem ich nur das Command-Byte übertrage und die laufende Transfer-Nr(int) weglasse, aber sehr viel wird das nicht bringen.

MfG