PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] GPS-Regler für UAV



Robo Karl
05.08.2013, 23:05
Hallo Community,
mein Name ist Karl und ich bin 15 Jahre alt. Ich bin gerade dabei meine
eigene Drohne zu bauen und zu programmieren. Ich habe jeweil in kleinen
Skaches die komplette Flugstabilisierung mit Hilfe von PID Reglern
erstellt. Nun möchte ich erst einmal in der Theorie GPS-Daten mit
hinzufügen, jedoch habe ich das Problem das ich nicht weiß wie ich
einen Regler programmieren kann der die Drohne von einem Waypoint zum
anderen steuert...
/*
Thumba hatte folgendes geschrieben:
Da gehe ich so vor: Ich habe eine aktuelle Position (GPS). Dann gibt es
das Ziel, da will ich hin (GPS - Koordinate). Das ergibt ein
Ziel-Vektor. Dann nehme ich aus dem GPS den aktuellen Flug-Vektor
(Kurs). Die Winkeldifferenz der beiden Vektoren gebe ich mit einer
Konstante auf das Querruder oder auf die Giersteuerung. Bei Fliegern
sollte man zu diesem P-Anteil noch D und I dazunehmen. Bei Fahrzeugen
braucht man das nicht unbedingt. Und den Kurs fliege/fahre ich solange,
bis ich dicht genug am Ziel bin. Und dann nehme ich einfach das nächste
Ziel.
*/
Jetzt verstehe ich nicht wie ich den Flug-Vector (Kurs) berechnen kann.
Außerdem müsste mir vielleicht jemand noch einmal erklären was mit die WInkeldiffrenz der beiden Vectoren gemeint ist da blicke ich noch nicht durch.
Es ist sehr wichtig für mich das zu wissen, da ich mir nach und nach den Autopiloten selber programmieren möchte später kommt noch ein Raspberry PI ein umts stick usw. zu meinem Arduino UNO hinzu.

Schon mal danke im Vorraus
LG Karl

Picojetflyer
06.08.2013, 08:49
Du brauchst noch einen Kompas um die Richtung deiner Drohne zu bestimmen. Dann nimmst du deine Aktuelle Position und dieZiel-Position denkst dir eine Gerade dazwischen. Zu dieser graden berechnest du die Winkeldferenz zu deiner Flugrichtung (Winkelfunktion). Ist die Drohne ein Flugzeug oder ein Copter? beim Copter kannst du nicht einfach auf den Wegpunkt zu fliegen. Am Wegpunkt musst du dann über Roll und Nick steuern damit sich der Copter nicht ständig um den Wegpunkt dreht.

Robo Karl
06.08.2013, 10:11
Okey vielen Dank erst einmal für die Antwort. Es ist Flugzeug und kein Copter. Also müsste ich noch einen Kompass kaufen welcher dann die Aufgabe der Kurshaltung übernimmt. Jetzt stellt sich mir nur noch die Frage ich kann mir die Linie von aktueller Position und Wegpunk denken aber wie könnte man das programmieren. Ich bin erst wieder eingestiegen in die Robotik habe immer nur mit Mindstorms programmiert... Also bitte ich um jede Formel oder um jedes Beispielprogramm was man vielleicht "rumliegen" hat :) Wenn ich dann einmal den berechneten Kurs habe könnte ich ja per PID Regler das Seitenruder ansteuern

LG Karl

Schachmann
06.08.2013, 12:23
Hallo Karl,

ich finde eigentlich Hinweise auf Wikipedia immer ein wenig daneben, aber im Fall Deiner Frage drägt es sich geradezu auf: Gucks Du hier! (http://de.wikipedia.org/wiki/Geradengleichung)

In der ersten Grafik siehst du ein Koordinatensystem mit den beiden Punkten P und Q. Stell Dir vor, Dein Flugzeug ist auf dem Punkt P und will zum Punkt Q. Dann brauchst Du eigentlich nur die Steigung der verbindenden Geraden zu berechnen und loszufliegen. Wie das geht, steht in dem Wiki-Artikel haarklein beschrieben.

Hoffe, das hilft Dir weiter,
Gruß,
Ralf

Wsk8
06.08.2013, 12:36
Stell dir ein Koordinatensystem vor. Das Flugzeug ist immer auf 0/0.
Den Nord-Vektor würde ich zum Beispiel mit 0/2 definieren (länge egal...).

Jetzt nehmen wir an, du willst auf Punkt 2/2 fliegen.

Hier siehst du, wie man einen Winkel zwischen 2 Vektoren berechnet: http://www.mathe-online.at/materialien/Andreas.Pester/files/Vectors/winkel_zwischen_vektoren.htm

Also Winkel zwischen 0/2 und 2/2. Das ergibt in unserem Fall 45°

Jetzt musst du nur noch das Flugzeug solange drehen bis dein Kompass auch 45° liefert.

Wenn die X-Koordinate des Ziels kleiner als 0 ist, dann ist der Winkel = 360° - [berechneter_Winkel]

Natürlich ist das nur die theoretische Lösung, da muss dann immer noch etwas nachkorrigiert werden, da sich das Flugzeug ja dauernd bewegt und da das Flugzeug immer als 0/0 definiert ist, verschiebt sich der Zielpunkt.

mfg

Robo Karl
06.08.2013, 20:47
@Schachmann da hätte ich auch selber drauf können kommen ist eine Superlösung muss man einfach ein wenig probieren bis es klappt :D
@Wsk8 Ich habe die Formel zur Berechnung des Winkels zwischen den beiden Vektoren komplett verstanden. Jetzt stellt sich nur noch die Frage wie kann ich das FLugzeug als 0/0 definieren? Ich meine bei dieser Variante muss ich doch immer aus Norden starten damit er den Winkel richtig berechnen kann. Ich hoffe mal nicht das ich jetzt in eine ganz andere Richtung denke....

Wsk8
06.08.2013, 22:21
Du musst 0/0 nicht definiere, sondern du gehst einfach davon aus dass du immer bei 0/0 bist. Wenn dein Flugzeug z.b. bei 5/4 ist, dann ziehst du von allen Koordinaten diese 5/4 ab. Somit ist dein Flugzeug bei 0/0, und dein Ziel, das vorher bei 12/8 war, ist jetzt bei 7/4.
Und wenn du dein Koordinatesystem über die Karte legst, dann entspricht die Y-Achse immer Norden. Damit hat der Nord-Vector immer eine 0 am Anfang, der zweite Wert ist egal, da er nur die Länge darstellt und bei der Winkelberechnung uninteressant ist.

Unten mal eine Karte.
Dein Flugzeug bleibt immer an der Position 0/0. Du verschiebst also das Koordinatensystem mit dem Flugzeug (nur verschieben, nicht mit dem Flugzeug drehen!)
Hier musst du das Flugzeug also um ca. 45° drehen und Richtung des Ziels fliegen.
Die roten Linien sind fast am Ziel.

Ist leider etwas schwer übers internet zu erklären.

mfg

Robo Karl
06.08.2013, 23:13
Vielen vielen Dank Wsk8 dann habe ich mir das schon fast genauso gedacht mit dem abziegen der Werte ;) Super dann habe ich jetzt erst einmal die Theorie komplett und kann das nach und nach in einen Code verwandeln. Kurze Frage offtopic bisst du in dieser Richtung sehr bewandert? Vielleicht kannst du mir immer mal ein wenig bei verscheidenen Dingen helfen wäre super :D

LG Karl

Wsk8
06.08.2013, 23:26
Naja, ich kann halbwegs gut C/C++ programmieren, auch im Bereich AVR. Den Rest such ich mir auch von anderen zusammen ^^

mfg