Inhaltsverzeichnis:

Nao-Roboter, der Bewegungen mit Kinect nachahmt - Gunook
Nao-Roboter, der Bewegungen mit Kinect nachahmt - Gunook

Video: Nao-Roboter, der Bewegungen mit Kinect nachahmt - Gunook

Video: Nao-Roboter, der Bewegungen mit Kinect nachahmt - Gunook
Video: The Uncanny Valley - Why More Realistic Characters Look Less Human - Extra Credits 2024, Juni
Anonim
Nao-Roboter imitieren Bewegungen mit Kinect
Nao-Roboter imitieren Bewegungen mit Kinect

In diesem anweisbaren werde ich Ihnen erklären, wie wir einen Nao-Roboter unsere Bewegungen mit einem Kinect-Sensor nachahmen lassen. Das eigentliche Ziel des Projekts ist ein pädagogischer Zweck: Ein Lehrer hat die Möglichkeit, bestimmte Bewegungsabläufe (zB einen Tanz) aufzunehmen und kann diese Aufnahmen verwenden, um die Kinder im Klassenzimmer den Roboter nachahmen zu lassen. Indem Sie dieses gesamte anweisbare Schritt für Schritt durchgehen, sollten Sie in der Lage sein, dieses Projekt vollständig neu zu erstellen.

Dies ist ein schulbezogenes Projekt (NMCT @ Howest, Kortrijk).

Schritt 1: Grundwissen

Um dieses Projekt nachzubauen, müssen Sie einige Grundkenntnisse besitzen:

- Grundlegende Python-Kenntnisse

- Grundkenntnisse in C# (WPF)

- Grundkenntnisse in der Trigonometrie

- Kenntnisse zum Einrichten von MQTT auf einem Himbeer-Pi

Schritt 2: Beschaffung der erforderlichen Materialien

Benötigte Materialien für dieses Projekt:

- Himbeer-Pi

- Kinect-Sensor v1.8 (Xbox 360)

- Nao-Roboter oder virtueller Roboter (Choregraph)

Schritt 3: Wie es funktioniert

Image
Image
Wie es funktioniert
Wie es funktioniert

Ein Kinect-Sensor ist mit einem Computer verbunden, auf dem die WPF-Anwendung ausgeführt wird. Die WPF-Anwendung sendet mithilfe von MQTT Daten an die Python-Anwendung (Roboter). Lokale Dateien werden gespeichert, wenn der Benutzer dies wünscht.

Ausführliche Erklärung:

Bevor wir mit der Aufzeichnung beginnen, muss der Benutzer die IP-Adresse des MQTT-Brokers eingeben. Außerdem benötigen wir noch das Thema, zu dem wir die Daten veröffentlichen wollen. Nach Drücken von Start prüft die Anwendung, ob eine Verbindung mit dem Broker hergestellt werden konnte und gibt uns Feedback. Es ist nicht möglich zu prüfen, ob ein Thema existiert, daher sind Sie für dieses Thema voll verantwortlich. Wenn beide Eingaben in Ordnung sind, beginnt die Anwendung mit dem Senden von Daten (x-, y- und z-Koordinaten bilden jede Verbindung) vom Skelett, das verfolgt wird, an das Thema auf dem MQTT-Broker.

Da der Roboter mit dem gleichen MQTT-Broker verbunden ist und am gleichen Thema abonniert ist (dies muss auch in der Python-Anwendung eingegeben werden), erhält die Python-Anwendung nun die Daten von der WPF-Anwendung. Mit Trigonometrie und selbstgeschriebenen Algorithmen wandeln wir die Koordinaten in Winkel und Bogenmaß um, mit denen wir die Motoren im Roboter in Echtzeit drehen.

Wenn der Benutzer mit der Aufnahme fertig ist, drückt er die Stopptaste. Nun bekommt der Benutzer ein Pop-up mit der Frage, ob er die Aufnahme speichern möchte. Wenn der Benutzer auf Abbrechen klickt, wird alles zurückgesetzt (Daten gehen verloren) und eine neue Aufzeichnung kann gestartet werden. Wenn der Benutzer die Aufnahme speichern möchte, sollte er einen Titel eingeben und auf 'Speichern' klicken. Wenn Sie auf 'Speichern' klicken, werden alle erfassten Daten in eine lokale Datei geschrieben, wobei der Titel als Dateiname eingegeben wird. Die Datei wird auch der Listenansicht auf der rechten Seite des Bildschirms hinzugefügt. Auf diese Weise wird nach einem Doppelklick auf den neuen Eintrag in der Listenansicht die Datei gelesen und an den MQTT-Broker gesendet. Folglich spielt der Roboter die Aufnahme ab.

