PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Pfad folgen, per autonome GPS Lenkung, Beispiele, Hinweise, Ideen, Code gesucht



spunky9003
02.02.2017, 22:43
Ich will ein Fahrzeug per Lenkradmotor (Reibrad) lenken, es soll einem vorgegebenen Pfad (eine einfache gerade Linie aus zwei GPS Koordinaten) folgen. Das GPS System ist hier ausreichend genau, Abweichung kleiner 10 cm (2x uBlox M8T und RTKlib).

Grundsätzlich ist die Software fertig, die Anzeige aller Parameter wie Soll- und Ist-Koordinaten, deren Abstand voneinander, die Richtungswinkel der Linie und der Bewegungswinkel des Fahrzeugs. Die Soll-Koordinaten sind immer die kürzeste Entfernung zum Pfad. Hier ein Bild zur Veranschaulichung:

32399


Ich bin jetzt soweit, das der Motor permanent lenkt sobald ich rechts oder links von der Linie bin. Und hier beginnen die Probleme, 'permanent' heißt, ich fahre letztendlich im Kreis...

Wenn ich per Hand lenke, lenke ich ein Stück in die Zielrichtung, dann lenke ich wieder gerade, sobald ich mich dem Ziel nähere lenke ich entgegen, auf diese Weise pendele ich immer leicht auf dem vorgegebenen Pfad. Wie lässt sich dieses Lenkverhalten in eine Motorsteuerung umsetzen?

Ich suche Beispiele, Hinweise, Ideen oder auch fertigen Code (falls es den gibt, den ich mir anschauen kann und vielleicht für meine Zwecke anpassen kann). Viele Drohnenprojekte bieten doch auch die Möglichkeit einem Pfad zu folgen, wie wird es dort gemacht?

MfG.

Ceos
03.02.2017, 06:22
hahahaaha dein avatar und dein nick haben mir erstmal ein breites grinsen ins gesicht getrieben XD MMD </nostalgie>

die Frage die sich stellt, ist das Folgen der Linie entscheidend oder das exakte erreichen des Ziels?

Dein Fahrzeug hat einen gewissen Radabstand und ist vermutlich nur auf einer Achse gelenkt, damit ergibt sich schon mal ein eigener Regelkreis den es zu Berücksichtigen gilt um die Richtungsänderung vorherzuberechnen.

Wenn du dann auch noch Linientreu fahren möchtest, musst du dann quasi betrachten, wo schneiden sich die Fahrtrichtung und die Zielstrecke. Anhand dieser Information und der Distanz deines Fahrzeugs zur Zielstrecke ermittelst du dann ob dein Fahrzeug sich sehr weit weg befindet oder nah genug an der Zielstrecke dran ist. Dann bringst du bei großer Entfernung dein Fahrzeug also auf 90° zu Zilestrecke (voller Lenkeinschlag bis 90° erreicht sind) und fährst zur Linie und bei kurzer Distanz machst du halt nur eine Korrekturlenkung (teilweiser Lenkeinschlag) bis du nah an der linie bist und korrigierst dann zurück um das auto parallel/köhärent zur Strecke auszurochten.

Eigentlich alles nur eine Frage der Geometrie ... wenn du die Fahrtrichtung deines Fahrzeugs erkennen kannst(Stichwort E-Kompass) solltest du dir zu Verständniszwecken erst einmal die Position und Fahrtrichtung deines Fahrzeugs zur Zielstrecke grafisch darstellen lassen und selber per Hand die Auslenkung steuern um ein Gefühl zu bekommen was der beste Weg ist und dann das Geometrietafelwerk aus der Schule zur Hilfe ziehen :P

Kann sein dass es schon fertige algorithmen dafür gibt, aber wo wäre da der Spaß wenn man es nicht selber bastelt

spunky9003
03.02.2017, 10:53
das Folgen der Linie ist entscheidend.

Hab mal wieder die falschen Suchbegriffe verwendet, es scheint doch recht viele offene Projekte zu geben:

