Ik heb een zelf geschreven wandel navigatie App, die voor ons perfect werkt, op 1 ding na, het compas van een Android telefoon
laat heel erg te wensen over is mijn ervaring.
Dus daarom gebruik ik de GPS voor de richting, maar daarvoor moet je eerst een stukje lopen voordat die de juiste richting aangeeft.
Bij een iphone telefoon werkt het kompas wel perfect, dus dat zou ik ook graag voor elkaar krijgen.
Helaas kan ik alleen App's schrijven voor android (*)

Mijn vragen:
-Wie weet welke android telefoon een goed kompas heeft ?
-Bestaat er een los kompas dat ik bijvoorbeeld via usb, bluetooth of wifi uit kan lezen met de android telefoon ?

(*) Of beter gezegd ik zou ze waarschijnlijk wel kunnen schrijven voor een iphone, maar ik zou niet weten hoe ik die er dan op moet krijgen.

Heb je het kompas al een keer gekalibreert? Vaak door achtjes te draaien met de telefoon kun je het kompas kalibreren.

Ja al diverse keren, dan werkt het kort weer even een beetje maar dat is maar van korte duur.
Als ik een iphone aanzet dat werkt deze meteen goed, dat is wat ik graag zou hebben.

Op zaterdag 11 mei 2024 11:55:59 schreef MMSoft:
-Bestaat er een los kompas dat ik bijvoorbeeld via usb, bluetooth of wifi uit kan lezen met de android telefoon ?

Ik denk dat dat omslachtiger werkt dan je nu gebruikte methode. Zelf maken is niet heel moeilijk (neem deze of deze bijvoorbeeld als start punt - ik zocht gewoon naar "compass ic esp32 webserver"), dus verwacht ik dat het ook wel kant en klaar te verkrijgen is. Je zoekt waarschijnlijk iets kant en klaar. Je moet ff zoeken dan naar iets wat jou aanspreekt

Als de telefoon in een behuizing zit met een magnetische sluiting werkt het kompas ook niet goed!

Een Samsung A71 lijkt het hier prima te doen. Een Oppo A17 reageert een stuk minder helder. Ik heb dit echt even voor je moeten testen want ik gebruik het zelf zelden.

Ik kan er ook heel erg weinig over vinden, zo ben ik erg benieuwd of er wel eens een test gedaan is zodat ik kan zien welke Android telefoon het beste/één goed kompas heeft.

Een probleem is bij mij nog wel eens dat het kompas (na gekalibreert te zijn) een tijdje goed werkt en dan op een gegeven moment niet meer klopt.

Magnetisch kompas is sowieso niet erg betrouwbaar*. Voortgaan op wat de GNSS vertelt, inderdaad. En als die nog niets doet omdat men nog niet beweegt: even naar de zon kijken voor een ruwe orientatie.

*vliegeniersverhaal ter illustratie: examenvlucht in eenmotorig sportvliegtuigje, magnetisch kompas tegen de voorruit gekleefd. Tijdens een navigatieoefening raakt de kandidaat letterlijk het noorden kwijt. Examinator had zijn sleutelbos op het dashboard gelegd...

Misschien kan je in je app iets bouwen waardoor je de huidige gps vergelijkt met die van een 30-60 seconden daarvoor. Dan zou je iets van referentie moeten hebben. Zo precies zal het toch niet luisteren voor een wandel app? Of doe je ondertussen wat landmetingen? :D

Het komt inderdaad niet zo heel precies, maar het komt voor dat de afwijking wel eens 90 graden of meer is, en dan loop je op een kruispunt toch in de verkeerde richting.

Natuurlijk zou ik deze waarde kunnen vergelijken, maar als de software op een gegeven moment meer dan 10 graden afwijkt wat dan ?
En de gps richting wijzigt pas na ca. 50..100 meter, en het magnetische kompas meteen.
Nu lopen wij niet altijd 50...100 meter in dezelfde richting (slinger pad of even een foto maken van iets), dus dat lijkt mij heel erg lastig om hier iets betrouwbaars van te maken.

En de gps richting wijzigt pas na ca. 50..100 meter, en het magnetische kompas meteen.
Nu lopen wij niet altijd 50...100 meter in dezelfde richting (slinger pad of even een foto maken van iets), dus dat lijkt mij heel erg lastig om hier iets betrouwbaars van te maken.

