Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

projektews1415:p.falkon

Projektdokumentation p.Falkon

Einführung

Das Ziel dieses Projektes ist es, einen Quadrocopter zu bauen, der über eine Kamera im Raum lokalisiert und gesteuert werden kann. Die Kamera lokalisiert den Copter mit Hilfe von „Lichtbällen“ (wie bei „Playstation Move“). Diese Daten werden an einen Laptop weiter gegeben. Der Laptop verarbeitet die Bilder und stellt die Position des Copters im dreidimensionalen Raum fest (x,y,z - Achse). Gesteuert wird der Copter über einen Arduino, der zwischen PC und Analogsteuerung der Fernbedienung angeschlossen wird. Somit kann der Pilot am Laptop den Copter über die Maus (oder ähnliches) steuern oder der Laptop übernimmt eigenständig die Steuerung.

Abbildung 1: Grafische Darstellung des Projektziels Um unsere Ziele erfolgreich umzusetzen, müssen einige Bedingungen erfüllt sein. Der Copter muss stabil fliegen können und sich leicht steuern lassen. Die Fernbedienung muss in der Lage sein, Befehle an den Copter zu übersenden, sowie die Möglichkeit bieten einen Arduino anzuschließen. Der Copter sollte mit einfachen Maus- und/oder Tastaturbefehlen steuerbar sein. Zusätzlich muss die Kamera den Copter im Raum lokalisieren können und die Bilder an den PC übertragen. Um der Kamera die Lokalisierung zu erleichtern, haben wir geplant stark leuchtende Leds am Copter zu befestigen.

Hauptteil

Wir haben uns für einen Copter von UDI entschieden, mit der Modellnummer 818a, da dieser recht robust und gut ausgestattet ist. Zudem hat er unser Kursbudget nicht gesprengt. Als Kamera haben wir uns auf ein PS3-Eye geeinigt. Diese Kamera ist mit ca. 10€ recht günstig und macht mehr Bilder pro Sekunde als andere Kameras in diesem Preissegment. Außerdem ist diese Kamera spezialisiert den ganzen Raum zu erfassen. Von Felix haben wir einen Arduino Uno gestellt bekommen.

Fernbedienung

Um herauszufinden, wie die Fernbedienung den Copter steuert, haben wir damit begonnen die Fernbedienung des Copters auseinanderzubauen. Die Fernbedienung steuert den Copter durch verschiedene Spannungen an den Steuerknüppeln. Je nachdem wie der Steuerknüppel bewegt wird, erhöht oder senkt sich die angelegte Spannung. Diese liegt zwischen 0V und 3V. Im Ruhezustand beträgt sie circa 1,6V. Beim Messen der Spannungen ist uns durch einen Kurzschluss der On/Off-Button der Fernbedienung kaputt gegangen. Durch ein wenig Lötarbeit ließ sich das Problem leicht lösen:

Abbildung 2: Gefixte Fernbedienung nach dem Kurzschluss Wir haben zusätzlich zum neu-verlegten On/Off-Kabel, noch 4 weitere Kabel an die Fernbedienung angeschlossen. Diese Kabel lassen sich einfach an den Arduino stecken. Die Kabel sind mit den Steuerknüppeln der Fernbedienung verbunden, bzw. eines mit der Erdung der Fernbedienung. Wir haben 2 Kabel mit dem Steuerknüppel verbunden, der für die x,y-Bewegung des Copter zuständig ist (Vorne, Hinten, Links und Rechts), das letzte Kabel ist an dem Steuerknüppel für Ausrichtung und Höhe, jedoch lässt sich damit nur die Höhe verändern.

Arduino

Der Arduino steuert die Fernbedienung mittels Pulsweitenmodulation an. Durch unterschiedliche Zeitintervalle, in denen der Arduino eine Spannung ausgibt (also entweder 0V und 3,3V oder 5V), ergibt sich ein anderer Mittelwert. Bei schnellen Wechseln sorgt der Tiefpassfilter für eine „Glättung“ der Spannung. Der Arduino konnte nicht einfach an die Fernbedienung angeschlossen werden, da der Arduino Uno an seinen Digital Pins eine Spannung von entweder genau 0V und genau 3,3V oder genau 5V ausgeben kann, aber keinen Wert der dazwischen liegt. Also ist es nötig, die Spannung zu regulieren. Ohne eine solche Regulierung entstünde das Problem, dass der Copter sich stark und zu schnell in eine Richtung bewegen würde – ähnlich als wenn die Joysticks der Fernbedienung maximal gedrückt würden. Den Copter auf diese Weise ruhig zu halten ist unmöglich. Um die Spannung zu regulieren, die der Arduino ausgibt, ist es nötig einen Widerstand und einen Kondensator (einen sog. Tiefpassfilter) zwischen den Arduino und die Fernbedienung zu schalten. Durch einen Tiefpassfilter werden niedrige Frequenzen „ungestört“ durchgelassen, höhere werden abgedämpft.

