Wenn ihr Besitzer einer AR Drone (2.0) von Parrot seid und nebenbei auch noch der C# Programmiersprache Herr seid, dann wäre es doch eine Schande diese beiden nicht miteinander zu koppeln.
Im Netz gibt es einige Open Source und Community Projekte die sich mit der AR Drone Programmierung beschäftigen, jedoch sind diese alle veraltet, gelten nicht für die Drone Version 2.0 und sind leider mit der Zeit in Inaktivität versunken.

Daher habe ich hier eine simples Grundgerüst für eine AR Drone Steuerung in C# für euch, welches ich selbst für die Ansteuerung der Drone mit Bewegungsdaten von der Kinect verwende.

Am besten wir sammeln den Code zur Steuerung der AR Drone in einer Klasse. Hier ist ein Grundgerüst einer ARDroneController.cs Klasse:

Erklärung als Kommentar im Code…

private IPAddress IPAddr;
private IPEndPoint IP5556;
private UdpClient ATCmdPort;

public void Init() {
  // Die Drone hat standardmäßig die erste IP im 1ner Netz.
  IPAddr = IPAddress.Parse("192.168.1.1");

  // Auf dieser IP öffnet die Drone den Port 5556 zur Datenübertragung
  IP5556 = new IPEndPoint(IPAddr, 5556);

  // Ein UDP-Client auf den Dateb Port der Drone 5556 erstellen
  ATCmdPort = new UdpClient(5556);
}

public void SendCommand(string command) {

  // Wandeln in Binär zur Übertragung
  byte[] commandBytes = Encoding.ASCII.GetBytes(command);  

  // Sende Binärdaten zur Drone
  ATCmdPort.Send(commandBytes, commandBytes.Length, IP5556);
}

Nun muss noch geklärt werden, wie wir denn nun ein Kommando an die Drone senden können.
Der Command zum Starten (TakeOff) der Drone sieht folgendermaßen aus:

  drone.Init();
  drone.SendCommand("AT*REF=1,512\r"); // AT*REF=1,512\r

Weitere Commands sind hier:
TakeOff = AT*REF=1,512\r
Landing = AT*REF=1,0\r
Emergency = AT*REF=1,256\r
HoverMode = AT*PCMD=1,0,0,0,0,0\r

Mehr Commands habe ich leider nicht für euch. Diese lassen sich aber mit ein wenig Geduld aus dem AR Drone SDK herausfinden bzw. sind bestimmt irgendwo Dokumentiert worden.
Ein wichtiger Tipp:
Wenn Ihr den Code zum ersten Mal ausprobiert und eure Drone abheben lassen wollt, stellt auf jeden Fall vorher sicher, dass der Code für Landen und besser auch für Emergency implementiert ist.
Ab besten Testet ihr euren Code vorher auch mit einem Unit Test um sicherzustellen, dass sowohl TakeOff als auch Emergency “funktionierend bis zur entscheidenden Stelle” ankommen.

Trotz der Info, dass meine Drone mit diesen Commands starten und landen konnte übernehme ich keine Gewährleistung über die Richtigkeit des Codes und keine Haftung über eventuell entstehende Schäden an eurer Drone 😉


0 Comments

Leave a Reply