Er lijkt iets mis met je updatesnelheid. Die wijzigt namelijk niet standaard pas na 50...100 meter - dat zit dan in jou software denk ik. Dit zou ook niet afstand, maar tijd-gebaseerd moeten zijn (ongeveer 1 sec).

Ik zit momenteel binnen(!) en mijn telefoon (OnePlus Nord) geeft een 'fix' (lees update snelheid) van 983ms tot 1016 ms (dat wisselt continu). De precisie is 4,6 meter (kan GPS niet tot 3 meter?). Dit bij 12 tot 18 satellieten (dat wisselt ook continu). Buiten zullen deze gegevens nog een stuk beter zijn!

Er zijn denk ik nog enkele verbeteringen haalbaar zonder dit extern op te hoeven lossen.

Ik bedoel dus de "richting", en niet de GPS positie want die wordt wel eerder bijgewerkt !

De GPS sensor kan toch pas bepalen welke kant je op beweegt en waar het Noorden is als je een stuk beweegt ?

Is er een App waarmee ik de werking van de GPS sensor kan testen ?

Ik denk dat Optodesign gelijk heeft. GPS werkt veel preciezer dan 50 of zelfs 20m.

Ik kan hier van het ene raam naar het andere raam lopen en dan zie ik ongeveer 5-10 meter op GPS coordinaten verspringen.

Ik gebruik de app "GPS Status & Toolbox" van MobiWIA

Oja, ik had een tijd lang vrolijk de 'battery saver' aanstaan en dan werden al mijn GPS registraties ernstig beknopt, ipv 1000-1500 locatiepunten voor een uur fietsen had ik er dan maar 10. Misschien speelt bij jou ook zoiets.

GPS werkt veel preciezer dan 50 of zelfs 20m.

Veel te veralgemenend. De resolutie hangt sterk af van het aantal ontvangen satellieten (zoals ook door @OPTOdesign aangegeven). In mijn ervaring wordt ze fel beter als men niet alleen GPS ontvangt maar ook (bv.) Glonass. Wandel maar eens doorheen een stadscentrum, liefst temidden hoogbouw, met een of andere GNSS-ontvanger, de resolutie springt op en af tussen 10 en 100 meter, soms nog meer.

Op dinsdag 14 mei 2024 21:30:31 schreef MMSoft:
Ik bedoel dus de "richting", en niet de GPS positie want die wordt wel eerder bijgewerkt !

De GPS sensor kan toch pas bepalen welke kant je op beweegt en waar het Noorden is als je een stuk beweegt ?

Is er een App waarmee ik de werking van de GPS sensor kan testen ?

Het hangt volledig af van de frequentie dat de GPS bepaalde data verzend. Niet in elke verzonden boodschap zit de richting. Wordt GGA of GLL elke seconde verzonden, dan zou de richting ook per seconde moeten wijzigen.

De meeste GNSS-ontvangers verzenden toch elke seconde een pakket met data hoor. Toch zeker alle goedkope usb-dingen die ik al gebruikt heb. Dat zal wel bepaald worden door de toegepaste chipset, zeker?
Welke recordtypes er in dat pakket zitten dat hangt af van de beschikbare data; bv. als er geen enkele satelliet ontvangen wordt (tunnel!) dan komt er ook geen satellietinformatie, logisch toch? Een GPRMC of GNRMC komt er altijd wel door, staat me voor. (GPxxx baseert op GPS, GNyyy op Glonass, dat zijn de enige die mijn huidige ontvangertje herkent)

[Bericht gewijzigd door Paulinha_B op (17%)]

Laat ik er eens een beetje code erbij pakken, het is alweer een hele tijd terug dat ik deze code geschreven heb, en moet er weer in duiken !
Ik programmeer in Delphi (11.3, FMX, Android), en lees van de 'LocationSensor' de parameter 'TrueHeading' uit.

Het valt mij meteen op dat ik niets instel van de LocationSensor, dus mogelijk valt daar nog het een en ander te verbeteren.


Als 1e schakel ik de sensor in (hierbij wordt natuurlijk toestemming gevraagd in mij code want dat moet tegenwoordig) 
LocationSensor1.Active := True; //LocationSensor Aan

De GPS Positie lees ik zo uit:
var
  GPS_Pos_Lat: Single;
  GPS_Pos_Lon: Single;

begin
 GPS_Pos_Lat := LocationSensor1.Sensor.Latitude;
 GPS_Pos_Lon := LocationSensor1.Sensor.Longitude;
end;

En de Kompas richting lees ik zo uit:
//Compass_waarde ophalen van LocationSensor
var
 Test: Single;

begin
 //Compass_waarde ophalen van LocationSensor
 Test := LocationSensor1.Sensor.TrueHeading;

 //Controle
 Geldige_GPS_Compass_Richting := True;  //Voorlopig geldig, maar dan moet deze wel door de volgende testen komen

 if IsNaN( Test ) then
  begin
   Geldige_GPS_Compass_Richting := False;
   exit
  end;

 if (Test < 0) OR (Test > 360) then Geldige_GPS_Compass_Richting := False;

 //GPS_Compass_Waarde Omzetten naar Integer;
 GPS_Compass_Richting := Trunc( Test );
end;

De 'GPS_Compass_Richting' gebruik ik alleen als 'Geldige_GPS_Compass_Richting' True is.

Dat illustreert wat er gebeurt in de Delphi-library, maar zegt niks over de eigenlijke ontvangen informatie. Precies daarom heb ik zo de pest aan dat library-gedoe: de zaken waar het echt om gaat worden weggemoffeld achter een gordijn. Ja, ik weet dat ik ouderwets ben, maar ik wil zelf zicht hebben op mijn data.

Overigens vreemd dat de coordinaten worden gedeclareerd als "Single", dat duidt toch op integer? Ik zou daar een float verwachten. Maar dan denk ik C, geen Delphi, dat ken ik trouwens niet en ik ben er ook niet benieuwd naar.

[Bericht gewijzigd door Paulinha_B op (27%)]

//Ik ben de instellingen eens aan het bekijken:
locationsensor1.Accuracy := 0;
locationsensor1.ActivityType := Other; //Mogelijkheden: Automotive / Fitness / Navigation / Other
locationsensor1.Distance := 0;
locationsensor1.LocationChange := IctSmall; //Mogelijkheden: IctLarge / IctSmall
locationsensor1.Optimize := True;
locationsensor1.Tag := 0;
locationsensor1.UsageAuthorization := WhenInUse; //Mogelijkheden: Always / WhenInUse

locationsensor1.ActivityType kan waarschijnlijk het beste op Navigation ingesteld worden, maar wat kan ik het beste bij de andere keuze's instellen denken jullie ?

Ik vind het om de reden die Paulinha_B aanhaalt ook koffiedik kijken. Lastig om iets zinnigs over te zeggen. Ik denk dat je het beste met verschillende waarden kan spelen om zo te kijken welke waarden van grote invloed zijn om zo te achterhalen welke instellingen belangrijk zijn.

Zelf zou ik verwachten dat je de excacte locatie binnen haalt en in een variable zet en 1 seconde later de variable vergelijkt met de dan huidige locatie. Je weet dan de richting. Dit kan je meerdere keren doen om foutieve data weg te filteren. Hoe vaak je dit doet kan weer afhankelijk gemaakt worden van het aantal ontvangen satalieten (daar zullen wel meer oplossingen voor zijn - tevens, als meerdere opeenvolgende punten in elkaars verlengde liggen heb je een grote kans dat het klopt).

Zoek in z'n algemeenheid eens op hoe GPS werkt. Dan kom je ook te weten hoe je op de grond je locatie kan bepalen - een satelliet stuurt de tijd en door het verschil van de verschillende tijden (het duurt even voordat het signaal de aarde bereikt heeft en dat geeft een tijdsverschuiving met zich mee) kan de locatie op de grond worden berekend. Vervolgens moet je weten met welke berekeningen je allemaal te maken hebt die 'achter het gordijn' plaats vinden. (Mooi gezegd Paulinha_B).

Zelf gebruik ik 'GPS Data' van EXA Tools. Of 'GPS Status & Toolbox' van MobiWIA Kft. Deze laatste geeft ook weer op basis van welke satellieten de locatie bepaald wordt met signaalsterkte en globale positie. Tevens kan deze geminimaliseerd over een andere app heen weergegeven worden ('scherm-in-scherm') wat handig is bij debuggen in jou voorbeeld.

Hehe, het is altijd fijn om het met iemand eens te zijn :)
De beschreven berekening is overbodig: ietwat GNSS-ontvanger doet dat zelf, en stuurt de bekomen informatie - snelheid en richting - (voorzover geldig) uit met een xxVTG-record.

@topicstarter: nogmaals, het is lastig raadgeven over een zwarte doos. Uw enige hoop is dat er hier nog lieden meelezen die dezelfde programmeeromgeving gebruiken, alleen vrees ik dat Delphi niet meer echt courant is, dus dat is misschien niet zo waarschijnlijk.

Op woensdag 15 mei 2024 13:40:57 schreef Paulinha_B:
Overigens vreemd dat de coordinaten worden gedeclareerd als "Single", dat duidt toch op integer?

Ik denk aan de tegenhanger van "double" en dat is "double precision floating point" en maakt "single" de afkorting van "single precision floating point" .

GPxxx baseert op GPS, GNyyy op Glonass

GP is: uitsluitend GPS-satellieten
GN is: 'multi-constellation', bijvoorbeeld GPS én Glonass; maar ook bijv. GPS én Galileo.
Alleen Glonass zou aangegeven worden met GL; alleen Galileo met GA.

--

[een] GNSS-ontvanger doet dat zelf, en stuurt de bekomen informatie [...] uit met een xxVTG-record.

Het is misschien interessant te weten dat de VTG-informatie niét berekend wordt uit 'positie nu minus positie een tijdje geleden', maar meer rechtstreeks uit de ontvangen satellietsignalen.
Het gebeurt daardoor weleens dat koers en snelheid al tamelijk goed zijn, terwijl de positie nog wat springerig aandoet.
Niettemin; als je werkelijk stilstaat of -ligt, dan geeft VTG ook geen goede koers. Het magnetisch (of, op schepen, het gyro-)kompas is dan je enige richtingbepaling.

--
Als het magnetisch kompas in je telefoon, tablet, etc. gekalibreerd wordt, dan wordt daarmee de grootte en richting van een aanwezig magnetisch 'gelijkveld' bepaald om dat daarna in rekening te kunnen brengen.
Door de telefoon in zoveel mogelijk standen te draaien, kan de output van elk van de drie magneetsensoren X, Y, Z bekeken worden. Voor elk moet het 'negatieve maximum' gelijk zijn aan het positieve maximum; zo niet, dan is er in de betreffende sensor een component gelijkveld, die daarmee bepaald is.

De fout die zo'n gelijkveld anders zou veroorzaken, is voor elke koers weer anders van grootte en teken. Het is daardoor niet mogelijk een koers uit de GPS te gebruiken om het kompas mee te corrigeren op andere koersen.

GP is: uitsluitend GPS-satellieten
GN is: 'multi-constellation', bijvoorbeeld GPS én Glonass; maar ook bijv. GPS én Galileo.
Alleen Glonass zou aangegeven worden met GL; alleen Galileo met GA.

I stand corrected.

Het is misschien interessant te weten dat de VTG-informatie niét berekend wordt uit 'positie nu minus positie een tijdje geleden', maar meer rechtstreeks uit de ontvangen satellietsignalen.

Hm, zoiets had ik nogal gehoord. Maar is het altijd en overal zo? Lijkt mij implementatieafhankelijk, m.a.w. zou kunnen verschillen per chipset.

Op woensdag 15 mei 2024 14:38:00 schreef Paulinha_B:
Hehe, het is altijd fijn om het met iemand eens te zijn :)
De beschreven berekening is overbodig: ietwat GNSS-ontvanger doet dat zelf, en stuurt de bekomen informatie - snelheid en richting - (voorzover geldig) uit met een xxVTG-record.

Een doos in een doos in een doos (enz.). Echter kan het uitkomst bieden om zover mogelijk terug te gaan naar het originele datapakket (in hoeverre dat mogelijk is). Dat is wat ik er mee bedoelde en wat mogelijk ook als inspiratie kan dienen (de huidige manier van berekenen los te laten, want die werkt onvoldoende blijkbaar).