Schritt 4: Einrichten des MQTT-Brokers

Einrichten des MQTT-Brokers
Einrichten des MQTT-Brokers

Für die Kommunikation zwischen Kinect (WPF-Projekt) und dem Roboter (Python-Projekt) haben wir MQTT verwendet. MQTT besteht aus einem Broker (einem Linux-Rechner, auf dem die mqtt-Software (zB Mosquitto) läuft) und einem Topic, zu dem Clients abonnieren (sie erhalten eine Nachricht vom Topic) und veröffentlichen (sie posten eine Nachricht zum Thema).

Um den MQTT-Broker einzurichten, laden Sie einfach dieses gesamte Jessie-Image herunter. Dies ist eine saubere Installation für Ihren Raspberry Pi mit einem MQTT-Broker darauf. Das Thema ist "/Sandro".

Schritt 5: Installieren des Kinect SDK V1.8

Damit Kinect auf Ihrem Computer funktioniert, müssen Sie das Microsoft Kinect SDK installieren.

Sie können es hier herunterladen:

www.microsoft.com/en-us/download/details.a…

Schritt 6: Python V2.7 installieren

Der Roboter arbeitet mit dem NaoQi-Framework, dieses Framework ist nur für Python 2.7 (NICHT 3.x) verfügbar, also überprüfen Sie, welche Version von Python Sie installiert haben.

Python 2.7 können Sie hier herunterladen:

www.python.org/downloads/release/python-27…

Schritt 7: Codierung

Codierung
Codierung
Codierung
Codierung
Codierung
Codierung

Github:

Anmerkungen:

- Codieren mit der Kinect: Zuerst suchen Sie nach der verbundenen Kinect. Nachdem wir dies in einer Eigenschaft gespeichert haben, haben wir den Farb- und Skelettstream auf dem Kinect aktiviert. Colorstream ist das Live-Video, während Skelettstream bedeutet, dass ein Skelett der Person vor der Kamera angezeigt wird. Colorstream ist nicht wirklich notwendig, um dieses Projekt zum Laufen zu bringen, wir haben es nur aktiviert, weil das Bitmapping des Skelettstreams zum Colorstream glatt aussieht!

- In Wirklichkeit ist es wirklich der Skeletonstream, der den Job macht. Das Aktivieren von skeletonstream bedeutet, dass das Skelett der Person verfolgt wird. Von diesem Skelett erhalten Sie alle Arten von Informationen, z. Knochenorientierungen, Gelenkinformationen, … Der Schlüssel zu unserem Projekt waren die Gelenkinformationen. Unter Verwendung der x-y- und z-Koordinaten jedes der Gelenke des verfolgten Skeletts wussten wir, dass wir den Roboter bewegen können. Also veröffentlichen wir alle 0,8 Sekunden (mit einem Timer) die x-, y- und z-Koordinaten jedes der Gelenke an den mqtt-Broker.

- Da das Python-Projekt eine Subskription auf dem mqtt-Broker hat, können wir jetzt auf die Daten innerhalb dieses Projekts zugreifen. In jedem Gelenk des Roboters befinden sich zwei Motoren. Diese Motoren können nicht nur direkt über die x-, y- und z-Koordinaten gesteuert werden. Mit Trigonometrie und etwas gesundem Menschenverstand haben wir die x-, y- und z-Koordinaten der Gelenke in Winkel umgewandelt, die für Roboter unterstabil sind.

Im Grunde veröffentlicht das WPF-Projekt alle 0,8 Sekunden die X-, Y- und Z-Koordinaten jedes der Gelenke. Folglich werden diese Koordinaten innerhalb des Python-Projekts in Winkel umgewandelt, die dann an die entsprechenden Motoren des Roboters gesendet werden.

Empfohlen: