Hallo zusammen,
ein paar Freunde und ich habe die letzten Wochen ein kleines Solarboot gebaut. Dieses Boot besitzt einen GPS-Empfänger und 2 Motoren (Zum Lenken läuft einer der beiden Motoren rückwärts).
Unser Boot soll ein paar GPS-Koordinaten in einer Liste zur Verfügung gestellt bekommen und diese Koordinaten dann autonom abfahren.
Nun muss ich eine Funktion schreiben, welche mit dem Input von 3 Koordinaten sagen kann, ob das Boot geradeaus, links oder rechts weiterfahren soll.
Die ersten beiden Koordinaten sind die aktuelle Postion plus die Position kurz davor. Damit lässt sich die Richtung ausrechnen, in der das Boot gerade fährt. Die 3. Koordinate ist das Ziel.
Ich bin bereits seit 2 Stunden am grübeln, wie ich ausrechnen kann, in welche Richtung das Boot weiterfahren muss. Leider komme ich auf keinen grünen Zweig.. vielleicht denke viel zu kompliziert.
Ich hoffe ihr könnt mir weiterhelfen - danke!
Gruß Dennis
Hallo
Du hast doch X und Y Koordinaten, damit kannst du dir 2 Dreiecke berechnen, eines das du gerade gefahren hast und eines welches du fahren willst, nun berechneste du den Winkel z.B. zur X Achse, wenn die nicht gleich sind musst du lenken, dafür solltest du natürlich wissen welche drehrate du mit welcher lenk zeit bekommst, oder dich einfach rann tasten, wenn du nur ganz wenig lenkst müsstest du dich eigntlich langsam an den soll Winkel ranarbeiten, wenn die Strecke noch lang genug ist.
Hallo Daniel83,
das verstehe ich nicht. Ich habe ja nur 3 Koordinaten, wie mach ich dann 2 Dreiecke daraus. Bzw. welche beiden Dreiecke und welchen Winkel meinst du genau?
Gruß Dennis
Hallo dennisspohr,
vielleicht denke viel zu kompliziert.
dass kann schon sein 😃 denn den Winkel, den das Boot fährt, bekommst du mit Math.Atan2 (x2-x1, y1-y2) und den, den es steuern sol,l mit Math.Atan2 (x3-x2, y3-y2).
herbivore
Das ist aber relativ ungenau (für kurze Distanzen halbwegs ok, aber du betrachtest die Erde als flach).
Besser geeignet sind diese Formeln http://williams.best.vwh.net/avform.htm
Die werden u.A. für die Luftfahrt angewendet und sind dementsprechend genauer (dort ist die Erde eine Kugel, also auch nicht 100% genau)
**:::
Hallo marcom,
Das ist aber relativ ungenau (für kurze Distanzen halbwegs ok, aber du betrachtest die Erde als flach).
was meinst du denn, was so ein Solar-Modellboot für einen Aktionsradius hat? Dein Einwand, der natürlich vom Grundsatz her nicht falsch ist, in diesem Thread zu bringen, halte ich für unpassend, denn hier ist ja klar, dass es um kurze Distanzen geht. Im Kontext dieses Threads sind die verlinkten Formeln daher nicht besser. Das ist so, als wenn du Einstein statt Newton verwendest, wenn du ausrechenden willst, wie schnell du bist, wenn du in einem 100km/h schnellen Zug mit 5km/h nach vorne läufst.
herbivore
Jupp, was ich auch geschrieben hatte.
Nur, wenn man es gerade sowieso zum ersten Mal implementiert, wieso nicht gleich richtig?
Ob man jetzt
distance = acos(sin(la1)*sin(la2)+cos(la1)*cos(la2)*cos(lo1-lo2))
oder
distance = 2*asin(sqrt((sin((la1-la2)/2))^2 + cos(la1)cos(la2)(sin((lo1-lo2)/2))^2))
implementiert, ist doch von der Komplexität her egal, nur ist erstere Formel eben genauer. Das war auch der Kern meiner Aussage 😉