AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung TSphere mithilfe MotionSensor drehen?

TSphere mithilfe MotionSensor drehen?

Ein Thema von derseitzer · begonnen am 21. Apr 2017 · letzter Beitrag vom 10. Mai 2017
Antwort Antwort
Seite 2 von 3     12 3   
derseitzer

Registriert seit: 12. Okt 2016
235 Beiträge
 
Delphi 10 Seattle Professional
 
#11

AW: TSphere mithilfe MotionSensor drehen?

  Alt 24. Apr 2017, 11:20
Dummy1.RotationAngle.X := 8*OrientationSensor1.Sensor.HeadingX;
Dummy1.RotationAngle.Y := 8*OrientationSensor1.Sensor.HeadingY;
Dummy1.RotationAngle.Z := 8*OrientationSensor1.Sensor.HeadingZ;

Dieser Code funktioniert allerdings liegt der Wertebereich der Headingwerte irgendwo ziwschen -45 und 45 (glaube ich zumindest).
Deshalb habe ich mal aus Testzwecken die Werte mal 8 genommen. Nun fiel mir beim Testen auf, dass meine Tsphere extrem empfindlich reagiert und ich die Werte irgendwie Runden sollte..
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
703 Beiträge
 
Delphi 11 Alexandria
 
#12

AW: TSphere mithilfe MotionSensor drehen?

  Alt 24. Apr 2017, 11:40
Hallo derseitzer

wenn du nicht rausfindest in welchem Bereich die H Werte liegen, dann merk doch im Programm min und max .

Und zur Multiplikation mit 8. Wenn die Werte effektiv zwischen -45 und 45 liegen und du mit 8 multiplizierst, dann müssen wir Werte im Bereich -360..360 (Grad) befürchten. Ich habe grad keine Zeit nachzusehen, wie die H Werte definiert sind, aber 8 ist etwas viel...

https://developer.android.com/guide/..._overview.html

Gruss
Michael Gasser
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
703 Beiträge
 
Delphi 11 Alexandria
 
#13

AW: TSphere mithilfe MotionSensor drehen?

  Alt 24. Apr 2017, 13:00
Zitat:
Bei mir sind die Tilt-Werte immer 0.. die Heading werte allerdings nicht :/ warum?
Hast du mal gecheckt, ob dir dein Gerät den Wert z.V. stellt?

Das wird in deinem Beispiel hier geprüft:

Delphi-Quellcode:
procedure TOrientationSensorForm.OrientationSensor1SensorChoosing(
  Sender: TObject; const Sensors: TSensorArray; var ChoseSensorIndex: Integer);

...
...
TCustomOrientationSensor.TProperty.TiltX in TCustomOrientationSensor(Sensors[I]).AvailableProperties

Wenn die Eigenschaft nicht z.V. steht, dann hol dir rasch ein neues Gerät .

Wenn die Eigenschaft Tilt vorhanden ist, dann solltest du wohl einen Blick in die Umrechnung "Vektor > Winkel" werfen (ich nehme an, du spielst mit einem Android Gerät), also in die unit System.Android.Sensors :

function TAndroidNativeRotationSensor.GetDoubleProperty(Prop: TCustomOrientationSensor.TProperty): Double; eventuell in diese Zeile:

Len := 1 - sqX - sqY - sqZ;
Gruss
Michael Gasser
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
703 Beiträge
 
Delphi 11 Alexandria
 
#14

AW: TSphere mithilfe MotionSensor drehen?

  Alt 26. Apr 2017, 00:18
Hallo derseitzer

du hast ja wahrscheinlich mittlerweile auch gesehen, dass die "Heading Werte" Daten zum Magnetfeld liefern - und "roh" für deine Aufgabe wohl nicht geeignet sind.

Es gibt übrigens coole Tools, mit welchen du rasch checken kannst, welche Sensoren in deinem Android Gerät eingebaut sind, zum Beispiel "Sensor Kinetics":

https://play.google.com/store/apps/d...kinetics&hl=de
Michael Gasser
  Mit Zitat antworten Zitat
derseitzer

Registriert seit: 12. Okt 2016
235 Beiträge
 
Delphi 10 Seattle Professional
 
#15

AW: TSphere mithilfe MotionSensor drehen?

  Alt 28. Apr 2017, 14:09
Mittlerweile geht mein projekt voran, jedoch hab ich einige Probleme, bei denen mir eventuell jemand helfen könnte?:/

1. Wenn ich meine Tsphere (bzw dummy) mit den Lagesensoren (die mit einem Timer immer wieder abgerufen werden) drehe, sieht das sehr ruckelig aus.. ich würde mir wünschen, dass das eher "fließend" aussieht.. ist das irgendwie möglich? es gibt ja eine Floatanimation.. vielleicht mit der???
2. selbst wenn ich mein Handy nicht bewege, bewegt sich alles ein bisschen - deshalb habe ich meine Werte gerundet, damit die Kommastellen der Sensorwerte verschwinden.. Es ist besser geworden, aber nicht weg:/ sollte ich mal auf 5er stellen runden? also nur 10 15 20 25... zulassen?
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
703 Beiträge
 
Delphi 11 Alexandria
 
#16

AW: TSphere mithilfe MotionSensor drehen?

  Alt 28. Apr 2017, 14:52
Hallo derseitzer,

hast du dir die von mir empfohlene (oder eine andere) App geholt um zu prüfen, was alles an Sensoren in deinem Handy vorhanden ist?

Grund: Wahrscheinlich könntest du einen geeigneteren Sensor verwenden für deine App.

Der von dir verwendete "Magnetometer Sensor" gibt dir - wenn ich mich nicht irre - den Vektor [kartesisches Koordiantensystem, nicht Polarkoordinaten] auf den magentischen Pol zurück. Genauer natürlich den Vektor auf die Summe aller Vektoren, welche auf die magnetischen Dinge deiner Welt zeigen - Kühlschrankmagnet mit eingeschlossen ].

Du hast also viele Einflüsse inkl. Messprobleme...

Wenn du echt diesen Vektor nutzen willst, dann wäre evt. eine Umrechnung der Heading Werte in Polarkoordinaten OK.

Runden bringt nichts, du holst dir damit noch mehr Probleme an Bord. Stell dir vor, du rundest immer auf ganzzahlige 5er. Aus dem Sensor ermittelst du Daten 2.4, 2.4, 2.5, 2.4, 2.5, dann rechnest du um auf 0, 0, 5, 0, 5. Und damit springt dein Modell viel stärker, als wenn du die "echten" Werte nutzen würdest.

Was du tun könntest:
Verbessere den Code und Suche im Web nach Glätten/Filtern/Rauschen
Schau noch einmal ins Codebeispiel von Emba. Du siehst, dass dort die Werte schlecht abgegriffen werden (Android). Du rufst den X Wert ab, das Programm frisst nun alle Sensorevents bis zum letzten und nimmt diesen Messwert [Tipp:greife auch alle anderen Events ab], nun fragst du Y ab und das Programm frisst wieder alle Sensorevents und nimmt den letzten Wert. Z genau gleich. Wenn du X,Y,Z rasch hintereinander abfragst wie im Democode, dann liest die Demo den X Wert aus SensorEvent/Messung n, Y aus n+1 und Z aus n+2. Die Elemente x,y,z des Vektors v=(x,y,z) stammen also aus drei voneinander verschiedenen Messungen... nicht gut.

> Greife also direkt alle Vektoren aus dem Sensorevent ab. Also einerseits x,y,z aus der gleichen Messung und alle Messungen.
> Rauschen aus Messwerten entfernen. Glätten/Filtern/Rauschen



https://de.wikipedia.org/wiki/Erdmagnetfeld
Michael Gasser
  Mit Zitat antworten Zitat
derseitzer

Registriert seit: 12. Okt 2016
235 Beiträge
 
Delphi 10 Seattle Professional
 
#17

AW: TSphere mithilfe MotionSensor drehen?

  Alt 29. Apr 2017, 19:11
Hallo Michael,

Ja das habe ich und ich habe folgende Ergebnisse: Accelerometer, Gyroskop, magnetometer, Schwerkraftsensor, Lineare acceleration, rotations sensor, Umgebungstemp. Proximity Sensor, Licht Sensor, Drucksensor, relative feuchte-sensor.. Ich meine ich habe ein S7 Edge.. da sollte schon alles mögliche vorhanden sein..

ich benutze nun nicht mehr den Motion, sondern den Orientationsensor mit folgenden Befehlen:

Dummy1.RotationAngle.X := round(4*OrientationSensor1.Sensor.HeadingY);
Dummy1.RotationAngle.Y := round(4*OrientationSensor1.Sensor.HeadingX);

(Man merke das X und Y vertauscht sind, was beabsichtigt ist, da im Handy die Koordinaten anders definiert sind..)
Somit funktioniert die App eigentlich bis auf das kleine ruckeln. Durch das "round" ist es damit auch schon besser geworden, aber dieses flüssige Drehen fehlt mir trotzdem etwas..

Ich werde mal versuchen ob ich die Werte speichern kann - in die TfloatAnimation reinsetze - und dann ein fließendes Ergebnis bekomme

Geändert von derseitzer (29. Apr 2017 um 19:20 Uhr)
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
703 Beiträge
 
Delphi 11 Alexandria
 
#18

AW: TSphere mithilfe MotionSensor drehen?

  Alt 29. Apr 2017, 20:34
Hallo derseitzer

du musst dir bewusst sein, dass du bei den Headingwerten das "Magnetometer" abfragst.

Wie erwähnt: Du erhältst einen Vektor v auf den magnetischen Nordpol. Die Werte v=(x,y,z)t haben nichts mit Winkeln zu tun. Diese Winkel müsstest du zuerst ermitteln. [Beachte: Die Schar aller Abbildungen A: R^3->R^3, welche (0,0,1) in norm(v) und e1'=A(1,0,0)t, e2'=A(0,1,0)t je in normierte Vektoren überführt, so dass die Bilder wieder ein Dreibein mit gleicher Orientierung bilden ist von Dimension 1.]

Würdest du nicht besser das Accelerometer hinzuziehen? Es ist für deinen Zweck etwas einfacher in der Handhabung, weil dieser Vektor (Gravitation) orthogonal zur Waagrechten steht.
Michael Gasser
  Mit Zitat antworten Zitat
derseitzer

Registriert seit: 12. Okt 2016
235 Beiträge
 
Delphi 10 Seattle Professional
 
#19

AW: TSphere mithilfe MotionSensor drehen?

  Alt 29. Apr 2017, 21:00
Das Accelerometer gibt mir keine Werte.. nur 0.. ich habe so abgefragt:
Label1.Text := FloatToStr(Zahl*MotionSensor1.Sensor.accelerationX ); (für Zahl alles mögliche eingesetzt)

Da ich nur 0 zurückbekommen habe habe ich eben anderes versucht.. das alles hat auch nicht funktioniert:
Label4.text := FloatToStr(MotionSensor1.Sensor.AngleAccelX);
Label7.text := FloatToStr(MotionSensor1.Sensor.Motion);
Label8.text := FloatToStr(MotionSensor1.Sensor.Speed);

was eben funktioniert hat war das mit dem orientationsensor.. :/
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
703 Beiträge
 
Delphi 11 Alexandria
 
#20

AW: TSphere mithilfe MotionSensor drehen?

  Alt 29. Apr 2017, 22:07
Das ist komisch. Nur der "abgeleitete* Acceleration Vektor" [*also jener Vektor, welcher dir Änderungen des Acceleator Vektors anzeigt] sollte dir Nullen anzeigen, wenn du dein Gerät nicht bewegst.

Wenn du mit der Android App checkst: Hast du unter Acceleration nachgeschaut? Zeigt dir die App dort auch nur Nullen an?
Michael Gasser
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 23:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz