GPS-kurs mjukvaru-dämpning, AVR assembler
GPS-kurs mjukvaru-dämpning, AVR assembler
Jag tar emot kurs(0-359 grader) från en GPS-sensor(GobalSat EM-411) till min Atmega 48. Jag ska använda den till segelbåten som bara gör mellan 2-5 knop. I och med den låga hastigheten så blir kurs-data från GPS:en ganska lynnigt och pendlar ca 10 grader åt varje håll(har testat genom att köra spikrakt med bilen i olika hastigheter).
Det jag vill göra är någon form av dämpning så att kurs-angivelsen blir stabilare.
Min ide:
Sätta ett timer-avbrott ca 1-2 ggr i sekunden som läser av kursen och lägger det till en av 11 st variabler(tex 11 st 16-bits variabler i SRAM). Det äldsta värdet byts hela tiden ut mot det nykomna värdet.
Sedan(kanske i samma avbrottsrutin) så kontrolleras vilka av de 11 värdena som är lika eller högre resp. lägre än 180. Då får man två "högar" av värden och den "hög" som det finns flest värden(6-11 st) i används såhär:
Ta bort de två högsta och de två lägsta. Lägg ihop resten av värdena och dela med deras antal = Kursen
Ja, jag ser ju själv problem med detta. Kursen runt 0 och 180 blir ju alltid avrundad lite fel åt något håll. Dock borde dämpningen fungera hyfsat på andra kurser(där alla värden hamnar över eller under 180) och uppdateringen blir ju 1-2 ggr i sekunden, lika ofta som timer-avbrottet. Dock tror jag att GPS-strängen kommer ca 1 gång i sekunden så att köra timer-avbrottet oftare kanske är hämmande för precisionen då samma kurs-värde kommer "fångas" flera gånger.
Ett alternativ skulle ju vara att ta gps-kordinaterna med ca 5-10 sekunder intervall och "räkna ut" kursen, vilket jag av erfarenhet vet är ganska bökigt. Då jag även vill dämpa hastighets-värdet(som ju också pendlar rejält vid låga farter) och egentligen inte behöver uppdatering oftare än ca 6-10 ggr i minuten så känns det ju som att detta skulle vara den metod som skulle ge bäst precision.
Attans! Jag kom på att jag borde kolla i databladet till GPS-sensorn om det går att ändra uppdaterings-intervallen. För det måste väll vara själva sensorn som utifrån koordinaterna räknar ut kurs och fart? Då gör ju den redan jobbet men för ofta. Ska kolla snarast men eftersom jag skrivit alltihop är det lika bra att slänga ut frågan ändå.
Finns det någon enklare lösning än mina funderingar(det gör det alltid)?
Någon som vet om det går att ändra uppdaterings-intervall för fart och kurs på GlobalSat EM-411? Eller annan GPS-sensor(jag kan köpa en annan om det finns en som är mer lämpad)?
Det jag vill göra är någon form av dämpning så att kurs-angivelsen blir stabilare.
Min ide:
Sätta ett timer-avbrott ca 1-2 ggr i sekunden som läser av kursen och lägger det till en av 11 st variabler(tex 11 st 16-bits variabler i SRAM). Det äldsta värdet byts hela tiden ut mot det nykomna värdet.
Sedan(kanske i samma avbrottsrutin) så kontrolleras vilka av de 11 värdena som är lika eller högre resp. lägre än 180. Då får man två "högar" av värden och den "hög" som det finns flest värden(6-11 st) i används såhär:
Ta bort de två högsta och de två lägsta. Lägg ihop resten av värdena och dela med deras antal = Kursen
Ja, jag ser ju själv problem med detta. Kursen runt 0 och 180 blir ju alltid avrundad lite fel åt något håll. Dock borde dämpningen fungera hyfsat på andra kurser(där alla värden hamnar över eller under 180) och uppdateringen blir ju 1-2 ggr i sekunden, lika ofta som timer-avbrottet. Dock tror jag att GPS-strängen kommer ca 1 gång i sekunden så att köra timer-avbrottet oftare kanske är hämmande för precisionen då samma kurs-värde kommer "fångas" flera gånger.
Ett alternativ skulle ju vara att ta gps-kordinaterna med ca 5-10 sekunder intervall och "räkna ut" kursen, vilket jag av erfarenhet vet är ganska bökigt. Då jag även vill dämpa hastighets-värdet(som ju också pendlar rejält vid låga farter) och egentligen inte behöver uppdatering oftare än ca 6-10 ggr i minuten så känns det ju som att detta skulle vara den metod som skulle ge bäst precision.
Attans! Jag kom på att jag borde kolla i databladet till GPS-sensorn om det går att ändra uppdaterings-intervallen. För det måste väll vara själva sensorn som utifrån koordinaterna räknar ut kurs och fart? Då gör ju den redan jobbet men för ofta. Ska kolla snarast men eftersom jag skrivit alltihop är det lika bra att slänga ut frågan ändå.
Finns det någon enklare lösning än mina funderingar(det gör det alltid)?
Någon som vet om det går att ändra uppdaterings-intervall för fart och kurs på GlobalSat EM-411? Eller annan GPS-sensor(jag kan köpa en annan om det finns en som är mer lämpad)?
Re: GPS-kurs mjukvaru-dämpning, AVR assembler
Nu har jag inte riktigt fattat hur ofta du vill uppdatera kursen, men det låter spontant som du behöver ett digitalt filter.
Det optimala är kanske att Kalman filter, mem det introducerar en viss del matematik.
Jag tycker du skall börja med att testa föjande som är betydligt enklare:
- Läs in kursen i en tabell om exempelvis 500 variabler (kan behöva justeras beroende på hur fort du läser och utläser kursen).
- Gällande kurs är summan av tabellen delat med 500 (dvs. snittet)
- Vi varje ny läsning pilla in värdet överst i tabellen och låt det undre (älsta) rammla ut.
Det optimala är kanske att Kalman filter, mem det introducerar en viss del matematik.
Jag tycker du skall börja med att testa föjande som är betydligt enklare:
- Läs in kursen i en tabell om exempelvis 500 variabler (kan behöva justeras beroende på hur fort du läser och utläser kursen).
- Gällande kurs är summan av tabellen delat med 500 (dvs. snittet)
- Vi varje ny läsning pilla in värdet överst i tabellen och låt det undre (älsta) rammla ut.
Re: GPS-kurs mjukvaru-dämpning, AVR assembler
Jag får ju en kurs ca 1 gång i sekunden från sensorn. Men den kan pendla rejält när man kör sakta(fast man kör rakt).
Blir det inte såhär med ditt exempel(som fungerar för övrigt):
Om man ligger på kurs 0 så blir hälften av värdena ca 0-10 grader och hälften ca 350-359. Då blir genomsnittet typ 180 vilket är åt fel håll.
Blir det inte såhär med ditt exempel(som fungerar för övrigt):
Om man ligger på kurs 0 så blir hälften av värdena ca 0-10 grader och hälften ca 350-359. Då blir genomsnittet typ 180 vilket är åt fel håll.
Re: GPS-kurs mjukvaru-dämpning, AVR assembler
Plotta GPS-riktningarna på ett papper och dra ett rakt streck som visar den verkliga kompasskursen så ser du hur du skall lösa problemet med lite matematik.
Re: GPS-kurs mjukvaru-dämpning, AVR assembler
Blir noggrannheten på koordinatrena sämre om du kör sakta?
Är det AVR:en eller GPS:en som beräknar kursen.
Att köra fort borde ju innebära att koordinaterna blir något sämre i noggrannhet samt att avståndet mellan dem blir längre.
Kan du inte simulera detta genom att t.ex. bara använda var 10:e uppmätt koordinat och beräkna kurs efter detta?
Är det AVR:en eller GPS:en som beräknar kursen.
Att köra fort borde ju innebära att koordinaterna blir något sämre i noggrannhet samt att avståndet mellan dem blir längre.
Kan du inte simulera detta genom att t.ex. bara använda var 10:e uppmätt koordinat och beräkna kurs efter detta?
Re: GPS-kurs mjukvaru-dämpning, AVR assembler
ni kan få köpa renodlade precisions kompassmoduler av mig. modellbetäckning och pris kan ni få imorrn om ni är intresserade?
Re: GPS-kurs mjukvaru-dämpning, AVR assembler
Jo lite mer matte blir det ju.Glattnos skrev:Om man ligger på kurs 0 så blir hälften av värdena ca 0-10 grader och hälften ca 350-359. Då blir genomsnittet typ 180 vilket är åt fel håll.
Grundprincipen är att om du inte får tillräckligt mycket tillförlitliga data så har du fel sensor.
GPS förmåga att tala om kurs bygger ju på att man rör sig. Om man inte gör det tillräckligt fort så blir ju per definition riktningen mer felaktig.
Vill man ha ut exaktare rikning föreslår jag att du tittar på en magnetometer istället.
Exempelvis HMC5883L
Re: GPS-kurs mjukvaru-dämpning, AVR assembler
labmaster: Nu förstod jag inte riktigt vad du menade? "Plotta GPS-riktningarna" menar du "Plotta GPS-koordinaterna"?
bit96: Nä noggrannheten på koordinaterna blir inte sämre när jag kör sakta(snarare lite bättre som du säger) men det är GPS:en som räknar ut riktningen(antar jag, det är väll inte satelliterna?) och den gör det varje sekund så har man åkt en kort sträcka under den sekunden så blir det ganska dålig precision på kursen.
Att använda exempelvis var 10:e koordinat och räkna ut kursen är ju det bästa, dock lite komplicerat att räkna ut. Känns som en enklare lösning är mer lockande, men om det inte finns någon bättre så är det kanske rätt väg att gå.
polmanswe och ToPNoTCH: Är det inte så att kompassmoduler och magnetomerar visar "magnetisk kurs" och inte "rättvisande kurs". Mellan dessa kan det skilja många grader och lokalt uppåt 10 grader eller mer pga att jorden inte är en stor plastboll
Eller har jag fel?
Jag har gjort ett program som räknar ut kurs med hjälp av två koordinat-angivelser. Dock måste ett omräkningstal finnas eftersom 1 grad longitud är olika lång beroende på vilken latitud man befinner sig på. Detta har jag löst genom att sätta ett fast omräkningstal för området här hemma. Men om jag seglar söder ut då? Då måste omräkningstalet ändras hela tiden beroende på var jag är(det viktiga är vilken latitud jag är på). Ska man göra en look-up tabell då kanske? Som utifrån vilken latitud jag är på väljer lämpligt omräkningstal.
Känns krångligt, speciellt att få det att bli rätt, många snubbelgropar att falla i. Dock genomförbart men då gör man ju jobbet igen så att säga(GPS:en har ju redan räknat ut en kurs men den pendlar vid låg fart).
bit96: Nä noggrannheten på koordinaterna blir inte sämre när jag kör sakta(snarare lite bättre som du säger) men det är GPS:en som räknar ut riktningen(antar jag, det är väll inte satelliterna?) och den gör det varje sekund så har man åkt en kort sträcka under den sekunden så blir det ganska dålig precision på kursen.
Att använda exempelvis var 10:e koordinat och räkna ut kursen är ju det bästa, dock lite komplicerat att räkna ut. Känns som en enklare lösning är mer lockande, men om det inte finns någon bättre så är det kanske rätt väg att gå.
polmanswe och ToPNoTCH: Är det inte så att kompassmoduler och magnetomerar visar "magnetisk kurs" och inte "rättvisande kurs". Mellan dessa kan det skilja många grader och lokalt uppåt 10 grader eller mer pga att jorden inte är en stor plastboll

