Das Ziel der Aufgabenstellung war, dass der NXT Roboter mittels KINECT (XBox360) gesteuert wird.

Mit Hilfe von C# und eventuell auch Java sollen die Bewegungen kontrolliert und mittels Bluetooth sollen einzelnen Befehle an den NXT Baustein des Roboters übertragen werden.

Einer der ersten Schritte war es, den Roboter aus dem Standrad-Kit zusammen zu bauen und richtig zu verkabeln. Unsere Wahl fiel auf den Fahrzeug-Roboter. Bei deiner Taufe bekam er den Namen Kico (Kinect Controlled).

Der Lego NXT Mindstorms Roboter besteht aus:

  • einem programmierbaren NXT-Stein
  • 3 Servomotoren mit Rotationssensoren
  • dem Ultraschallsensor
  • dem Drucksensor

Um uns mit dem Roboter vertraut zu machen, erstellten wir zuerst einige kleine Programme mit der mitgelieferten Software von LEGO MINDSTORMS.

Um den Roboter richtig zu Programmieren musste die benötigte Software erst auf den Arbeitsrechnern installiert werden:

  • Microsoft Visual C# Express 2010
  • Kinect SDK
  • DirectXàneueste Version
  • Developer Toolkit Kinect for Windows
  • Java Editor mit dem lejos Plugin (wurde später nicht mehr benötigt)
  • Mindsqualls (ersetzt Java)

Die Grundbewegungen für die einzelnen Aktionen die der Roboter ausführen soll, wurden festgelegt:

  • vorwärts à den rechten Arm abgewinkelt nach vorne bewegen
  • rückwärts à den linken Arm abgewinkelt nach hinten bewegen(ACHTUNG: negativer Wert!)
  • rechts drehen à rechten Arm zur Seite drehen
  • links drehen à linken Arm zur Seite drehen
  • klatschen à Hände falten/klatschen

Um eine Anhaltspunkt zu haben wurde das Skeleton Basics WPF Package installiert. Dies war der Grundstock unserer weiteren Programmierung.

Der erste Schritt, den Code zu vervollständigen, war mittels Timern die Werte der einzelnen Joints(also Punkte die die KINECT erkennt) auf den Jeweiligen Achsen auszugeben. Anfangs machte dies einige Probleme da zuerst der Code des vorgefertigten Files verstanden werden musste.

Soweit, so gut. Als Nächstes musste eine Kalibrierung programmiert werden, die, egal wo sie die Person im Koordinatensystem befindet die Durchschnittswerte der einzelnen Joints in Arrays speichert. Diese Werte werden für alle anderen Berechnungen als Standardwert herangezogen. Hierbei war darauf zu achten, dass sich das Koordinatensystem der KINECT auf allen Achsen(x, y und z) von -2 bis 2 erstreckt.

Mit Hilfe von Differenzen wurden als nächstes die Abstände zwischen den verschiedenen benötigten Joints berechnet.

Da das Arbeiten mit Differenzen aber einem Problem mit sich gebracht hat, fiel die Entscheidung schlussendlich darauf, die Differenzen in Vektoren umzuwandeln und mit den Beträgen der Vektoren zu rechnen.

Für die Analyse, ob eine gewisse Bewegung getätigt wurde, mussten die Standradbeträge der Vektoren aus der Kalibrierung mit den aktuellen Vektoren die aus den Joints immer wieder berechnet werden verglichen werden. Die richtigen Verhältnisse wurden durch ein experimentelles Verfahren(ständige Ausgabe der werte) ermittelt. Bei dem richtigen Verhältnis (also der richtigen Bewegung) wird via Bluetooth ein Signal an den NXT Roboter gesendet.

Die Bluetooth Verbindung über C# machte allerdings einige Zicken. Ständig wurde der Fehler „Exception 16 at 71(81)“ und ein Beep-Ton vom NXT Baustein ausgegeben. Aus diesem Grund stellten wir das Programm auf die sehr nützliche Mindsqualls Bibliothek um, die extra für die Kommunikation von C# zum programmierbaren NXT Stein  entwickelt wurde. Somit fällt auch der Teil weg der mit Java hätte programmiert werden sollen. Der Port über den die Connection aufgebaut ist, ist je nach Computer verschieden. Dieser muss im Programm(region Variablen) jeweils ausgebessert werden.

Das Signal wird für eine Bewegung ständig gesendet. Die Bewegung des Roboters dauert dabei aber nur 1 Sekunde. Somit entsteht der Eindruck einer flüssigen Bewegung.

Um die Benutzerfreundlichkeit zu erhöhen, wurden noch verschiedene Buttons zum Connecten oder zum neu Kalibrieren in das Projekt eingebaut. Um das Projekt auf jedem PC lauffähig zu machen, wurde ein Textfeld eingebaut, mit dem der COM Port individuell eingelesen werden kann.

Das Projekt wurde zusätzlich noch als ausführbares Programm veröffentlicht.

Das veröffentlichte Projekt und der Projektordner befinden sich mit folgenden Namen jeweils unter Downloads:

Leave a Reply