Mein Roboter kann alleine mit der Stimme gesteuert werden. Dazu habe ich den Amazon Voice Services von Alexa in meinem Roboter integriert. Amazon Alexa stellt über den Amazon Voice Service eine Vielzahl an Funktionen zur Verfügung. Bekannt ist hier die ECHO oder Echo Dot die Witze erzählt oder das Licht in einem Smart-Home ein- und wieder ausschalten kann. Alexa kann natürlich noch viel mehr wie im Amazon online Shop Bestellungen ausführen oder Nachrichten vorlesen.

Diese Möglichkeiten die der Amazon Voice Service (AVS) bietet soll für die Steuerung des Raspberry Pi Roboter Autos genutzt werden. Meine Anleitung beschreibt Schritt für Schritt wie die Installation der verschiedenen Cloud-Services funktioniert. Am Ende ist es dann möglich den Roboter alleine mit der Stimme zu steuern.

Alexa sprachgesteuerter Robot

Alexa sprachgesteuerter Robot

Architektur

Bevor es jetzt losgeht habe ich ein Architekturbild gezeichnet für ein besseres und einfacheres Verständnis wie die einzelnen Web-Services zusammen spielen.

Alexa voice robot architecture

Alexa voice robot architecture

Alexa Einbindung

Es gibt mehrere Möglichkeiten Alexa in den Roboter einzubinden.

  1. Über eine Amazon Echo oder Echo Dot
  2. Einen Raspberry Pi als Amazon Echo konfigurieren
  3. Die App Reverb auf einem Smartphone installieren (Empfehlung)

Ich werde auf die beiden Möglichkeiten 2 und 3 näher eingehen wobei die App Reverb aus meiner Sicht die einfachste und am besten funktionierende Lösung ist.

AlexaPi (1 1/2 Std.)

Die Installation von AlexaPi ist trotz der sehr guten Dokumentation durch Amazon eher etwas für fortgeschrittene Anwender. Du solltest Dich gut mit Linux und dem Raspberry Pi Betriebssystem auskennen. Du benötigst einen extra Raspberry Pi für die Installation von AlexaPi. Ich empfehle nicht AlexaPi auf dem Roboter-Auto selber zu installieren auch wenn das möglich ist. Der einfache Grund hierfür ist, dass das Roboter-Auto mit dem Microphone davon fährt und Du immer hinterher laufen musst um den nächsten Befehl Alexa mitteilen zu können.

Die AlexaPi Anleitung von Amazon beschreibt wie auf dem Raspberry Pi die Alexa Funktionalität installiert wird und vorallem was bei der Konfiguration des Mikrophones und der Audio Wiedergabe zu beachten is. Hier hatte ich die längste Zeit benötigt bei der Installation von Alexa Pi. Die durch Amazon veröffentliche Anleitung findet sich aufrufbar unter der folgenden URL.

Siehe Anleitung AlexaPi: https://github.com/alexa-pi/AlexaPi

Amazon Echo Dot

Amazon Echo Dot

Pulse Audio (PA)

In der Amazon Anleitung wird empfohlen Pulse Audio für die Tonwiedergabe und Aufnahme zu konfigurieren. Ich hatte immer wieder Schwierigkeiten den Ton von Alexa ausgeben zu können sowie bei der Spracherkennung des von mir gesprochenen Textes. Daher ist es sehr zu empfehlen sich die folgende Anleitung von Amazon ganz genau durchzulsesen.

Running PA in system-wide mode (recommended): https://github.com/alexa-pi/AlexaPi/wiki/Audio-setup-&-debugging#pulseaudio

Da ich immer wieder Schwierigkeiten mit der Konfiguration hatte füge ich hier meine eigene Konfiguration im Abschnitt “sound” der “config.yaml” Datei der AlexaPi Anleitung an dieser Stelle ein. Wenn Du AlexaPi wie beschrieben in den Ordner /etc/opt/AlexaPi/ installiert hast dann kannst Du mit dem folgenden Befehl die config.yaml Datei öffnen.

Befehl: sudo nano /etc/opt/AlexaPi/config.yaml

sound:

# Name of your ALSA microphone/soundcard in arecord -L

input_device: “pulse”

output: “pulse”

output_device: “plughw:CARD=ALSA,DEV=0”

Alexa Sprachsteuerung Video

Das Video zeigt die Sprachsteuerung meines Raspberry Pi Roboters.

Reverb (20 Minuten)

Statt eine Alexa Echo auf einem Raspberry Pi mit AlexaPi nachzubauen, ist es auch möglich auf einem iPhone oder Android Telefon die App Reverb zu installieren. Diese wird dann mit dem eigenen Amazon Account verbunden. Ich habe meinen Amazon Account mit dem ich bei Amazon aktiv bin für das Amazon Developer Programm angemeldet. Dazu muss der Abschnitt 1 der Anleitung AlexaPi von Amazon durchgearbeitet werden. Denn das Roboter Auto muss als Gerät bei Amazon bekannt gemacht werden.

Anleitung Register at Amazon: https://github.com/alexa-pi/AlexaPi/wiki/Installation

Mit der App Reverb umgeht man die Schwierigkeiten die ich zu Beginn über die Verwendung von AlexaPi aufgeführt hatte. Ich sehe hier die Probleme wie, der Konfiguration des Raspberry Pi als AlexaPi oder die klassischen Schwierigkeiten mit einem USB Mikrophone und der Tonausgabe über einen Bluetooth Lautsprecher.

Reverb hat sich als sehr zuverlässig gezeit bei der Spracherkennung und Anbindung an den Amazon Voice Service bei meinen Tests der Steuerung des Roboter-Autos.

Nachfolgend die URLs zu den App-Stores von Apple und Google zu Reverb.

ReVerb – Alexa @ Android

https://play.google.com/store/apps/details?id=agency.rain.android.alexa&hl=en

ReVerb – Alexa @ iOS

https://itunes.apple.com/us/app/reverb-for-amazon-alexa/id1144695621?mt=8

Nach dem jetzt entweder AlexaPi auf einem Raspberry Pi installiert wurde oder Reverb auf einem Smartphone beschreibt die Anleitung jetzt weiter welche Schritte auf dem Raspberry Pi gemacht werden müssen damit das Roboter Auto auf die Spracheingabe reagiert.

NGROK Account anlegen (30 Minuten)

Ein Ngrok Account wird benötigt, damit der Raspberry Pi sicher über das Internet erreichbar ist. Der Raspberry Pi baut mit Ngrok einen SSH Tunnel zwischen sich und dem Webservice Ngrok auf. So ist Dein Raspberry Pi über den aufgespannten sicheren SSH Tunnel von ausen erreichbar und es erfolgt dann die Kommunikation in beide Richtungen hin und weg vom Raspberry Pi über Ngrok. So ist es möglich den Raspberry Pi oder in diesem Beispiel den Roboter über das Internet von der ganzen Welt aus über eine URL zu erreichen und Ihm die Steuerbefehle die Du Alexa gesagt hast zuzusenden.

Ngrok beschreibt unter der folgenden URL die Installation von Ihrem Serice auf einem Linux Computer wie dem Raspberry Pi mit Raspbian als Betriebssystem.

Ngrok Aneitung: https://dashboard.ngrok.com/get-started

Empfehlenswert für dieses Projekt ist ein Ngrok Basic Account (60 USD p. a.) damit man eine statische sub-domain erhält. Der freie Account weist einem jedes Mal bei Start des Tunnels am Raspberry Pi eine zufällig generierte Adresse zu unter der der Raspberry Pi bzw. das Roboter Auto dann erreichbar ist. In Kombination mit IFTTT (If this then that) ist eine random Adresse sehr ärgerlich, da die Applets jedes Mal neu auf diese Adresse eingestellt werden müssen. Das dauert ein paar Minuten und ist bei längerer Nutzung von Ngrok einfach nur nervig.

Auf dem folgenden Bild von der Benutzeroberfläche von Ngrok ist solch eine zufällig generierte URL zu sehen. Diese muss dann immer wieder aktualisiert werden bei den verschiedenen Web-Services wenn sich diese ändert.

Ngrok zufällig generierte Adresse

Ngrok zufällig generierte Adresse

Eine URL wie „my-robot“ als Aadresse wäre natürlich statisch und viel besser. Daher habe ich mir solch eine Adresse für 1 Jahr bei Ngrok gekauft.

Ngrok Installation (10 Minuten)

Die Ngrok Installation auf dem Raspberry Pi im Roboter-Auto ist unter dem folgenden Link beschrieben. Diese ist sehr einfach und besteht lediglich daraus, dass gepackte Ngrok Archiv zu entpacken.

Ngrok Installationsanleitung: https://ngrok.com/download

Die folgenden einzelnen Schritte führen Schritt für Schritt durch die Konfiguration. Bevor aber mit der Installation begonnen wird müsst Du Dir zumindest einen kostenlosen Account bei Ngrok anlegen. Denn Du benötigst den privaten “authtoken” Schlüssel für die jetzt folgende Installation von Ngrok.

Die Anleitung teilt sich in mehrer Schritte auf die nachfolgend aufgeführt sind. Zu beginn wird im home Verzeichnis des User Pi ein Ordner ngrok angelegt.

Befehl Verzeichnis anlegen: mkdir ~/ngrok

Befehl Verzeichnis wechseln: cd ~/ngrok

Befehl Ngrok herunterlade: sudo wget  https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-arm.zip

Befehl Ngrok entpacken: unzip ngrok-stable-linux-arm.zip

Nach dem Ngrok entpackt wurde kann dieses gestartet werden.

Ngrok ausführen

Ngrok wird ganz einfach über das Terminalfesnter gestartet. Ich habe dazu Ngrok den Port 7000 mitgeben. Der Port ist wichtig für die Kommunikation und sollte noch nicht auf dem Raspberry Pi durch ein anderes Programm verwendet werden. Über diesen Port 7000 soll später die Kommunikation mit dem Flask Server laufen der auch noch auf dem Raspberry Pi installiert wird. Der Flask Server wird aus dem Python-Skript heraus gestartet das später die Steuerung des Roboters übernimmt.

Befehl Ngrok mit dem Port 7000 starten: ./ngrok http 7000

Ich habe mir bei Ngrok eine reserved Domain mit dem Namen „my-robot“ angelegt. Das kostet aktuell 60 USD. Nur so hat man immer die gleiche URL über die Ngrok erreichbar ist. Andernfalls im Free Account ändert sich die URL bei jedem Aufruf von Ngrok auf dem Raspberry Pi wie zu Beginn erklärt. Durch diese Änderung der URL muss man später im IFTTT Web-Service auch immer wieder die neue Random URL hinterlegen. Das ist nervig und Fehleranfällig. So habe ich die 60 USD ausgeben und mir meine eigene URL angelegt die sich nicht mehr ändert und die nur ich nutzen kann.

Nachfolgend zeige ich den Befehl wie Ngrok mit einer Region (EU) und der reserved domain die ich mir bei Ngrok angelegt habe gestartet werden kann.

Befehl: ./ngrok http 7000 -region eu -subdomain=my-robot

Ab jetzt ist mein Roboter Auto von extern in meinem Heimnetzwerk über einen verschlüsselten und somit sicheren SSH Tunnel aus dem Internet heraus zu erreichen. Das auth Token stellt dabei sicher, dass nur ich diesen Tunnel nutzen kann.

IFTTT Workflow anlegen (60 Minuten)

Jetzt benötigen wir einen Account beim IFTTT Service. Dieser IFTTT Serivce wird Alexa bekannt gemacht. Nur so kann von Alexa aus auf ganz einfache Weise über IFTTT eine URL aufgerufen werden die über Ngrok einen Befehl an das Roboter Auto übermittelt.

Als erstes muss man sich als Kunde bei IFTTT anmelden. Anschließend kann man eigene Applets anlegen. Diese Applets kapseln jeweils eine Aktion die IFTTT bei einem Aufruf des Applets durch z. B. Amazon Alexa ausführen soll.

Es müssen in diesem Beispiel 6 Applets angelegt werden für die Steuerung des Roboters. Das heißt der Prozess der Anlage muss sechsmal durchlaufen werden und dauert somit ein paar Minuten.

Übersicht benötigte IFTTT Applets:

  • left
  • right
  • forward
  • backward
  • stop
  • wait (optional und als Beispiel hier verwendet)

Wenn möglich sollte man jetzt auch seine Ngrok statische URL wie z. B. “my-robot” parat haben. Wenn nicht dann die zufällig generierte. Diese wird jetzt sechsmal also in jedem Applet hinterlegt.

IFTTT Applet anlegen

Bitte rufe jetzt die folgende URL auf um Dein erstes Applet anzulegen.

IFTTT Create URL: https://ifttt.com/create

Anschließend sollte das Bild wie folgt aussehen. Hier musst Du jetzt auf das + drücken um den Typ des Applets zu definieren.

Anlegen eines IFTTT Applets

Anlegen eines IFTTT Applets

Wir wollen ein Applet anlegen das die Alexa Funktion kapselt. Daher Suche einfach nach Alexa und klicke das Applet an.

Auswahl eines IFTTT Services

Auswahl eines IFTTT Services

Jetzt muss ein „Trigger“ ausgewählt werden. Für das Roboter-Auto Beispiel wird der Trigger „Say a specific phrase“ ausgewählt.

Auswahl eines IFTTT Triggers

Auswahl eines IFTTT Triggers

Jetzt wird in dem Trigger die Phrase hinterlegt die später gesagt werden soll. Ich habe hier das Wort „wait“ gewählt. Anschließend musst Du nur noch auf „Create trigger“ tippen.

Fertigstellen des Triggers

Fertigstellen des Triggers

Es wird die nächste Sicht geladen. Hier bitte wieder auf das + licken und die Aktion wählen die von diesem Trigger ausgeführt werden soll.

Auswahl der Dann Aktion

Auswahl der Dann Aktion

In der Suchmaske bitte nach “Maker” suchen und “Maker Webhooks” auswählen.

Auswahl des IFTTT Action Services

Auswahl des IFTTT Action Services

Dann “Make a web request” Service auswählen.

Auswahl der IFTTT Action

Auswahl der IFTTT Action

Jetzt öffnet sich die Maske für die Konfiguration des „Make web request“. Hier ist auch das Feld URL zu sehen. In diese wird die zurufende URL eingetragen. In dem Beispiel ist noch die random URL zu sehen die ngrok vergeben hatte.

Wichtig:

Am Ende der URL wird der auszuführende Befehl angefügt. In diesem Beispiel wird die „wait“ Funktion gebaut. Also muss an die URL ein “/wait” angefügt werden.

Beispiel:

http://<random>.ngrok.io/wait

Dann wird im nächsten Schritt die GET Methode bei der Konfiguration ausgewählt.

Einstellung der IFTTT Action fields

Einstellung der IFTTT Action fields

Der Content Type ist „text/plain“ der als nächstes ausgewählt wird. Der Body bleibt leer. Dieser wird nicht weiter verwendet in dem Beispiel für den Aufruf.

Einstellung der IFTTT Action fields content Type

Einstellung der IFTTT Action fields content Type

Nach dem tippen auf “Create action” ist die Konfiguration des Alexa Applets „wait“ abgeschlossen.

Jetzt muss man für alle weiteren fünf Funktionsaufrufe „left“, „right“, „foward“, „backward“ und „stop“ jeweils ein weiteres Applet anlegen.

Choose IFTTT action review

Choose IFTTT action review

Übersicht – IFTTT Alexa Applets

Nach dem alle sechs IFTTT Applets erstellt wurden kann man sich über die folgende URL die Applets anzeigen lassen.

Übersicht Alexa Applets: https://ifttt.com/amazon_alexa

Es wurden fünf Applets angelegt für die Grundfunktionen der Bewegungen des Roboter Autos. Dazu kommt noch das Wait Applet und somit in Summe sechs Applets.

Left, right, forward, backward, stop und wait

Übersicht der sechs IFTTT Applets

Übersicht der sechs IFTTT Applets

Alexa Account mit IFTTT Account verknüpfen (15 Minuten)

Jetzt müssen die einzelnen Applets noch Alexa bekannt gemacht werden. Damit das klappt muss der IFTTT Account als ganzes mit Amazon Alexa AVS verbunden werden. Das geht recht einfach durch das Aufrufen der folgende URL:

IFTTT AVS Verknüpfung: https://ifttt.com/amazon_alexa

Nach dem Aufrufen der IFTTT Url zur Verknüpfung der beiden Accounts musst Du oben links auf „Settings“ klicken.

Amazon Alexa mit IFTTT verbinden

Amazon Alexa mit IFTTT verbinden

Hier kann man dann seinen IFTTT Account mit Alexa verbinden:

Amazon Alexa mit IFTTT verbinden aktiv

Amazon Alexa mit IFTTT verbinden aktiv

Amazon hat dazu auch eine kleine Hilfe veröffentlicht die unter der folgenden URL zu finden ist.

Amazon IFTTT Hilfe: https://www.amazon.com/gp/help/customer/display.html?nodeId=201790640

Flask Server (10 Minuten)

Der Flask Server wird installiert damit der Raspberry Pi die Aufrufe die von den sechs IFTTT Applets ausgeführt werden entgegen nehmen kann. Diese Aufrufe erhält der Flask Server über den Ngrok SSH Tunnel. Da der SSH Tunnel von Ngrok über den Port 7000 läuft muss auch der Flask Server auf den Port 7000 hören. Andernfalls erreichen die Aufrufe den Flask Server nicht.

Installation Flask Server

Für die Installation des Flask Servers im Terminal Fenster bitte den folgenden Befehl ausführen:

Befehl: sudo pip install flask

Starten Flask Server

Der Flask Server wird aus dem Python Programm heraus gestartet das nachfolgend erklärt wird. Der Flask Server wird also nicht extra über einen Befehl aus dem Terminal Fenster heraus gestartet. Im Python Programm selber muss aber der Port 7000 hinterlegt werden (siehe am Ende vom Programm).

Python Programm (15 Minuten)

Das Python Programm gibt aktuell nur Text im Flask Server aus. Lege bitte das Python Programm mit z. B. den Namen “alexa.py” im home Verzeichnis deines User Pi auf dem Raspberry Pi an der im Roboter Auto eingebaut ist.

Das Programm kannst Du unter der folgenden URL herunter laden.

Download: Python Programm Alexa Bot

Python Programm starten

Das Python Programm wird in einem eigenen Terminal Fenster gestartet. Mit bei dem Programm muss das Motortreiber Python Programm liegen damit die Motoren des Roboter-Autos angesteuert werden können.

Befehl: python <programm Name>

[DE_BOOK_DETAIL DE_BOOK_DETAIL=”DE_BOOK_DETAIL”]

Zusammenfassung

Das Beispiel der Steuerung des Roboter-Autos mit Alexa zeigt sehr schön die die Welt des Internet mit Dingen wie dem Roboter verknüpft werden können. Wie einfach dann die Steuerung über gesprochene Befehle erfolgen kann und sich wirklich etwas bewegt. Ich selber war erstaunt wie gut und mit wie wenigen Programmierkenntnissen die Umsetzung gelingt. Ich wünsche Viel Spaß beim ausprobieren und Umsetzen von neuen tollen Ideen.

(Visited 3.561 times, 1 visits today)