AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Kompass 2D

Ein Thema von schand99 · begonnen am 19. Jan 2015 · letzter Beitrag vom 21. Jan 2015
Antwort Antwort
schand99

Registriert seit: 7. Nov 2013
Ort: Südtirol
43 Beiträge
 
Delphi XE8 Enterprise
 
#1

AW: Kompass 2D

  Alt 20. Jan 2015, 14:50
Muss dem was "Namenloser" geschrieben hat zustimmen. Einen Vektor erst in einen Winkel umrechnen und nachher zum Zeichnen des Vektors dann wieder aus dem Winkel einen Vektor berechnen wäre tatsächlich ein unnötiger Umweg.
Leider benötige ich den Winkel für nachfolgende Berechnungen (Geocaching, möchte mir selbst eine App bauen die mir Richtung und Abstand zum Zielort anzeigt).
Aber dafür müsste ich es erstmal schaffen eine Kompassnadel zu zeichnen die auch halbwegs brauchbar nach Norden zeigt. Und da liegt das Problem, ich schaffe es nicht aus den Werten HeadingX, -Y und -Z eine brauchbare Kompassnadel zu zeichnen. Das simple Weglassen eines der Heading-Werte ist leider nicht die Lösung.
Die Heading-Werte ergeben zwar einen Vektor in der Einheit Tesla, allerdings blicke ich noch nicht genau durch wie die Werte zu interpretieren sind. Wie bereits geschrieben funktioniert der Kompass wenn das Smartphone flach auf dem Tisch liegt. Wird es aber um eine Achse leicht geneigt, dann stimmt die Richtung nicht mehr.
Es wäre naheliegend einfach HeadingZ zu ignorieren. Aber HeadingY eiert so seltsam rum dass mir so schön langsam die Lust am Basteln vergeht
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.688 Beiträge
 
Delphi 2007 Enterprise
 
#2

AW: Kompass 2D

  Alt 20. Jan 2015, 15:06
Ohne das vor sich zu sehen, finde ich es gerade etwas schwierig sich genau vorzustellen was da wo wie schief laufen könnte. Hast du ggf. eine Möglichkeit, ein Video von der bisherigen Nadel auf deinem Handy zu machen, wie du es ein wenig bewegst? (So, dass man erkennen kann wie du es bewegst.) Auf Youtube oder so am besten.

Weisst du 100%ig welche der 3 Achsen Nord/Süd bezeichnet? Nicht, dass du genau diese mit Z weggelassen hast. Das würde das Herumeiern vielleicht erklären können. Und wenn alle Stricke reißen: Es gibt auch durchaus Handys, deren Magnetsensor nicht ganz so pralle ist. Hast du schon mal eine andere Kompass App probiert? Können die das besser mit deinem Handy?
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Kompass 2D

  Alt 20. Jan 2015, 15:31
Müsste eigentlich so funktionieren meiner Meinung nach. Könnte mir höchstens vorstellen, dass der Heading-Vektor entgegen unserer Annahme nicht relativ zum Display ist, sondern die Neigung des Displays schon herausgerechnet ist.
  Mit Zitat antworten Zitat
schand99

Registriert seit: 7. Nov 2013
Ort: Südtirol
43 Beiträge
 
Delphi XE8 Enterprise
 
#4

AW: Kompass 2D

  Alt 20. Jan 2015, 15:51
Hier ein mega Film: http://80.247.70.136/downloads/cmps.zip
Die App läuft auf einem Samsung Galaxy S3 mini (und ruckelt^^) genauso schräg wie auf einem Sony Xperia Z3 Compact.
Wäre für jeden Tipp dankbar.

Berechne jetzt so, die Variablen HeadX, -Y und -Z sind so deklariert dass sie auch in anderen Funktionen sichtbar sind.

procedure TStartup.Timer2Timer(Sender: TObject);
Var
Vek:Single;
begin
if Kompass.Sensor.Started = True then
Begin
HeadX := Kompass.Sensor.HeadingX;
HeadY := Kompass.Sensor.HeadingY;
HeadZ := Kompass.Sensor.HeadingZ;
Vek := Sqrt(Power(HeadX,2) + Power(HeadY,2));
HeadX:=HeadX/Vek;
HeadY:=HeadY/Vek;
end;
End;

Irre simpel da mit HeadX und HeadY gezeichnet wird, aber leider sehr stark lageabhängig und somit nutzlos.
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.688 Beiträge
 
Delphi 2007 Enterprise
 
#5

AW: Kompass 2D

  Alt 20. Jan 2015, 15:59
Dem Video nach würde ich wirklich annehmen, dass Z die Nord/Süd-Achse ist. Zumindest wenn mich mein räumliches Vorstellungsvermögen (und das gedankliche de-projezieren ) nicht völlig verlassen hat. Probier doch einfach mal, was daraus wird wenn du Y oder X weg lässt.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
schand99

Registriert seit: 7. Nov 2013
Ort: Südtirol
43 Beiträge
 
Delphi XE8 Enterprise
 
#6

AW: Kompass 2D

  Alt 21. Jan 2015, 13:27
Ist nicht so einfach. HeadingZ ist es nicht. Hatte da schon vorher alle möglichen Kombinationen durch. Die Werte für die einzelnen Achsen liegen für X und Y zwischen -1 und +1, Z hingegen zwischen -44 und +40 wobei die Werte für Z erst dann positiv werden wenn das Smartphone mit dem Display auf dem Tisch liegt. Heading-Werte sollten lt. Embarcadero in Tesla (Einheit für Magnetfeldstärke) ausgegeben werden. Ich befürchte dass für eine brauchbare Anzeige der Kompassnadeln die Werte der Lagesensoren mit eingerechnet werden müssen.
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.688 Beiträge
 
Delphi 2007 Enterprise
 
#7

AW: Kompass 2D

  Alt 21. Jan 2015, 14:33
Die Werte um 40 würden sich mit der Stärke des Erdmagnetfeldes decken - allerdings in µT, nicht T. Demnach ist es sehr wohl Z, und die X und Y werden vermutlich "künstlich" errechnet um eine Verwendung in 3D zu vereinfachen. Am aller besten wäre es vermutlich, wenn du mal alle 3 Achsen so wie sie kommen in 3D zeichnest. Das dürfte dank FMX sogar recht einfach gehen! Wenn man sich das dann beguckt, dürfte einiges klarer werden.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#8

AW: Kompass 2D

  Alt 21. Jan 2015, 20:39
Wie wäre es damit:

Der Gravitationsvektor definiert ja quasi die Richtung "Boden" und wird ja auch durch einen Sensor ausgelesen. Jetzt könntest du doch die Ebene finden, die senkrecht darauf steht. Anschließend projizierst du den Magnetvektor auf diese Ebene. Jetzt projizierst du den modifizierten Vektor auf den Bildschirm, indem du die z-Komponente wegwirfst.

Grund: Das Erdmagnetfeld geht ja nicht tangential zur Oberfläche. Vielmehr hat es in unseren Breiten eine Abweichung von fast 30° zur Senkrechten (http://www.gfz-potsdam.de/deklinationsrechner/) Vielleicht liegt es ja daran...?

P.S.: Die erste Projektion würde ich über ein doppeltes Kreuszprodukt machen. Also Magnetvektor sei m, dann g x m ergibt nen Vektor nach Osten (oder Westen) und g x Ergebnis ergibt dann den Magnetvektor der senkrecht auf dem Gravitationsvektor steht.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz