Mittwoch, 21. Dezember 2011

Abhängigkeiten von der Reifengröße

Um den Segway aufrecht zu halten, braucht die Segwayklasse als Parameter die Reifengröße. Uns stehen vier verschiedene Reifen mit verschiedenen Reifendurchmessern zur Verfügung. Es wurde untersucht, wie sich die Reifengröße auf die Stabilität und andere Faktoren des Segways auswirken.

Die verfügbaren Reifendurchmesser sind:

  • 81.6 mm
  • 62.4 mm
  • 56.0 mm
  • 43.2 mm

Für den Standardsegway nach Legoanleitung sind 56.0 mm als Defaultgröße vorgesehen. Die Stabiltät des Segways war damit schon zufriedenstellend, obwohl die Instabilität beim Ausbalancieren noch spürbar war und um das Ziel, den Segway die Tür mit der Chipkarte öffnen zu lassen doch zu groß war. Für dieses Ziel muss das Gerät doch recht stabil stehen, um die Authentifizierung durchführen zu können.

Als nächstes wurden die größten Reifen getestet. Die Stabilität war am schlechtesten, schon das senkrecht stehen ist in "Rumgeeier" ausgeartet.

Zuletzt haben wir noch die kleinsten Reifen (43.2 mm) getestet, als genaues Gegenteil der größten Reifen. Hier war die Stabilität am besten, der Segway s teht ruhig, und lässt sich auch problemlos steuern.

Die Vermutung liegt darin, dass sich die Motoren (welche doch eine gewisse Anlauf-/Bremsträgheit besitzen) das Rad für die gleiche Strecke nicht so weit drehen müssen, wie bei den größen Rädern. Daraus ergeben sich weniger Ungenauigkeiten aufgrund der Hardware (Motoren) und somit ein stabileres Verhalten des Segways.


Mittwoch, 14. Dezember 2011

Verbindungen mit Bluetooth zulassen

Im Projekt ist jetzt die Möglichkeit vorhanden, Bluetooth-Connections zuzulassen.





Die Implementierung des ICommandListeners wird dann über neue zu fahrende Richtungen benachrichtigt.

Mittwoch, 30. November 2011

Settings des Programms in einer Properties-Datei

Das Programm verwendet mehrere Konstanten, bspw. für den PID-Controller. Diese Konstanten müssten jedesmal bei Änderungen im Code geändert werden, wenn andere Werte verwendet werden sollen. Damit nicht jedesmal eine Änderung im Code und damit eine Neukompilierung notwendig wird, können diese Werte jetzt in eine ".properties"-Datei ausgelagert werden:


Diese Datei enthält Key-Value-Einträge.





Im Code können diese Paare mit dem SettingsReader ausgelesen werden und in den gewünschten Datentyp entsprechend geparst zurückgegeben werden.








Mit dem LeJOS-Hifsprogramm "nxjbrowse" kann dann die Properties-Datei auf den Brick gespielt werden.







Nachdem die Verbindung steht, kann die Properties-Datei mit den veränderten Werte ausgetauscht werden:

Segway "HTWay"-Style und Android Remote Control

Um näheren Einblick in die Materie zu erhalten, wurde der Segway von HTWay nachgebaut(siehe Beitrag davor).

Requirements:
- Lego Mindstorms NXT 2.0(*) software inkl. Dynamic Block Updater PC Version
- NXT-G Programm von HTWay
- NXT Brick mit Lego Standardsoftware, Version 1.29
- Eigenen "Blocks" :
- text to number
- htway gyro block
- htway ir receiver block
- HiTechnic Remote Control .apk Datei


(*) wichtig, da hier Floating Point Operationen unterstützt werden

Instruktionen:
Alle eigenen Blocks in Lego Mindstorms importieren. Dannach das Programm kompilieren und auf die Brick ziehen.
Nach dem Start der Applikation kann eine Bluetooth-Verbindung vom Android-Smartphone aufgebaut werden.

Ergebnis nach Test:
Das Testgerät läuft stabil

Halterung für die Karte


Ziel des Projekts soll ja sein, mit dem Roboter auf einem Tisch an den Türsensor zu fahren und die Tür damit zu entriegeln. Dafür muss der Segway die Karte halten. Hier sieht man den Aufbau der Kartenhalterung.

Liste von Features:
  • Höhenverstellbares Interface
  • Leichter Ein- und Ausbau
  • Benutzerfreundliches Einführen der Karte
  • Die heiße Ische hälts in den Händen


Line Follower mit LeJos

Die bereits mit NXT-G umgesetzten Versionen des Line Followers wurden nun auch mit LeJos erfolgreich umgesetzt. Dabei wurden nur die ersten beiden Versionen mit Java nachprogrammiert. Für Version 3 wurde dann direkt ein vollständiger PID Regler programmiert. Hierzu wurde u.a. auf folgendes Tutorial zurückgegriffen um sich langsam den optimalen Werten für die Gewichtung der P- I- und D-Glieder anzunähern http://www.inpharmix.com/jps/PID_Controller_For_Lego_Mindstorms_Robots.html
Vorträge während des Forschungsprojekts zu Regeleungstechnik, PID Reglern und deren softwareseitige Umsetzung mit LeJos brachten das notwendige Wissen. Für den PID Regler wurde die Klasse PIDController aus der LeJos API genutzt. Nach mehrmaligem verbessern der Parameter konnte ein Line Follower erstellt werden, der ohne Oszillation der Testlinie aus dem Lego NXT Pack folgte. Nachdem nun die Grundlagen und das Verständnis für Regelungstechnik mit PID Reglern erarbeitet wurden konnte sich nun auf die eigentliche Problemstellung konzentriert werden: Inverses Pendel (Segway).

Dienstag, 29. November 2011

Vorbereiten der Entwicklungsumgebung für LeJos

Nachdem der Line Follower mit NXT-G erfolgreich umgesetzt wurde, war es an der Zeit die Entwicklungsumgebung für LeJos einzurichten. Hierzu wurde LeJos von http://lejos.sourceforge.net/ geladen und installiert. Da LeJos nicht 64bit kompatibel ist, musste zuerst Java 32bit Version 1.6 und Eclipse Helios 32bit installiert werden. Danach wurde Eclipse um das LeJos NXJ Plugin erweitert. Zudem waren die original Lego NXT Treiber notwendig falls auf dem Rechner nicht bereits NXT-G installiert war. Nach der installation aller benötigten Komponenten war es möglich ein erstes Testprogramm, dass eine Textanzeige ('Hello World') auf dem Display des NXT Bricks ausgibt, zu erstellen und auf den NXT Brick zu übertragen. Auf manchen Rechnern war es notwendig nach jeder Übertragung die Entwicklungsumgebung neu zu starten, da es ansonsten nicht mehr möglich war sich mit dem NXT Brick zu verbinden. Der Grund hierfür konnte nicht gefunden werden.
Nach erfolgreicher Installation und Test der Entwicklungsumgebung war es jetzt möglich sich der Programmierung des PID geregelten Line Followers mit Java und LeJos zu widmen.

Line Follower mit NXT-G

Im ersten Schritt einen PID geregelten Line Follower zu programmieren wurde anhand der mitgelieferten Lego IDE, NXT-G, ein Programm erstellt und auf den NXT Brick übertragen. Das Programm und der Line Follower wurden nach einer Vorlage von http://www.nxtprograms.com/line_follower/steps.html erstellt.
Das Programm für den Line Follower wurde stufenweise verfeinert. Die erste Version steuerte den Line Follower lediglich nach rechts und links um so der Linie zu folgen. In Version zwei wurden bereits fünf Stufen eingezogen. Jeweils zwei Stufen um nach links bzw. rechts mit unterschiedlich starker Wendung zu korrigieren und eine Stufe um gerade aus zu fahren. Die dritte und letzte Version war dann bereits per P-Glied geregelt und konnte dementsprechend mit wesentlich geringerer Oszillation der Linie folgen.
Mit den gewonnenen Informationen dieser Umsetzung wurde im Anschluss auf die LeJos JavaRuntime für Lego NXT gewechselt.

Bau Prototyp 1

Der erste Segway ist nach der Anleitung der Website (link) gebaut worden. Verbesserungsvorschläge werden gerne entgegengenommen!

Mittwoch, 23. November 2011

Logging - Remote Debugging

Einleitung:

Um die Daten die während des Betriebs des Robos anfallen später auswerten zu können, müssen diese verfügbar gemacht werden. Da der Speicherplatz des Robos begrenzt ist, ist eine Log-Datei nur in begrenztem Umfang verwendbar. Eine andere Möglichkeit, die nicht auf Speicherplatz des Robos begrenzt ist, ist das Remote Debugging über Bluetooth. Die LeJOS-API bietet hierfür die Klasse lejos.nxt.comm.RConsole

Wichtige (statische) Methoden sind hier
  • openAny(int timeout)
  • println(String s)
  • close()
Vorgehensweise:

Die RConsole muss mit openAny geöffnet werden. Für die Dauer des Timeouts (in ms) wird auf einen "ConsoleListener" gewartet. Diesen kann man selber implementieren oder den "ConsoleViewer" der mit der leJOS-Installation mitgeliefert wird (im "/bin"-Verzeichnis die "nxjconsoleviewer.bat") nutzen.
Sobald die Verbindung zwischen Robo und RConsole steht, werden alle Ausgaben die durch "println(String s)" mitgegeben werden, in den ConsoleViewer übertragen.

Damit die Ausgaben an die Console die tatsächliche Aufgabe des Robos nur in geringem Maße beeinträchtigen, wurde eine Logger-Klasse geschrieben, die die RConsole-Klasse kapselt und in einem eigenen Thread läuft. Da mehrere Instanzen der Logger-Klasse nicht nötig sind oder ggfs. sogar stören, wurde sie nach dem Singleton-Pattern implementiert.

Bekannte Probleme:
Problem:
Wenn das Programm über Eclipse über die "Run As -> LeJOS NXT Programm"-Configuration auf den Robo aufgespielt wird, das aufgespielte Programm dann automatisch startet, konnte der ConsoleViewer keine Verbindung aufbauen.

Workaround:
  1. Programm kompilieren
  2. Mit dem LeJOS-Programm "nxjbrowse" (siehe Installationsordner -> /bin) eine Verbindung mit dem Robo herstellen.
  3. Kompilierte .nxj-Datei übertragen
  4. "nxjbrowse" schließen
  5. "nxjconsoleviewer" öffnen
  6. Auf dem Robo die .nxj-Datei starten
  7. Mit dem nxjconsoleviewer innerhalb des Timeouts (siehe openAny(int timeout)) die Verbindung herstellen

Mittwoch, 19. Oktober 2011