Forum: PC-Programmierung Aus Beschleunigung auf Winkel schließen


von Borislav B. (boris_b)


Lesenswert?

Hallo,
ich versuche gerade einen 3-Achsen Beschleunigungssensor zum Messen 
eines Winkels benutzen.

Zum Testen habe ich erst mal mein Smartphone hergenommen, und mir die 
Sensorwerte anzeigen lassen. Wenn es flach auf dem Tisch liegt, messe 
ich 9,81m/s^2. Wenn ich es senkrecht stelle 0m/s^2.
Soweit so gut :-)

Nun ist die Frage, wie die genaue Übersetzungsfunktion von 
Beschleunigung -> Winkel lautet. Linear scheint der Zusammenhang 
jedenfalls nicht zu sein (bei 45° klappt die Umrechnung nicht wirklich.

Kann mir jemand auf die Sprünge helfen?

von John D. (Gast)


Lesenswert?

Borislav B. schrieb:
>
> Kann mir jemand auf die Sprünge helfen?

Zeigerdiagramm. Cosinus.

von A. S. (Gast)


Lesenswert?

Borislav B. schrieb:
> ich versuche gerade einen 3-Achsen Beschleunigungssensor zum Messen
> eines Winkels benutzen.
>
> Wenn ich es senkrecht stelle 0 m/s^2.

irgendetwas stimmt da nicht ...

Die Zusammenhänge: x²+y²+z² = 1g

Und als Tip: Mit Cosinus/Arccos ist es einfacher zu verstehen, der 
Arc-Tangens bietet aber konstantere Auflösung/Genauigkeit.

von Rolf M. (rmagnus)


Lesenswert?

Das ist einfache Trigonometrie. Schulmathematik der 9.Klasse.

Achim S. schrieb:
>> Wenn ich es senkrecht stelle 0 m/s^2.
>
> irgendetwas stimmt da nicht ...
>
> Die Zusammenhänge: x²+y²+z² = 1g

Stimmt nicht ganz. Es wäre ein 1g²

Ich vermute, dass er nur eine der drei Achsen gemessen hat.

von Georg (Gast)


Lesenswert?

Borislav B. schrieb:
> Zum Testen habe ich erst mal mein Smartphone hergenommen, und mir die
> Sensorwerte anzeigen lassen

Welche? Der Sensor liefert 3 Werte, die Anzeige eines einzigen Werts ist 
entweder völlig sinnfrei oder nur unter ganz bestimmten Voraussetzungen 
sinnvoll, etwa Lage waagrecht.

Auch aus allen 3 Werten kann man nur bestimmen, wo unten ist, und auch 
das nur OHNE Beschleunigung. Man kann so also nur den Winkel gegen die 
Horizontalebene messen.

Georg

von Borislav B. (boris_b)


Lesenswert?

Georg schrieb:
> Welche? Der Sensor liefert 3 Werte, die Anzeige eines einzigen Werts ist
> entweder völlig sinnfrei oder nur unter ganz bestimmten Voraussetzungen
> sinnvoll, etwa Lage waagrecht.

Ich benutze den Wert, der gegen die Längsachse des Smartphones gemessen 
wird. Damit sollte sich der Winkel zwischen Smartphone und "Boden" 
bestimmen lassen.
Sinnfrei ist das nicht :-)
Es funktioniert ja auch schon, nur ist meine Übertragungsfunktion nicht 
richtig. Für 0° und 90° bekomme ich schon die korrekten Werte. Nur 
dazwischen eben nicht...

Rolf M. schrieb:
> Ich vermute, dass er nur eine der drei Achsen gemessen hat.

Natürlich.

John D. schrieb:
> Zeigerdiagramm. Cosinus.

Mhh, noch kann ich nicht so ganz folgen.
Eigentlich hätte ich erwartet, dass bei 45° 50% der Erdbeschleunigung 
gemessen werden müssten.

von John D. (Gast)


Lesenswert?

Borislav B. schrieb:
>
> Mhh, noch kann ich nicht so ganz folgen.
> Eigentlich hätte ich erwartet, dass bei 45° 50% der Erdbeschleunigung
> gemessen werden müssten.

Natürlich nicht. Es sind etwa 71%.

von tictactoe (Gast)


Lesenswert?

Borislav B. schrieb:
> Eigentlich hätte ich erwartet, dass bei 45° 50% der Erdbeschleunigung
> gemessen werden müssten.

Dem ist aber nicht so. Bei 45° sind es 1/sqrt(2)-fache 
Erdbeschleunigung. Man muss ein Kräftedreick nehmen, dann von den 
Seitenlängen auf den Winkel schließen. Arcuscosinus klingt da ganz 
vernünftig.

von Borislav B. (boris_b)


Lesenswert?

John D. schrieb:
> Natürlich nicht. Es sind etwa 71%.

OK, Aufzeichnen hilft ;-)
Jetzt hab ich's. Danke!

von Rolf M. (rmagnus)


Lesenswert?

Borislav B. schrieb:
> OK, Aufzeichnen hilft ;-)

Was hilft, ist die Mathematik dahinter zu verstehen.
https://de.wikipedia.org/wiki/Trigonometrie#Trigonometrie_im_rechtwinkligen_Dreieck

von Borislav B. (boris_b)


Lesenswert?

Rolf M. schrieb:
> Was hilft, ist die Mathematik dahinter zu verstehen.

Und das geht am besten wie? Genau, aufzeichnen :-)

Hier noch meine Lösung:
1
    private static double AccelToAngle (double accel)
2
    {
3
      return Math.Asin (accel / 9.807) * (180.0 / Math.PI);
4
    }

von Lks (Gast)


Lesenswert?

Du bekommst so aber nicht jeden winkel raus. Die Beschleunigung ist 
invariant gegenüber der Rotation um die Achse, die in Richtung 
Erdmittelpunkt zeigt.

von Georg (Gast)


Lesenswert?

Borislav B. schrieb:
> Ich benutze den Wert, der gegen die Längsachse des Smartphones gemessen
> wird. Damit sollte sich der Winkel zwischen Smartphone und "Boden"
> bestimmen lassen.

Dem liegt wieder ein teilweiser Denkfehler zugrunde. Deine Annahme 
stimmt nur, wenn das Smartphone NICHT seitlich gekippt wird. Aber das 
ist dann ein Zirkelschluss: wenn ich eine bestimmte Lage zur 
Voraussetzung mache, lege ich vorab fest was eigentlich gemessen werden 
soll. Um dafür zu sorgen, dass die Querachse des Smartphones parallel 
zur Horizontebene verläuft, muss man ja eben die Lage der Ebene und der 
Achse vorab kennen.

Georg

von Rolf M. (rmagnus)


Lesenswert?

Borislav B. schrieb:
> Rolf M. schrieb:
>> Was hilft, ist die Mathematik dahinter zu verstehen.
>
> Und das geht am besten wie? Genau, aufzeichnen :-)

Ok, vielleicht hab ich's falsch verstanden. Ich habe bei aufzeichnen an 
das Aufnehmen der Werte bei bestimmten Winkeln und den Versuch, daraus 
Rückschlüsse zu ziehen gedacht. Ich vermute aber, dass du vielmehr eine 
Zeichnung des ganzen erstellt hast.
Das ist in der Tat sinnvoll.

Lks schrieb:
> Du bekommst so aber nicht jeden winkel raus.

Doch schon, so lange man in zwei Dimensionen bleibt und nur den Winkel 
zur Horizontalen will. Wenn man die Ausrichtung komplett wissen will, 
braucht man natürlich noch die beiden anderen Raumwinkel und zusätzliche 
Sensorik. In der Regel wird dafür ein Magnetfeldsensor als Kompass 
genutzt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.