Matteproblem

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Frippe
Inlägg: 248
Blev medlem: 5 augusti 2004, 11:17:52
Skype: Fred_nord
Ort: Landvetter
Kontakt:

Matteproblem

Inlägg av Frippe »

Hej på er alla smarta snillen.
Jag håller på med ett litet projekt för en sjökortssimulator.
Jag själv är ju aktiv inom sjöräddningen i Sverige och har på min station fått en förfrågan om jag inte kan göra en simulatorstation där vi kan öva sök och samband.
Min tanke är att ha en liten låda med en PIC16F877A, knappsats samt en LCD för att kunna ange positioner på olika fartyg enl. AIS systemet, dvs. Fartygs ID, position, kurs, fart m.m.
Sedan skall jag köra över datan från simulatorenheten via en serieport till ett sjökortsprogram i en PC (Liknande NMEA protokollet)

Meningen är att man skall ange ett fartygsid och startposition och sedan kunna ställa in fart samt kurs och då skall PIC räkna ut en ny position en gång varannan sekund.
Men hur räknar jag ut positionen?

Just det ja.... (jag skäms nästan för att säga det, :oops: jag kör picbasic :cry: )

// Fredrik
matseng
Inlägg: 2360
Blev medlem: 16 september 2003, 17:18:13
Ort: Dubai, United Arab Emirates
Kontakt:

Inlägg av matseng »

Hoppas att picbasic har cos() och sin()-funktioner eftersom du kommer att behövs dessa för att räkna om från en vinkel och hastighet till delta-X och delta-Y (diff i latitud/longitud).
Användarvisningsbild
Frippe
Inlägg: 248
Blev medlem: 5 augusti 2004, 11:17:52
Skype: Fred_nord
Ort: Landvetter
Kontakt:

Inlägg av Frippe »

Man får tacka för ett snabbt svar.
Jo då, picbasic har cos() och sin()-funktioner, men jag är ju inget mattesnille tyvärr :cry:
matseng
Inlägg: 2360
Blev medlem: 16 september 2003, 17:18:13
Ort: Dubai, United Arab Emirates
Kontakt:

Inlägg av matseng »

Som ingångsvärden har du ju X och Y -koordinater och hastighet (m/s) och vinkel (grader 0-359).

Om du utför detta en gång per sekund och mäter hastigheten i meter per sekund så kommer Xändring och Yändring att att innehålla det antal meter som båten har flyttat sig under den sekunden.

Xändring = Hastighet * COS( (Vinkel * PI) / 180)
Yändring = Hastighet * SIN( (Vinkel * PI) / 180)

Sedan så får du konvertera latitud och longitud till en meterposition räknat från lat 0 lon 0. Lägga på ändringarna och konvertera tillbaka till riktig latitud och longitud igen.
Användarvisningsbild
Frippe
Inlägg: 248
Blev medlem: 5 augusti 2004, 11:17:52
Skype: Fred_nord
Ort: Landvetter
Kontakt:

Inlägg av Frippe »

Man tackar för svaret. Nu skall jag bara sätta mig o kolla på en bra funktion för att konvertera llatitud och longitud till meterposition och få till en bra räknare för att hålla koll på tiden.
Jag misstänker jag måste sätta mig in i hur interrupts funkar.
:?
(Det är nu det roliga börjar)
// Fredrik
Användarvisningsbild
$tiff
Inlägg: 4941
Blev medlem: 31 maj 2003, 19:47:52
Ort: Göteborg
Kontakt:

Inlägg av $tiff »

för att göra saken änn jobbigare så är cos/sin i PICBasic angivet i "B-RAD". dv.s. löper från -128 till 127 radianer. Därför måste man konvertera grader till "b-rads" också.

De trigonometriska funktionerna lär väl sluka en hel del minne, eftersom de är uppbyggda av maffiga tabeller, eller har jag fel här?
Användarvisningsbild
MicaelKarlsson
Inlägg: 4669
Blev medlem: 18 juni 2004, 09:16:07
Ort: Aneby
Kontakt:

Inlägg av MicaelKarlsson »

$tiff>> Vad sägs om Taylor-serier? (fast då har man säkert andra fallgropar att ramla i :D )
Henkan
Inlägg: 5
Blev medlem: 4 december 2003, 18:00:37
Ort: Vasa

Inlägg av Henkan »

Observera att 0 grader är mot norr inte mot öster, antar jag...
Detta ger att sin byts mot cos och tvärtom, se ex nedan.

X,Y = aktuell position (meter)
H = hastighet (m/s)
K_gra = kurs (0-360 grader där 0/360 är mot norr, 90 mot öster, 180 mot söder och 270 mot väster)

distans = H*2 (2 = varannan sekund)
K_rad = K_gra*pi/180 (sin och cos anges oftast i radianer)
X = X + sin(K_rad)*distans (ny X position)
Y = Y + cos(K_rad)*distans (ny Y position)
danei
EF Sponsor
Inlägg: 26423
Blev medlem: 2 juni 2003, 14:21:34
Ort: Östergötland
Kontakt:

Inlägg av danei »

De här beräkningarna stämmer bara om du är på ekvatorn. Det går att fixa till med en konstan så att det stämmer hyfsat även på andra platser. Men då bara omkring den position som man har kompenserat för.
matseng
Inlägg: 2360
Blev medlem: 16 september 2003, 17:18:13
Ort: Dubai, United Arab Emirates
Kontakt:

Inlägg av matseng »

Så varför detta? Tänker du på att jorden inte är perfekt sfärisk?
danei
EF Sponsor
Inlägg: 26423
Blev medlem: 2 juni 2003, 14:21:34
Ort: Östergötland
Kontakt:

Inlägg av danei »

Nä. Vad jag menar är att jorden inte är platt. Mer än lokalt sett. Så det går att få det att funka lokalt.
matseng
Inlägg: 2360
Blev medlem: 16 september 2003, 17:18:13
Ort: Dubai, United Arab Emirates
Kontakt:

Inlägg av matseng »

Varför blir det då olika kompenseringar beroende på vad man befinner sig?
danei
EF Sponsor
Inlägg: 26423
Blev medlem: 2 juni 2003, 14:21:34
Ort: Östergötland
Kontakt:

Inlägg av danei »

Därför att rutnätet på en jordglob inte har fyrkantiga rutor mer än vid ekvatorn.

Förflyttar man sig en grad åt väster är det olika långt beroende på om man är vid ekvatorn eller i sverige.
matseng
Inlägg: 2360
Blev medlem: 16 september 2003, 17:18:13
Ort: Dubai, United Arab Emirates
Kontakt:

Inlägg av matseng »

!!! Citat Lorry: 'Att jag inte tänkte på det!'

Här är någon som haft typ samma problem och frågat på Experts-Exchange. Det kan vara en bra punkt att börja gräva utifrån.
http://www.experts-exchange.com/Miscell ... 64650.html
Användarvisningsbild
Frippe
Inlägg: 248
Blev medlem: 5 augusti 2004, 11:17:52
Skype: Fred_nord
Ort: Landvetter
Kontakt:

Inlägg av Frippe »

Detta var ju inte det enklaste ju.
Skickar en liten länk.
Där står att det inte går att omvandla mellan olika format. Så detta projektet är det noga bara att lägga ner tyvärr.
Skriv svar