PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Winkel zum Ziel berechnen??? I dreh durch *g*



Sommer
26.03.2005, 23:58
Hi Leuts,

also neues thema *g*

Ich habe zwei Koordinaten z.B 48°15'10''5 / 12°12'11''2
mein ziel ist in z.B------------> 48°15'05''0 / 12°10'00''0

was habe ich nun für einen Winkel zum Ziel????

Bei mir kommt immer ein etwas kleiner wert raus :-)

Mein Code sieht momentan so aus.
acos und rad2deg sind in Funktionen drinn die stimmen !!!
------------------------------------------------------------------------------------
Dim theta, dist, distance, deg

'Dezimal Umrechnung
Lat1 = Text1.Text + (Text2.Text / 60) + (Text3.Text / 3600)
Lon1 = Text4.Text + (Text5.Text / 60) + (Text6.Text / 3600)

Lat2 = Text7.Text + (Text8.Text / 60) + (Text9.Text / 3600)
Lon2 = Text10.Text + (Text11.Text / 60) + (Text12.Text / 3600)

'----------------------------------------------------------------------

theta = Lon1 - Lon2
dist = Sin((Lat1)) * Sin((Lat2)) + Cos((Lat1)) * Cos((Lat2)) * Cos(theta)

'Entfernungsberechnung
dist = acos(dist)
dist = rad2deg(dist)
deg = Format(dist, "0")
distance = Format((dist * 60 * 1.1515) * 1.609344, "0.00000")


Text14.Text = deg
Text13.Text = distance

------------------------------------------------------------------------------------

Ich will eigentlich nur den Winkel zu meinen Ziel haben (gehe 320° dann kommst du zum Ziel *g*)


Kann mir da jemand helfen???

Bitte: wenn es geht mit einen Beispiel

Dank an ALLE by Ulli

Wolferl
27.03.2005, 09:53
Evtl. verstehe ich deine Angaben jetzt auch falsch, aber Falls nicht: Du hast oben zwei Koordinaten (Länge + Breite). Du kannst deren Abstand zueinander berechnen, oder den Winkel den sie bzgl. einer Referenzachse einnehmen.
Den Winkel für den Bot kannst du daraus aber nicht errechnen, ausser der hat einen Kompass.

27.03.2005, 10:36
Hi,

ich will nur den Winekl errechen dien ich zum Ziel benötige, den Winkel des Bots bestimme ich mit einen Kompass und den Daten des GPS wenn er fährt das geht ja auch *g* aber ich komme nicht drauf welchen Zielwinkel ich benötige.


by Ulli

eFFex
27.03.2005, 11:03
dann rechne doch Entfernungsdifferenzen in "x" und "y" - Achse aus, daraus kannste du dann mit primitiv-trigonometrie den winkel errechnen. Dabei ignorierst du zwar, dass die erde eine Kugel ist, aber das ging ja schon früher ein paar Tausend Jahre gut *g*

Sommer
27.03.2005, 13:49
Hi,

kannst du mir mal ein Beispiel schicken ?

Danke Ulli

eFFex
27.03.2005, 14:51
in unseren Breitengraden entspricht ein Breitengrad ja in etwa 115 Kilometer, Längengrad weiß ich grad nicht, aber kannst ja mit nem Atlas abschätzen.
dann rechnest du die Differenz der Breitengrade aus und die Differenz der Längengrade und hast denn ein rechtwinkliges Dreieck.
mit deinen Werten:
Start 48°15'10''5 / 12°12'11''2
Ziel 48°15'05''0 / 12°10'00''0
differenz: 5''5 / 2'11''2
Dann schätzt du die Länge der Differenz ab und erhältst dann ja kilometerangaben (hier nur als Beispiel eine minute: 1 km)
=> etwa 3/12 km und 2 1/6 km
es gilt tan = Gegen/ankathete (oder wars andersum?)
dann erhältst du den winkel zwischen roboter-nordpol und ziel...
warte einen Moment, ich mals dir kurz auf...

eFFex
27.03.2005, 15:05
also hier das Bild:
Ich hab deinen Primärbeitrag nicht so aufmerksam gelesen und ich glaub (vom kurzen Überfliegen), dass das mathematisch schon passt, nur eben dein Programm nciht das macht, was es soll...
Naja, vlt haben meine Beiträge geholfen *g*

Sommer
27.03.2005, 17:00
Hi,

also bin gerade mit den Taschenrechner im Garten unterwegs :-)

so mach i es ja schon blos was mach i bei differenz 0 Also wenn ich mich genau im Norden / Osten / Süden/Westen befinde????

Momentan rechne ich das ganze um

Also (Grad + (minuten/60) + (sec. / 3600) für Pos. und Ziel

danch ziehe ich das ganze ab :

difflat = Lat1 - Lat2
difflon = Lon1 - Lon2

Winkelformel laut Buch:

difflon
------- sin-1 wenn Wert kleiner 0
difflat

difflon
------- tan-1 wenn Wert größer 0
difflat


Aber da passt was net :-)

Wie würdest du es in einen Programm schreiben???

Danke für deine Hilfe

by Ulli

eFFex
27.03.2005, 17:47
okok ... hab jetzt mal n bisschen rumgekritzelt und kam zu folgendem Pseudocode:


function winkel(diffx,diffy)
if (diffy = 0)
if (diffx > 0) return 90
else if (diffx < 0) return 270
else return "was weiß ich" (wir sind schon da)
winkel = arctan(diffx/diffy)
if (diffy < 0) winkel = winkel + 180
winkel = winkel mod 360
return winkel

dann sollte man einen schönen winkel aus [0,360] haben, der auch stimmt.

Sommer
27.03.2005, 18:33
Hi also entweder is bin zublöd :-) oder...


function winkel(diffx,diffy)
if (diffy = 0)
if (diffx > 0) return 90
else if (diffx < 0) return 270
else return "was weiß ich" (wir sind schon da)
winkel = arctan(diffx/diffy)
if (diffy < 0) winkel = winkel + 180
winkel = winkel mod 360
return winkel

also so kann ich die Funtion nicht in VB6 verwenden

if (diffy = 0) ; sagt mir nix
if (diffx > 0 ) return 90 ; ist diffx > 0 = winkel 90
else if (diffx < 0) return 270 ; oder ist diffix <0 = winkel 270
else return ; gib den wert zurück???
winkel = arctan(diffx/diffy) ; winkel ausrechnen
if (diffy < 0) winkel = winkel +180 ; ist diffyy <0 dann winkel + 180
winkel = winkel mod 360; gib den rest zurück + winkel
return winkel ; gib winkel zurück????


Versteh ich das richtig?????

Muss des jetzt mal umbasteln :-)

Also deins sieht aus wie C++, oder?

Aber vielen Dank für deine Unterstützung

By Ulli

eFFex
27.03.2005, 19:08
das ist pseudocode, also im prinzip "sprachlos" *g*
musst nur aufpassen, dass du die ifs so schachtelst wie im code oben durch die einrückung geschehen, dann sollte das klappen...
wenns nich klappt, wurschdel ich dirs auch in vb um

eFFex
27.03.2005, 19:27
also wenn diffy ist (ziel links oder rechts) dann schauen ob diffx größer 0 (winkel von 90 grad zurückgeben (returnen)), wenn diffx kleiner 0 (winkel von 270 grad returnen), sonst (also diffx = 0) ist man schon da und muss eben einen Fehler oder so zurückliefern.
dann eben winkel ausrechnen (weiter oben haben wir ja schon abgefangen, dass diffy = 0, deshalb können wir bedenkenlos dadurch teilen)
nun noch, wenn objekt hinter uns (diffy <0) 180 Grad addieren dass es passt, dann irgendwelche negativen Zahlen "wegmodulieren" =)
=> Winkel in [0,360] und dann zurückgeben.
fertig....

Sommer
27.03.2005, 20:00
Hi,

also find des echt toll von dir das du da so mitmachst, ein SUPER DANKE

Mein Code momentan, da ich den deinen nicht hinbekommen hab :-(
bin halt doch noch nicht so fit in VB wie ich dachte oder eher in Mathe!


Private Sub Command1_Click()

Dim difflat, difflon, sina, cosa, winkelR, alf, diff, radi


'Dezimal Umrechnung
Lat1 = Text1.Text + (Text2.Text / 60) + (Text3.Text / 3600)
Lon1 = Text4.Text + (Text5.Text / 60) + (Text6.Text / 3600)

Lat2 = Text7.Text + (Text8.Text / 60) + (Text9.Text / 3600)
Lon2 = Text10.Text + (Text11.Text / 60) + (Text12.Text / 3600)

'----------------------------------------------------------------------

difflat = Lat1 - Lat2
difflon = Lon1 - Lon2
Label20.Caption = "difflat :" & difflat
Label21.Caption = "difflon :" & difflon
'----------------------------------------------------------------------
radi = Sqr(difflat ^ 2 + difflon ^ 2)
sina = (difflat / radi)
cosa = difflon / radi
If sina And cosa = 0 Then Exit Sub
alf = Abs(Atn(sina / cosa))
winkelR = alf


If difflat < 0 And difflon < 0 Then winkelR = pi + winkelR
If difflat >= 0 And difflon < 0 Then winkelR = pi - winkelR
If difflat < 0 And difflon >= 0 Then winkelR = 2 * pi - winkelR


Dim test
test = ((180 / pi) * winkelR)

Text14.Text = test]




Rechnungen zeigen nicht immer den richtigen Wert!

immer wenns zwischen nord und west und west und süd liegt ???

by Ulli

eFFex
27.03.2005, 22:09
kann es sein, dass das recht wenig mit meinem code zu tun hat?
hab jetzt grade keine Nerven miczh da reinzudenken, aber wie wärs du versuchst mal testweise meinen Code zu verwenden/übersetzen

Sommer
27.03.2005, 23:54
Hab mit deine Code jetzt rumexperimentiert :-)

Komm aber ihrgenwie net drauf *grrrr*

Werd mal ins Bett gehn und nochmal ne nacht drüber schlafen....

Kannst du aber trotzdem die Funktion in VB übersetzten, Büdde

Danke und gut´s Nächtlé

eFFex
28.03.2005, 00:00
sorry, weder Zeit noch nerven, aber probiers doch einfach ma und post dann was klappt bzw. was nicht klappt

Sommer
28.03.2005, 12:15
Hi,

naja kann ich verstehen :-)

ich werd noch mal bissl probieren...

Das Problem ist wie ich merke wenn er von nen stupfen in nen überstumpfen Winkel geht...

by Ulli

Sommer
28.03.2005, 17:34
Hi,

habs nun entlich hinbekommen :- ) :-) :-)

Also ich hab jetzt die ganzen Winkel fest definiert und nur di ehalbwinkel berechnet und denjeweiligen ganzen Winkel dazu gerechnet b.z.w abgezogen je nach Richtung von Norden aus.

Und sie da war jetzt 2Std. im Garten und hab gut xxx Positionen getestet
und ich treffe auf etwa 0,5m +- genau.

Nächster Schritt ist jetzt mal die Motoren meines Heimüberwachungs Roboters (Alarm-Roboter) anzusteuern über das Programm damit er zu
dieser Position geht :-)

Weiteres gibts dann wieder unter Heimüberwachungs Roboter

by Ulli

Nochmals Danke für die Hilfe
---------------------------------

Sommer
28.03.2005, 21:02
Hi,

hier noch ein Bild von der Software zum Testen des GPS.

http://img64.exs.cx/img64/773/robbygps5fe.jpg (http://www.imageshack.us)

by Ulli

pinguin
28.05.2005, 23:30
@Sommer

nett die Software.

Darf ich mal fragen welches GPS Modul du verwendest?

gruss
pinguin

Sommer
29.05.2005, 21:38
Hi,

Danke :-) ist nur die TESTSOFTWARE !

Momentan hab ich ne Royaltek und eine Navilook "Maus" im Einsatz

also recht günsige Module..

By Ulli

30.05.2005, 17:38
@Sommer

Interessant, habe gedacht dass die Module nicht gerade genau sind. Mein letzter Stand war 1 - 3 m genau. Wie sieht es den bei dir aus? Ich nehme an das die GPS Daten Auswertung auf dem PC geschieht. Wie kommen den die Daten zum PC, per Funk, bluetooth?

Ah ja und welches verwendest du den genau ... und wozu die Maus dann noch. Wäre nett wenn du mich mal aufklären könntest!

gruss
pinguin

31.05.2005, 06:31
Hi,


433Mhz 433Mhz
GPS-Daten -------- > PC (Auswertung) ---------> Roboter

Navilock Conrad BN: 989796 / NL203P

Das ganze geht recht gut die 3m bekommst man nur bei Reflekionen zusammen, das weiteste waren jetzt etwa 2m was er zuweit gefahren ist.... b.z. zuvor stehen geblieben ist....

Damit kann man leben und i hab da schon noch Ideen wie man das mit diesen günstigen "Mäusen" genauer machen kann....

PS: Die Empfänger in den PDA´s und Mäusen und auch die Handheld Outdoor GPS Geräte verwenden in der Regel alle den gleichen Empfänger von SiRf :-)

Die neue Generation der Module wäre jedoch sehr Interessant SiRf III

By Ulli