Abbildung 3: Schaltkreis eines Tiefpassfilters (R=Widerstand, C=Kondensator, Ue=Eingangspannung, Ua=Ausgangsspannung) Die Stärke des Widerstandes errechnet sich gemäß dem Ohm’sche Gesetz aus der Formel R=U/I (R=Widerstand, I=Stromstärke und U=Stromspannung). Wir haben U=5V gesetzt Die Pins des Arduino vertragen 0,02A. Somit ergibt sich R=5V/0,02A=250Ω. Die Frequenz des Arduino ist zwischen 30Hz und 20kHz. Daraus folgt für unseren Kondensator: C= (I*t)/V =0,02A*(1/30S)/5V=1,3µF. Für die Umsetzung haben wir 3 Tiefpassfilter mit 6 Widerständen und 3 Kondensatoren auf dem Arduino-Shield verlötet, die sich mit einem Kabel mit der Fernbedienung verbinden lassen. Pro Tiefpassfilter sind zwei Widerstände mit 100Ω und 150Ω hintereinander geschaltet. Der Kondensator kann eine Ladung von 1 µFarad speichern.

Abbildung 3: Grafische Darstellung der Pwm

Abbildung 4: Arduino mit Shield und den verlöteten Bauteilen

Steuerung

Der Code für die Steuerung des Copter funktioniert folgendermaßen: Processing öffnet ein Fenster, das in 255×255 Felder unterteilt ist. Je nach Mauspositon sendet Processing an den seriellen Port, an dem der Arduino steckt, einen anderen Wert. Der Wert entsteht aus der x- und y-Koordinate. Der Arduino verarbeitet den Wert und gibt dann je nach Wert eine Spannung aus, der durch den Tiefpassfilter geregelt wird und direkt an den Steuerknüppeln der Fernbedienung eingespeist wird. Die Fernbedienung sendet dann entsprechende Befehle an den Copter. Leider haben wir es nicht geschafft einen Code zu schreiben, der den Copter in der Höhe steuert. Die Probleme bestehen darin, dass man nicht weiß wie stark der Schub ist, den man gibt, und dass es schwierig ist, den Copter kontrolliert abstürzen zu lassen. Zudem muss die Spannung 0V betragen, damit der Copter ruhig auf dem Boden steht, dies lässt sich durch die Pulsweitenmodulation schwer realisieren. Der erste Testflug ist erfolgreich gewesen.

Farberkennung

Der Code für die Farberkennung verwendet das Ps3-Eye, anstatt der Webcam des Laptops. Damit werden die Leds am Copter auf ca. 7 Meter in einem leicht abgedunkelten Raum noch erkannt. Der Code funktioniert so: Man wählt durch einen simplen Mausklick eine Farbe aus, die man suchen will, diese wird als Variable eingespeichert. Der Code sucht dann Pixel für Pixel nach dieser Farbe ab. Falls die Abweichung des Farbwertes dann <25 ist, wird ein Punkt gesetzt und dieser mit dem vorher gesetzten verbunden. Damit lässt sich die vom Copter zurückgelegte Strecke (leider nur) in 2D verfolgen.

Fazit und Ergebnis

Der Copter lässt sich in x,y-Richtung durch die Maus am PC steuern. Die Farberkennung erkennt Punkte im Raum und verbindet sie. Zu Beginn des Projektes haben wir den Fokus falsch gelegt. Wir haben zu viel Zeit in die Kalibrierung der Kamera investiert, bevor wir an der Steuerung des Copters gearbeitet haben. Kurz vor der Präsentation des Projekts im Wissenschaftssfenster haben wir erst mit der Steuerung des Copters begonnen. Dadurch haben wir weder eine „perfekt“ funktionierende Steuerung, noch eine richtige Farberkennung. Wir haben es leider nicht geschafft einen Code zu schreiben, der die Höhe des Copters im Raum oder die Entfernung des Copters zur Kamera ermitteln kann. Die Gründe sind vielseitig, u.a. unstrukturierte Projektplanung, Abwesenheit eines Gruppenmitglieds oder Probleme mit den verwendeten Library‘s. Wir hätten mit dem Copter vorsichtiger umgehen sollen, ein Motor ist durch einen Absturz beschädigt und die Fernbedienung ist ebenfalls mehrmals kaputt gegangen.

Codes&Quellen:

projektews1415/p.falkon.txt · Zuletzt geändert: 2016/01/21 12:45 (Externe Bearbeitung)