Jag har gjort ett program som räknar ut kurs med hjälp av två koordinat-angivelser. Dock måste ett omräkningstal finnas eftersom 1 grad longitud är olika lång beroende på vilken latitud man befinner sig på. Detta har jag löst genom att sätta ett fast omräkningstal för området här hemma. Men om jag seglar söder ut då? Då måste omräkningstalet ändras hela tiden beroende på var jag är(det viktiga är vilken latitud jag är på). Ska man göra en look-up tabell då kanske? Som utifrån vilken latitud jag är på väljer lämpligt omräkningstal.
Känns krångligt, speciellt att få det att bli rätt, många snubbelgropar att falla i. Dock genomförbart men då gör man ju jobbet igen så att säga(GPS:en har ju redan räknat ut en kurs men den pendlar vid låg fart).
Re: GPS-kurs mjukvaru-dämpning, AVR assembler
För att räkna ut kurs/vinkel från latitud och longitud använder du sfärisk trigonometri.
Inga omräkningstal eller lookuptabeller behövs.
Inga omräkningstal eller lookuptabeller behövs.
Re: GPS-kurs mjukvaru-dämpning, AVR assembler
Jag tänkte säga detsamma, "redan de gamla grekerna..." 
Att räkna om två positioner till en vinkel ("kurs") är ju inte direkt nytt.
Att jorden inte är perfekt rund finns det säkert vedertagna metoder
för att hantera. Jag kan inte peka på några länkar och jag tänker inte
Googla, men detta *måste* vara löst för länge sedan.
Sen så är det en annan sak att många räkneoperationer, om det är "ont
om tid", ibland kan aproximeras till tabelluppslagningar. Det är inte alls fel
om kan det göras med önskad noggranhet, och det blir ofta lite mer
förutsägbart (alltså när det gäller prestanda, tid för en beräkning).

Att räkna om två positioner till en vinkel ("kurs") är ju inte direkt nytt.
Att jorden inte är perfekt rund finns det säkert vedertagna metoder
för att hantera. Jag kan inte peka på några länkar och jag tänker inte
Googla, men detta *måste* vara löst för länge sedan.
Sen så är det en annan sak att många räkneoperationer, om det är "ont
om tid", ibland kan aproximeras till tabelluppslagningar. Det är inte alls fel
om kan det göras med önskad noggranhet, och det blir ofta lite mer
förutsägbart (alltså när det gäller prestanda, tid för en beräkning).
Re: GPS-kurs mjukvaru-dämpning, AVR assembler
Jag hade gjort det ganska enkelt: ett kompassmodul reagerar ganska snabbt och rimligt korrekt. Kombinera med GPS-kurs kan GPS-kursen "nolla" kompassmodulen som då i essens bara fungerar som inertinavigationsgivare. På det vis kan man spara riktningar i kanske 30 sekunder och räkna ut "verklig" kurs, om man svänger "skarpt" får man ta hand om den delen med kompassen men åker man rakt i t.ex. 10 sekunder eller mer kan man "nolla" kompasskursen så att evt. magnetiska avvikelser raderas ut.
Re: GPS-kurs mjukvaru-dämpning, AVR assembler
bit96: Okej, jag har för mig att jag tittade på sfärisk trigonometri förr(när jag gjorde mitt program med omräkningstal) och inte fattat hur det fungerar.
Sodjan: Nog är problemet med trigonometri "löst för länge sedan" men att förstå är ju en annan femma. Ja, för mig är det ju lättare med en look-up tabell eftersom det är det enda sätt jag förstår fullt ut men det är klart att jag vill gärna förstå hur man "räknar ut" det också. Det kan ju i flera fall bli ett bättre resultat och jag har just i denna applikation ingen "tids-press" utan får jag en kurs-angivelse som stämmer så räcker det med var 5-10 sekund.
Icecap: Men kräver inte det att man får en ganska exakt kurs-angivelse från GPS:en? Det är ju det som är problemet att jag inte har.
Jag har googlat och läst på Wikipedia om det men hittar inget konkret exempel på hur man räknar fram kursen med hjälp av endast två koordinat-angivelser. Är det så att de båda positionerna blir två punkter på samma storcirkel och att en tredje punkt borde vara den som har samma gemensam latitud med den ena positionen och gemensam longitud med den andra positionen? Men sen då?
T.ex. kursen mellan dessa:
60° 25,20'N, 17° 01,73'E
36° 05,81'N, 11° 40,71'E
Hur räknar man ut det eller en länk till nån sida där det behandlas(behandlas lite mer konkret än "bara" hur trigonometri fungerar)?
Sodjan: Nog är problemet med trigonometri "löst för länge sedan" men att förstå är ju en annan femma. Ja, för mig är det ju lättare med en look-up tabell eftersom det är det enda sätt jag förstår fullt ut men det är klart att jag vill gärna förstå hur man "räknar ut" det också. Det kan ju i flera fall bli ett bättre resultat och jag har just i denna applikation ingen "tids-press" utan får jag en kurs-angivelse som stämmer så räcker det med var 5-10 sekund.
Icecap: Men kräver inte det att man får en ganska exakt kurs-angivelse från GPS:en? Det är ju det som är problemet att jag inte har.
Jag har googlat och läst på Wikipedia om det men hittar inget konkret exempel på hur man räknar fram kursen med hjälp av endast två koordinat-angivelser. Är det så att de båda positionerna blir två punkter på samma storcirkel och att en tredje punkt borde vara den som har samma gemensam latitud med den ena positionen och gemensam longitud med den andra positionen? Men sen då?
T.ex. kursen mellan dessa:
60° 25,20'N, 17° 01,73'E
36° 05,81'N, 11° 40,71'E
Hur räknar man ut det eller en länk till nån sida där det behandlas(behandlas lite mer konkret än "bara" hur trigonometri fungerar)?
Re: GPS-kurs mjukvaru-dämpning, AVR assembler
Finns inte någon anledning att räkna ut kursen från positionen det är ju exakt det som din gps modul redan gör.
Om det inte går att ställa "trögheten" direkt i konfigureringen av gps'en är det bara medelvärdesbilda över flera kursavläsningar,
det ger lika bra resultat med enklare beräkningar.
testa med olika storlek på ringbufferten ("tabellen") som du räknar medelvärde på tills du hittar något som passar.
Långsammare fart ger längre reaktionstid.
Om det inte går att ställa "trögheten" direkt i konfigureringen av gps'en är det bara medelvärdesbilda över flera kursavläsningar,
det ger lika bra resultat med enklare beräkningar.
testa med olika storlek på ringbufferten ("tabellen") som du räknar medelvärde på tills du hittar något som passar.
Långsammare fart ger längre reaktionstid.
Re: GPS-kurs mjukvaru-dämpning, AVR assembler
Glattnos: det finns alltid en liten variation i position. Om du tar en GPS och har den stationär och loggar alla positioner den ger kommer du mycket snabbt att se att de varierar lite slumpmässigt inom ett visst område. Områdets storlek beror på kvaliteten av utrustning och mottagningsförhållanden.
Detta beror på att mätningen inte är med extrem upplösning om inte man har extrem dyr utrustning, alltså är det sånt man får leva med helt enkelt. Men med en medelvärdebildning på positionen kan man få en ganska bra positionsfix.
Och då upplösningen är lite sådär pga. "billig" utrustning blir kursen såklart också "sådär", speciellt vid låga hastigheter. Även där är medelvärdebildning svaret.
Och där kommer kompassmodulen in. Den beror enbart på magnetfälten där man är, har en bra upplösning och kan ge en bra indikering vid låga hastigheter. Detta kombinerar man sedan med den medelvärdebildade riktning och låter µC'n kompensera. Om man får positionen varje sekund och vill medelvärdebilda över t.ex. 30 mätningar tar det ju ett halvt minut innan man får ut ett resultat som duger till något, under den tiden fungerar kompassen utmärkt.
Om man då själv räknar ut kursen medelst positionen nu och positionen t.ex. 30 sekunder tillbaka kan man få en längre sträcka vilket ger en mer stadig kurs, denna integrerar man t.ex. i det mjukvara-lågpassfilter som blev lagt fram i en tråd för ett tag sedan och man har ett hyggligt värde som kan användas för att reglera evt. offset i kompassmodulen.
Om man ser till att "logga" kompassriktning samtidig som GSM-positionerna kommer kan man korrolera dessa med varandra och få ut offset även vid krånglig kurs.
Men fan om jag skulle göra det i assembler! Det blir en hel del uträkningar och det blir mycket jobb med det i assembler.
Detta beror på att mätningen inte är med extrem upplösning om inte man har extrem dyr utrustning, alltså är det sånt man får leva med helt enkelt. Men med en medelvärdebildning på positionen kan man få en ganska bra positionsfix.
Och då upplösningen är lite sådär pga. "billig" utrustning blir kursen såklart också "sådär", speciellt vid låga hastigheter. Även där är medelvärdebildning svaret.
Och där kommer kompassmodulen in. Den beror enbart på magnetfälten där man är, har en bra upplösning och kan ge en bra indikering vid låga hastigheter. Detta kombinerar man sedan med den medelvärdebildade riktning och låter µC'n kompensera. Om man får positionen varje sekund och vill medelvärdebilda över t.ex. 30 mätningar tar det ju ett halvt minut innan man får ut ett resultat som duger till något, under den tiden fungerar kompassen utmärkt.
Om man då själv räknar ut kursen medelst positionen nu och positionen t.ex. 30 sekunder tillbaka kan man få en längre sträcka vilket ger en mer stadig kurs, denna integrerar man t.ex. i det mjukvara-lågpassfilter som blev lagt fram i en tråd för ett tag sedan och man har ett hyggligt värde som kan användas för att reglera evt. offset i kompassmodulen.
Om man ser till att "logga" kompassriktning samtidig som GSM-positionerna kommer kan man korrolera dessa med varandra och få ut offset även vid krånglig kurs.
Men fan om jag skulle göra det i assembler! Det blir en hel del uträkningar och det blir mycket jobb med det i assembler.
Re: GPS-kurs mjukvaru-dämpning, AVR assembler
nifelheim: Du har rätt i att det skulle kunna duga med medelvärde i detta fall men jag har testat sensorn och blivit tveksam till om det duger att använda medelvärde pga att den räknar ut kursen för ofta(se mina tester nedan). Åker man 1 knop så finns det nog risk för att många(de flesta) lästa kurser är åt helt fel håll. Man kan naturligtvis tänka sig att de felar lika mycket år båda hållen så att medelvärdet faktiskt blir hyfsat rätt men nog är det betydligt bättre att räkna ut kurs och fart från positioner som ligger längre ifrån varann(vid 1 knop kommer man ca 0,5 meter på en sekund, vilket sensorn använder för att räkna, men på 30 sek har man kommit 15 meter).
Icecap: Jag vet att det finns en variation i positionen men jag vet också att sensorn har oerhört bra precision när det gäller två punkters förhållande till varandra som sensorn själv mätt ut(och det är ju det som ger kurs och fart). Att koordinatsystemet ligger förskjutet 20-30 meter i förhållande till verkliga positionerna inverkar ju inte så mycket på det. Sensorn räknar ut fart ock kurs för ofta för att få någon bra precision(med bra menar jag inom ca 2 grader).
Jag tror inte att man behöver ha "extremt dyr" utrustning för att få till en tillräckligt bra precision(kom ihåg att jag skrev att kursangivelsen pendlade ca 20 grader, jag är nöjd om det går att få ner till 2-4 grader) och medelvärdes-beräkning ger ganska säkert sämre resultat på kurs och fart i låga hastigheter än vad två positioner med känd tid emellan ger(lite gardering eftersom tiden mellan positionerna går att anpassa efter farten för att få tillräcklig precision).
Kompassmodul tror jag inte att jag behöver men om jag skulle haft det så skulle jag ändå inte vilja justera den efter ett medelvärde från GPS-kurserna utan istället tagit en position(GPS) och samtidigt börjat plocka värden från kompassmodulen för att efter lämplig tid i förhållande till farten ta en ny position och räkna ut kursen och samtidigt räkna ut medelvärdet från kompassmodulen för att sedan kompensera skillnaden.
Mitt test:
Efter att ha hittat ett bra tråd http://www.usglobalsat.com/forum/index.php?topic=3448.0 och laddat ner programmet så har jag fått en del mer fakta om min GPS-sensor. Med programmet kan man via serieporten på datorn enkelt ställa in alla parametrar i GPS:en, se signalstyrkor från satelliterna mm
Jag ställde "output rate" på 5 sekunder och tänkte att det skulle förbättra precisionen men det hjälpte inte, modulen ger fortfarande bara den riktning och fart den har just då och inte i förhållande till positionen den hade för 5 sek sedan. Testade för att försäkra mig om att så var fallet med att ställa om till 30 sek. Tog sensorn i bilen och körde till en raksträcka som jag vet ligger runt 270-271 grader. Jag rullade sakta på vägen tills positionen slog om, då trampade jag gasen i botten och körde ca 100 meter där det finns en parkering där jag tvärvände och sedan smög långsamt tillbaka åt andra hållet. Kom väll ca 5 meter innan positionen slog om och visade 87 grader(alltså mätte den inte från förra gången den slog om för jag befann mig ca 270 grader om den punkten). Kollade hastigheten på liknande sätt, stod still, positionen slog om, drog på och körde ca 100 meter, stannade och väntade till positionen slog om igen. Den visade 0.2 knop fast jag förflyttat mig 100 meter på 30 sek.
Slutsatsen är ju att sensorn bara räknar utifrån positioner som ligger väldigt nära varann i tiden, mindre än 1 sekund eftersom man kan uppdatera varje sekund och få en ny position. Jag har inte hittat någonstans där det går att ställa intervallet för beräkningarna.
Ni skriver ungefär: Använd sfärisk trigonometri, redan de gamla grekerna räknade ut det, gammal kunskap etc. Men kan någon räkna ut det och visa hur man gör?
T.ex. kursen mellan dessa:
60° 25,20'N, 17° 01,73'E
36° 05,81'N, 11° 40,71'E
Hur räknar man ut det? Visa formeln och hur den fungerar(jag hittar bara en massa formler som jag inte lyckats omsätta på problemet).
Edit: Icecap: Jag gjorde förra året ett program som räknade ut bäringen till en given koordinat från den plats man stod på. Det var det programmet som krävde ett omräknings-tal. Det programmet gjorde jag i assembler och det blev mycket text men var blixtsnabbt och fungerade perfekt efter att ha testat det ute. Satte jag en punkt på gräsmattan så hade jag bra och rätt bäring till den punkten om jag gick runt den med cirklar som var så små som 5 meter i diameter. Det är därför jag är så säker på att det GÅR att lösa problemet jag har nu. Dock sitter jag fast i att jag inte förstår HUR man räknar ut kursen på annat sätt än med omräkningstal. Jag är mycket tacksam för all er hjälp här på forumet
Icecap: Jag vet att det finns en variation i positionen men jag vet också att sensorn har oerhört bra precision när det gäller två punkters förhållande till varandra som sensorn själv mätt ut(och det är ju det som ger kurs och fart). Att koordinatsystemet ligger förskjutet 20-30 meter i förhållande till verkliga positionerna inverkar ju inte så mycket på det. Sensorn räknar ut fart ock kurs för ofta för att få någon bra precision(med bra menar jag inom ca 2 grader).
Jag tror inte att man behöver ha "extremt dyr" utrustning för att få till en tillräckligt bra precision(kom ihåg att jag skrev att kursangivelsen pendlade ca 20 grader, jag är nöjd om det går att få ner till 2-4 grader) och medelvärdes-beräkning ger ganska säkert sämre resultat på kurs och fart i låga hastigheter än vad två positioner med känd tid emellan ger(lite gardering eftersom tiden mellan positionerna går att anpassa efter farten för att få tillräcklig precision).
Kompassmodul tror jag inte att jag behöver men om jag skulle haft det så skulle jag ändå inte vilja justera den efter ett medelvärde från GPS-kurserna utan istället tagit en position(GPS) och samtidigt börjat plocka värden från kompassmodulen för att efter lämplig tid i förhållande till farten ta en ny position och räkna ut kursen och samtidigt räkna ut medelvärdet från kompassmodulen för att sedan kompensera skillnaden.
Mitt test:
Efter att ha hittat ett bra tråd http://www.usglobalsat.com/forum/index.php?topic=3448.0 och laddat ner programmet så har jag fått en del mer fakta om min GPS-sensor. Med programmet kan man via serieporten på datorn enkelt ställa in alla parametrar i GPS:en, se signalstyrkor från satelliterna mm
Jag ställde "output rate" på 5 sekunder och tänkte att det skulle förbättra precisionen men det hjälpte inte, modulen ger fortfarande bara den riktning och fart den har just då och inte i förhållande till positionen den hade för 5 sek sedan. Testade för att försäkra mig om att så var fallet med att ställa om till 30 sek. Tog sensorn i bilen och körde till en raksträcka som jag vet ligger runt 270-271 grader. Jag rullade sakta på vägen tills positionen slog om, då trampade jag gasen i botten och körde ca 100 meter där det finns en parkering där jag tvärvände och sedan smög långsamt tillbaka åt andra hållet. Kom väll ca 5 meter innan positionen slog om och visade 87 grader(alltså mätte den inte från förra gången den slog om för jag befann mig ca 270 grader om den punkten). Kollade hastigheten på liknande sätt, stod still, positionen slog om, drog på och körde ca 100 meter, stannade och väntade till positionen slog om igen. Den visade 0.2 knop fast jag förflyttat mig 100 meter på 30 sek.
Slutsatsen är ju att sensorn bara räknar utifrån positioner som ligger väldigt nära varann i tiden, mindre än 1 sekund eftersom man kan uppdatera varje sekund och få en ny position. Jag har inte hittat någonstans där det går att ställa intervallet för beräkningarna.
Ni skriver ungefär: Använd sfärisk trigonometri, redan de gamla grekerna räknade ut det, gammal kunskap etc. Men kan någon räkna ut det och visa hur man gör?
T.ex. kursen mellan dessa:
60° 25,20'N, 17° 01,73'E
36° 05,81'N, 11° 40,71'E
Hur räknar man ut det? Visa formeln och hur den fungerar(jag hittar bara en massa formler som jag inte lyckats omsätta på problemet).
Edit: Icecap: Jag gjorde förra året ett program som räknade ut bäringen till en given koordinat från den plats man stod på. Det var det programmet som krävde ett omräknings-tal. Det programmet gjorde jag i assembler och det blev mycket text men var blixtsnabbt och fungerade perfekt efter att ha testat det ute. Satte jag en punkt på gräsmattan så hade jag bra och rätt bäring till den punkten om jag gick runt den med cirklar som var så små som 5 meter i diameter. Det är därför jag är så säker på att det GÅR att lösa problemet jag har nu. Dock sitter jag fast i att jag inte förstår HUR man räknar ut kursen på annat sätt än med omräkningstal. Jag är mycket tacksam för all er hjälp här på forumet
