- 3D-Druck Einstieg und Tipps         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 17

Thema: Beschleunigung aus Winkel & Beschleunigung errechnen

  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    31
    Beiträge
    1.578

    Beschleunigung aus Winkel & Beschleunigung errechnen

    Anzeige

    Praxistest und DIY Projekte
    Hi,

    auch wenn der Titel im ersten Moment etwas komisch wirkt, hab ich eine plausible Frage dazu:
    Ich messe mit einem stillstehendem Accelerometer die Beschleunigung in 3 Achsen (X, Y & Z). Daraus kann ich auch die Winkel in X & Y Richtung errechnen, bis dahin kein Problem.
    Da ich allerdings mehrere Boards habe, muss / möchte ich den Ausgabewert bei einer Beschleunigung von 1g errechnen. Hintergrund ist, dass die Sensoren alle ein bisschen streuen und ich die MÖGLICHST GENAUEN Ausgabewerte brauche, da die Werte anschließend integriert werden sollen (Integral wird natürlich gestützt, aber um so genauer es ist, umso genauer ist im Endeffekt das Resultat).
    Mein erster Gedanke war eine Art Dreisatz, allerdings komme ich nicht auf einen grünen Zweig...
    Ich kenne: Beschleunigung (X, Y, Z) , Winkel (X , Y , (Z kann berechnet werden).
    Ich will wissen: Beschleunigung bei 1g

    Die Beschleunigung bei einem gegebenem Winkel kann ich über sin(Winkel) errechnen, den Winkel bei gegebener Beschleunigung über arcsin(Beschleunigung).

    Ich hoffe, ihr könnt mir bei meinem kleinen Problem helfen.
    Vielen Dank & Gruß
    Chris

    EDIT:
    Achja, eigentlich dachte ich, es reicht, wenn ich Beschleunigung1g = BeschleunigungX + BeschleunigungY + BeschleunigungZ rechne, aber sowohl mit, als auch ohne den Beträgen funktionierts nicht ... Je weiter der Sensor geneigt ist, desto größer werden die Werte, obwohl doch die Beschleunigung immer 1g beträgt (bei Stillstand)?!
    Geändert von Che Guevara (22.09.2013 um 01:21 Uhr)

  2. #2
    Erfahrener Benutzer Roboter-Spezialist Avatar von schorsch_76
    Registriert seit
    25.03.2012
    Ort
    Kurz vor Neuschwanstein
    Alter
    48
    Beiträge
    456
    Du musst den Pythagoras auf die 3 Werte anwenden.

    Wert bei 1g = sqrt(x^2+y^2+z^2)

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    31
    Beiträge
    1.578
    Hi,

    das stimmt leider nicht ganz.. Wenn der Sensor um mehr als ca. 20° geneigt ist, weichen die Werte bereits um ca. 200 ab ... Bei mehr als 40° weichen sie dann schon um bis zu 2000 ab ... (1g = 16384)
    Eigentlich dachte ich auch an eine etwas andere Lösung:
    Ich errechne den Winkel, um den die Z-Achse schief steht, berechne die daraus resultierende Beschleunigung und berechne anschließend irgendwie (???) die Beschleunigung bei 1g...
    Den Winkel der Z-Achse kann ich berechnen, indem ich den Pythagoras von WinkelX & WinkelY berechne und von 90° abziehe, oder?
    Die Beschleunigung errechne ich dann anhand der sinus-Funktion.

    Stimmt mein Ansatz soweit?

    Gruß
    Chris

    EDIT:
    So ungefähr stelle ich mir das vor:
    1. WinkelZ = 90 - pythagoras(WinkelX,WinkelY);
    2. BeschleunigungZ = sin(WinkelZ);
    3. Beschleunigung1g = 90/WinkelZ * BeschleunigungZ;

    Bei Formel 3 bin ich mir noch unschlüßig, da das Verhältnis Winkel / Beschleunigung nicht linear ist ... evtl. komme ich da mit dem arcsin weiter?
    Geändert von Che Guevara (22.09.2013 um 13:55 Uhr)

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Die Beschleunigung ist ein dreidimensionaler Vektor. Dein Sensor liefert dir, da er in Wirklichkeit aus 3 orthogonal angeordneten Sensoren besteht, die 3 Komponenten des Beschleunigungsvektors in kartesischen Koordinaten.

    Die Größe der (Erd)Beschleunigung ist der Betrag des Beschleunigungsvektors. Und der Betrag ist die Wurzel aus dem Skalarprodukt des Vektors mit sich selber. Bei rechtwinkligen Koordinaten also a = sqrt(ax^2 + ay^2 + az^2). Sind die Sensoren nicht rechtwinklig, braucht man den Kosinussatz.

    Dieser Betrag ist die Beschleunigung. Das gilt für alle Winkel. Wenn man nur die Beschleunigung wissen will, braucht man den Winkel nicht extra auszurechnen.

    Zwei Spezialfälle zu Prüfung: die Z-Achse steht senkrecht, ax = ay = 0, az ist die Beschleunigung, a = sqrt(0^2 + 0^2 + az^2) = az
    Der Sensor liegt auf der Seite, die Y-Achse steht senkrecht, ax = az = 0, ay ist die Beschleunigung, a = sqrt(0^2 + ay^2 + 0^2) = ay

    Wenn man den Winkel nicht wissen will, braucht man ihn auch nicht extra auszurechnen. Da sqrt() gern länglich wird, versucht man die Funktion zu vermeiden. Ist der Winkel (eigentlich zwei Winkel) bekannt, kann man den Betrag des Vektors auch anders rechnen. Muß man die Winkel erst berechnen, läufts auf das gleiche hinaus.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    31
    Beiträge
    1.578
    Hi,

    also so ganz schlau werde ich nicht aus deinem Beitrag, ist mir wohl ein bisschen zu mathematisch ...
    Wenn ich die Formel a = sqrt(ax^2+ay^2+az^2) verwende, kommt je nach Schrägstellung des Sensors (in Ruhelage) ein etwas anderer Wert heraus, wie oben geschrieben ...
    Außerdem habe ich dann wieder das Problem, wenn die einzelnen Achsen versch. Offsets haben, dass dann der Wert wieder etwas daneben liegt.
    Deswegen wollte ich den Dreisatz anwenden, allerdings scheitere ich daran, dass das Verhältnis von Winkel & Beschleunigung nicht linear ist.
    Ich kenne die Beschleunigung der Z Achse und auch deren Winkel, daraus möchte ich die Beschleunigung bei einem Winkel von 90° errechnen.

    Was meinst du mit "da sqrt() gern länglich wird"? Meinst du die Ausführungszeit? Das wäre egal, da der Wert nur einmal zum Start des Programms errechnet werden müsste.

    Gruß
    Chris

  6. #6
    Erfahrener Benutzer Roboter-Spezialist Avatar von schorsch_76
    Registriert seit
    25.03.2012
    Ort
    Kurz vor Neuschwanstein
    Alter
    48
    Beiträge
    456
    sqrt benötigt recht viel Rechenzeit. Die Implementierung auf Prozessoren bassiert auf einer Taylorreihe. Genauso wie die trigonometrischen Funktionen.

    http://de.wikipedia.org/wiki/Taylorreihe
    Geändert von schorsch_76 (22.09.2013 um 17:57 Uhr) Grund: Link

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Zitat Zitat von Che Guevara Beitrag anzeigen
    Wenn ich die Formel a = sqrt(ax^2+ay^2+az^2) verwende, kommt je nach Schrägstellung des Sensors (in Ruhelage) ein etwas anderer Wert heraus, wie oben geschrieben ...
    Die Physik sagt aber, der Wert muß konstant sein. Was du hier also siehst, sind die Messfehler deines Sensors.

    Außerdem habe ich dann wieder das Problem, wenn die einzelnen Achsen versch. Offsets haben, dass dann der Wert wieder etwas daneben liegt.
    Deswegen wollte ich den Dreisatz anwenden, allerdings scheitere ich daran, dass das Verhältnis von Winkel & Beschleunigung nicht linear ist.
    Dein wirkliches Problem ist nicht die Formel, auch wenn sie kompliziert wäre, sondern daß du den Winkel nicht kennst. Erst wenn du deinen Sensor kalibriert hast, kannst du den Winkel berechnen. Ist dein Sensor kalibriert, brauchst du den Winkel zum kalibrieren nicht mehr.

    Zum Kalibrieren deines Sensors brauchst du (solange er linear ist) 6 Werte: 3 Offsets und 3 Faktoren. Und das gilt auch nur, wenn der Sensor Zeit- und Temperaturstabil ist. Wenn du dann auch noch zwei Sensoren vergleichen willst, sind es 12 Werte, 6 für jeden Sensor. Um das zu vereinfachen, muß man sich den Sensor genau ansehen und entscheiden, für welchen der 6 Werte man z.B. konstante, feste Werte ansetzen kann. Wie du selbst sagst, ist der Offset ein Problem. Also muß er gegen einen anderen Sensor (z.B. Wasserwaage oder Lot) kalibriert werden. Alles andere ist der Versuch, sich an den eigenen Haaren aus dem Sumpf zu ziehen.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  8. #8
    Erfahrener Benutzer Roboter-Spezialist Avatar von schorsch_76
    Registriert seit
    25.03.2012
    Ort
    Kurz vor Neuschwanstein
    Alter
    48
    Beiträge
    456
    Eventuell könnte man einen Regressionsansatz wählen. was ja konstant ist, g. Gleichungssystem aufstellen und viele Messwerte reinballern. Mit der Methode der kleinsten Quadrate dann die optimalen Offsets berechnen.


    Die Frage ist, wie muss das Gleichungssystem aussehen.

    Gruß Georg

  9. #9
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    31
    Beiträge
    1.578
    Hi,

    also wie man einen ACC kalibriert, darüber hab ich mir schonmal Gedanken gemacht ...
    Ich brauche je Achse einen Offset-Wert und einen Bereichs-Wert, der den maximalen Ausgabewert enthält.
    Der Sensor-Wert wird wird dann wie folgt berechnet:
    Code:
    if(accx<accx_min) accx_min = accx;
    if(accx>accx_max) accx_max = accx;
    accx_offset = (accx_min+accx_max)>>1;
    accx_range = (labs(accx_min)+labs(accx_max));
    accx_corrected = (accx-accx_offset)/accx_range*32768;
    Allerdings dachte ich bis jetzt immer, ich komme auch ohne Kalibrierung aus ... Aber anscheinend muss ich das wohl wirklich mal in Angriff nehmen, damits gescheit funktioniert.

    Gruß
    Chris

  10. #10
    Erfahrener Benutzer Roboter-Spezialist Avatar von schorsch_76
    Registriert seit
    25.03.2012
    Ort
    Kurz vor Neuschwanstein
    Alter
    48
    Beiträge
    456
    Hab mir auch grad Gedanken gemacht wie man so einen Sensor am besten mathematisch beschreibt. Kannst du ein paar Beispieldaten hier reinsetzten? Also die Werte der 3 Ausgänge in unterschiedlichen Lagen. Schätze so ca. 6-8 Werte wären hilfreich. Bitte alle bei Stillstand

    Gruß
    Georg

    - - - Aktualisiert - - -

    Das hier scheint mir exakt dies zu bewirken.
    http://de.wikipedia.org/wiki/Basiswechsel_(Vektorraum)

    Dazu eben die Funktion
    B1: Basisvektor 1
    B2: Basisvektor 2
    B3: Basisvektor 3

    s1: Array mit Werten aus dem Sensor 1
    s2: Array mit Werten aus dem Sensor 2
    s3: Array mit Werten aus dem Sensor 3

    S:sum((((len(s1[i]*B1)^2 + len(s2[i]*B2)^2 + len(s3[i]*B3)^2))-g^2)^2,i,1,length(s1));

    das ganze dann nach den 9 Kooeffizienten der Matrix ableiten und 0 setzen (kleinster Abstand).

    Jetzt müssten nur noch genügend Daten vorhanden sein, um richtige Kalibrierwerte zu bekommen.

    Gruß
    Georg

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Beschleunigung berechnen
    Von michas_rob im Forum C - Programmierung (GCC u.a.)
    Antworten: 6
    Letzter Beitrag: 19.10.2007, 17:09
  2. RN-Motor Steuerung/Beschleunigung
    Von blackfeet im Forum Bauanleitungen, Schaltungen & Software nach RoboterNetz-Standard
    Antworten: 1
    Letzter Beitrag: 11.12.2006, 19:19
  3. Beschleunigung messen?
    Von Freak5 im Forum Sensoren / Sensorik
    Antworten: 19
    Letzter Beitrag: 12.04.2006, 19:28
  4. Beschleunigung aus einer Kurve herraus
    Von Simsmann im Forum Sensoren / Sensorik
    Antworten: 6
    Letzter Beitrag: 13.01.2006, 13:56
  5. Geschwindigkeit/Beschleunigung
    Von NoReAction im Forum Motoren
    Antworten: 3
    Letzter Beitrag: 06.10.2005, 22:34

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress