Remote Debugging auf der AR.Drone 2

Unser Ziel ist es, das Programm zur autonomen Steuerung auf der AR.Drone 2 auszuführen. Für die Entwicklung ist es daher hilfreich, das Programm direkt auf der Drohne ausführen und Debuggen zu können.
In diesem Post wird erklärt wie man sich eine Entwicklungsumgebung auf Xubuntu 10.04 für Remote Debugging auf der AR.Drone 2 einrichtet.

1. Schritt) Eclipse herunterladen und einrichten
Zunächst laden wir uns das aktuelle Eclipse (Juno) in der CDT-Edition herunter,
entpacken und starten es.

Als nächstes richten wir uns eine Remote Connection ein. Unter File > New > Other (oder Strg+N) wählen wir Connection aus.

Im nächsten Fenster wählen wir “Telnet Only (Experimental)” und klicken auf Next. Danach geben wir bei HOST die IP-Adresse der Drohne ein (192.168.1.1).

Im folgenden Dialog ändern wir unter “Telnet Settings” die Property “Login.Required” auf false und “Command.Prompt” zu “#”.
Mit einem Klick auf “Finish” schließen wir die Connection-Einrichung ab.

Jetzt können wir ein neues C-Projekt erstellen: File > New > C-Project. Wir erzeugen ein Hello-World-Projekt namens ARDrone und wählen rechts “Cross Toolchain”.
Wir klicken uns durch bis zu den Cross-Compiler Optionen. Hier geben wir den Prefix unseres Cross-Compilers an: arm-linux-gnueabi-
Ein Klick auf Finish erzeugt das Projekt.


2. Schritt) NFS einrichten
Die einfachste Methode, die kompilierten Dateien Remote auszuführen, ist, euren lokalen Workspace via NFS auf der ARDrone zu mounten.
Hierzu installieren wir zunächst das nfs-kernel-server Paket, falls noch nicht geschehen.

Als nächstes machen wir unseren Workspace im Netzwerk zugreifbar, indem wir die exports Datei editieren.

Hier fügen wir folgende Zeile ein:

Die Zeile sagt, dass die IP 192.168.1.1 Read-Only (ro) Zugriff auf den Pfad /home/manu/workspaces/ardrone hat.

Den Pfad zum Workspace müsst ihr natürlich entsprechend anpassen. Danach weisen wir den NFS-Server an, die Exports neu zu laden

Nun können wir auf der AR.Drone via Telnet den Workspace mounten:

IP und Pfad müssen natürlich wieder an eure Konfiguration angepasst werden.

3. Schritt) Automatisches Mounten des NFS auf der Drohne
Dieser Mount-Vorgang muss jedes mal wiederholt werden, wenn die Drohne neu gestartet wird.

Um das nicht jedes mal tun zu müssen, kann man es mit diesem NFS Mount Script automatisieren.
In der Datei 02ardrone_mount.sh müsst ihr eure euren Pfad und ggf. das Network-Interface anpassen, sowie eine ID angeben, unter der euer Workspace gemounted wird. Danach die Dateien an die richtigen Stellen kopieren.

Die 02ardrone_mount.sh wird nun jedesmal ausgeführt wenn eine Netzwerkverbindung hergestellt wird. Ist es die Verbindung zur AR.Drone, wird das Expect-Script ardrone_mount.exp ausgeführt, welches eine Telnet-Verbindung zur Drohne aufbaut und unseren Wokspace mounted.

Solange nicht mehrere Entwickler im Team die selbe ID vergeben haben, ist es somit auch problemlos möglich gleichzeit auf der ARDrone zu arbeiten.

4. Schritt) gdb herunterladen und kompilieren
Zum Remote Debuggen werden zwei Executables benötigt: zum einen der gdbserver, welcher auf der AR.Drone läuft, zum anderen der gdb.
Zwar ist auf der AR.Drone ein gdbserver in der Version 7.39 vorhanden, allerdings ist es so, dass gdbserver und gdb sehr wählerisch bei der Zusammenarbeit sind und zickig werden, wenn nicht auf beiden Seiten die selbe Version benutzt wird.
Deshalb laden wir uns die aktuelle gdb-Version aus der Linaro-Toolchain herunter und entpacken diese.
Zum kompilieren brauchen wir noch das expat-Paket, danach bauen wir uns zunächst den gdb

Als nächstes Cross-Compilieren wir den gdbserver:

Wenn alles geklappt hat, haben wir jetzt eine Executable names gdbserver. Diese laden wir über FTP auf die AR.Drone und kopieren sie danach via Telnet in das /bin Verzeichnis. Vorher machen wir noch ein Backup der bereits existierende Version.

5. Schritt) Debug-Configuration in Eclipse
Im letzten Schritt richten wir uns die Debug-Configuration in Eclipse ein. Zunächst bauen wir das Projekt, falls noch nicht geschehen: Project > Build All.
Dann öffnen wir das “Debug Configuration” Menu unter Run > Debug Configurations und erzeugen unter dem Listenpunkt “C/C++ Remote Application” ein neues Element.
Hier wählen wir bei Connection unsere zuvor erstellte Verbindung zur AR.Drone und tragen bei “Remote Absolute File Path for C/C++ Application” den Pfad ein, unter dem die Binary auf der AR.Drone zu finden ist.
Unter dem Tab “Debugger” wählen wir unseren zuvor kompilierten gdb. Dann noch bei “Shared Libraries” den Pfad zu den Linaro-Libs hinzufügen, bei mir ist das /usr/arm-linux-gnueabi/lib.

Das wars! Jetzt müsste sich unser Hello-World-Programm Remote Debuggen lassen.

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">