https://www.google.de/search?q=source+code+gps+autopilot&ie=utf-8&oe=utf-8
https://www.google.de/search?q=simple+gps+autopilot+code&ie=utf-8&oe=utf-8

RP6conrad
05.02.2017, 08:49
Ein sehr einfaches Algoritme das gut functioniert geht wie folgt :
De senkrechte Abweichung nimmst du als Mass für eine extra Winkel-correctur. Beispiel :
Winkelcorrectur = Seitliche Abweichung*Verstaerkings-factor. Diesen Wert muss dann noch limitiert werden, ich verwende dort max correctur zwischen +/- 25°.
Damit bekommen sie immer eine kleinere correctur bei kleinere seitliche Abweichung. Ich habe das gestern noch versucht mit meine GPS-car, und es functioniert gut. Nur soll die Verstaerkungs-factor abhangig sein von Geschwindigkeit. Bei hohere Geschwindigkeit haben sie mehr "Overshoot".


breedte=(waypoint[track_point_nr].latitude-gps.latitude)*111000;// 1 breedtegraad = 111 km, richting Noord = +
lengte=(waypoint[track_point_nr].longitude-gps.longitude)*68400; // 1 lengtegraad = 68,4 km, richting Oost = +
hoek=atan2(lengte,breedte)*1800/PI;//in deze richting moet gereden worden voor het volgende trackpoint !
//afstand + dwarsafwijking berekenen tov waypoint /ideale koers
afstand=sqrt(lengte*lengte+breedte*breedte);
offset_course=sin((waypoint[track_point_nr].heading-hoek)*PI/180)*afstand*75;//p-gain=75
offset_course=min_max((int)(offset_course),-25,25);//beperken tussen +/-25°


https://www.youtube.com/watch?v=yMbmp7c2mrw

morob
05.02.2017, 21:14
ich verwende ein gps bibliothek, die sagt mir den winkel zum ziel

TinyGPS++

Ceos
06.02.2017, 06:02
winkel zum ziel ist aber nicht relevant, es geht um 2 Punkte die eine Linie bilden udn dieser Linie möglichst exakt zu folgen. Selbst wenn man die Line in mehrere Punkte unterteilen würde, wäre es nutzlos, weil die Bibliothek nur den Winkel aus der Fahrtrichtung ableitet und nicht exakt bestimmt! Die Fehlerquote bei dem Maßstab ist viel zu extrem und liefert unmögliche Ergebnisse in dem Fall.

spunky9003
19.02.2017, 13:23
ich habe mich nochmal umgeschaut, viele benutzen zusätzlich einen digitalen Magnetkompass. Ich kenne die Teile nur vom Smartphone und hier sind die extrem ungenau und pendeln stark hin und her und man muss sie umständlich kalibrieren (3x rotieren um alle drei Achsen). Unterscheiden die sich deutlich zum HMC5883, muss der nicht kalibriert werden, arbeitet der genau?

Unregistriert
19.02.2017, 16:00
der ist genau so, mind. 20cm vom Regler und Motor entfernt anbauen.
Kalibrierung ist auch notwendig.

morob65

Ceos
20.02.2017, 05:59
der ist genau so, mind. 20cm vom Regler und Motor entfernt anbauen.
Kalibrierung ist auch notwendig.

morob65

abhängig von der Motorgröße natürlich :) beim Asuro haben 2-3cm (auf der Batteriebox) gereicht, der Effekt der Träger im Fußboden vom Zimmer war schlimmer

Kalibrierung ist empfehlenswert und eine einmalige Sache, rotieren brauchen die in der Regel nicht, es reicht meistens ein Pendeln um 90°

spunky9003
20.02.2017, 11:23
achso, es soll hier kein Spielzeug in einem Zimmer gelenkt werden, das nur als Info :D

Ceos
20.02.2017, 11:47
okay ich wollte mit meiner Aussage den Einfluss der Störgröße relativieren

wenn das Gerät nicht gedreht werden kann, wie wäre es mit einer drehbaren Aufhängung für den Sensor? oder abnehmbar machen zum kalibirieren :)