- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 10 von 13

Thema: Winkelauswertung mit Accelerometer - Wo Werte zum Nullen einrechnen?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied
    Registriert seit
    09.05.2007
    Beiträge
    99

    Skalarprodukt

    Ich denke da ans Skalarprodukt. Und z ist dabei genau so wichtig!
    Egal wie schief der Sensor in Deiner Box liegt. Hauptsache er ist darin irgendwie fixiert. Der Accelerometer Vektor (x,y,z) zeigt immer zum Erdmittelpunkt.
    1. Kleb die Box irgendwo auf's gerade Brett, ließ den Sensor aus und nenne den Vektor A.
    2. Dann neige das Brett um die y-Achse und der Sensor liefert Vektor B.
    3. Mit Hilfe des Skalarproduktes A*B kannst Du den Neigungswinkel ausrechnen.

    Das Skalarprodukt liefert Dir den Winkel zwischen den Brettebenen in 1 und 2. D.h. mit dem Skalarprodukt kannst Du nicht zwischen einer Neigung um y-Achse und/oder x-Achse unterscheiden.

    Wahrscheinlich habe ich bis hierhin Dein Problem nicht gelöst aber hoffentlich ein wenig mit der Mathematik geholfen.

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    17.02.2009
    Ort
    Aachen
    Beiträge
    1.181
    So, hier mal eine grobe Übersicht. Ich hfofe, es ist verständlich. Der rosane Kasten soll der Sensor sein.

    Der Sensor ist in der Box fixiert, die ich auf das Brett lege.
    Das Brett ist zum Testen da, wo die X-Achse eingezeichnet ist, fixiert, so dass ich es zum Testen um den Winkel ß drehen kann.


    Klicke auf die Grafik für eine größere Ansicht

Name:	uebersicht.jpg
Hits:	23
Größe:	86,6 KB
ID:	24169

    Da ich immer noch nicht so ganz durchblicke, ist mein Ansatz derzeit, dass ich das Brett langsam um ß drehe und dabei Nullwerte für α einlese. Um α auszuwerten werden diese Werte dann hinterher addiert.
    Also wenn α bei ß 15° z.B. um 0,3° abweicht, kann ich anhand des Arrays ablesen, dass bei ß 15° a -0,3° sein muss, um eigentlich 0° anzuzeigen.

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    17.02.2009
    Ort
    Aachen
    Beiträge
    1.181
    So, nachdem ich mich nun etwas mehr mit der Materie auseinandergesetzt habe und der Sensor komischweweise bei Wiederholungsmessungen (ohne dass man ihn berührte/bewegte) Abweichungen in zu großem Maße aufweist, hab ich mich entschieden den Sensor ohne Gehäuse direkt auf der Platine mal unter die Lupe zu nehmen.
    Vor allem auffällig ist, dass er in der Regel die ersten paar Minuten nach der Inbetriebnahme Werte ausspuckt, die etwa um 0,2° (Raw-daten in Winkel umgerechnet) von den Werten, die nach einigen Minuten ausspuckt abweichen. Für die gewünschte Anwendung ist das zu unpräzise.

    Aus dem Grund möchte ich mich nun einem Oak Tilt (http://developer.toradex.com/files/t..._Datasheet.pdf) widmen.
    Hier bekomme ich die Koordinaten jedoch nicht als Rohdaten ausgespuckt, sondern direkt Winkel für Azimuth (Wikel in Bezug zur X-Achse um Z gedreht) und Zenith (Winkel zur Z-Achse).

    Nun überlege ich, wie ich diese Winkel umrechnen kann, da ich eine Kalibrierungsemssung vornehmen möchte, die etwa parallel zur Y-Achse liegt und quasi den Winkel Z-X-darstellt.

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    21.02.2013
    Ort
    Graz
    Beiträge
    211
    Ich blick nicht ganz durch, was du da machst. Wenn du die Neigung um 3 Winkel willst, dann bestimmst du den Erdbeschleunigungsvektor in der Nullstellung und in jeder Lage neu. Dann berechnest du die Drehung um jeden Winkel relativ zu diesem Null-Erdbeschleunigungsvektor.

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    17.02.2009
    Ort
    Aachen
    Beiträge
    1.181
    Nun ja, der erste Sensor hat mir die Rohdaten der drei Achsen geliefert. xAcc_raw, yAcc_raw und zAcc_raw. Damit konnte ich die nötigen Winkel berechnen.

    Der Sensor, den ich jetzt teste, liefert mit einen Winkel, der quasi die Drehung um die Z-Achse bestimmt (Azimuth) und einen Winkel, der den Winkel zur Z-Achse bestimmt (Zenith)

    In dieser Wikipediagrafik entsprechend:
    Azimuth (Sensor) = Azimuth (Grafik)
    Zanith (Sensor) = Meridian (Grafik) = 90° - Höhe

    http://upload.wikimedia.org/wikipedi.../9c/HorSys.svg

    Somit kann die Lage eindeutig bestimmt werden, jedoch im dreidimensionalen Raum.
    Für meine Messung benötige ich jedoch nur die Neigung um eine Achse. Sagen wir den Winkel (Grafik) zwischen Z- und X-Achse.
    Um nun eine Kalibrierung vorzunehmen, richte ich den Sensor an bestimmten Messpunkten aus und errechne mir eine virtuelle Ebene, die quasi die 0°-Stellung des Sensors darstellt (man kann so einen Sensor nie 100% in einem Gehäuse ausrichten...daher ist die Kalibrierung nötig).

    Mit dem alten Sensor habe ich nun den Winkel um die unwichtigere Achse ausgewertet und anhand dieser Winkelbestimmung die Relevante Achse mit meiner virtuellen Ebene verrechnet, um eine kalibrierte Neigung zu bekommen.
    Das funktioniert aber nur, wenn ich die Sensorwerte für alle drei Achsen habe.

    Nun überlege ich, wie ich aus dem Azimuth- und dem Zenith-Winkel des neuen Sensors pseudo-Rohdaten berechnen kann, damit ich diese mit meiner bereits existierenden Kalibrierung nutzen kann.

    Sollte das nicht funktionieren, muss ich versuchen die beiden ausgegebenen Winkel auf eine Ebene zu projezieren.
    Da ich den Winkel X-Z haben möchte:
    Stell dir vor, du schaust entlang der Y-Achse und siehst die Z-Achse senkrecht vor die. Der ausgegebene Vektor stellt nun den gesuchten Winkel auf der X-Z-Ebene dar.
    Ich weiß nur noch nicht, wie ich das projezieren kann und wie ich meine Kalibrierung dahin portieren kann.
    Am einfachsten wäre es, wenn ich die Rohdaten des Sensors auslesen könnte.

    Die Grundlage zur Auswertung des Sensors ist der beispielcode von Toradex:
    http://files.toradex.com/Oak/Linux/O...x_0081.tar.bz2
    im Unterordner src gibts die oaklinux.cpp, welche den Sensor erkennt und die Deviceinfos sowie die Daten ausliest.
    Aber hier steig ich noch nicht so ganz durch. Ich muss gestehen, dass ich jetzt etliche Stunden gebraucht habe, den Code überhaupt so zu kompilieren, dass ich Sensorinfos bekommen habe.

    Die Ausgabe des Beispielcodes sieht dann wie folgt aus:
    Code:
    Device Name: Toradex Inclinometer
    Volatile User Device Name: oaktilt
    Persistent User Device Name: oaktilt
    Serial Number: 08490303
    VendorID: 0x1b67 :: ProductID: 0x4 :: Version 0x104
    Number of channels: 4
    Report mode: 0
    Led Mode: 0
    Report rate: 2000
    Sample rate: 2000
    
    Channel 0:
       Name: Frame Number [s]
       Persistent user channel name: oaktilt
       Volatile user channel name: oaktilt
       Data type: 16 bits (unsigned)
       Unit exponent: -3
       Unit s (USB code 0x1001)
    
    Channel 1:
       Name: Acceleration [m/s2]
       Persistent user channel name: Frame Number
       Volatile user channel name: Frame Number
       Data type: 16 bits (unsigned)
       Unit exponent: -3
       Unit m/s2 (USB code 0xe011)
    
    Channel 2:
       Name: Zenith [rad]
       Persistent user channel name: Acceleration
       Volatile user channel name: Acceleration
       Data type: 16 bits (unsigned)
       Unit exponent: -4
       Unit rad (USB code 0x12)
    
    Channel 3:
       Name: Azimuth [rad]
       Persistent user channel name: Angle from Z axis
       Volatile user channel name: Angle from Z axis
       Data type: 16 bits (unsigned)
       Unit exponent: -4
       Unit rad (USB code 0x12)
    
    Frame Number [s]: 2003x10e-3
    Acceleration [m/s2]: 9717x10e-3
    Zenith [rad]: 37x10e-4
    Azimuth [rad]: 31416x10e-4
    
    Frame Number [s]: 1954x10e-3
    Acceleration [m/s2]: 9768x10e-3
    Zenith [rad]: 117x10e-4
    Azimuth [rad]: 32660x10e-4
    
    Frame Number [s]: 1907x10e-3
    Acceleration [m/s2]: 9717x10e-3
    Zenith [rad]: 30x10e-4
    Azimuth [rad]: 25535x10e-4
    Im Endeffekt geht es um die Messwerte, die in den letzten 3 Codeblocks ausgegeben werden:
    Code:
    Zenith [rad]: 30x10e-4
    Azimuth [rad]: 25535x10e-4
    Diese möchte ich umrechnen, um die Drehung um die Y-(oder X-)Achse zu bestimmen.
    Geändert von Cysign (18.03.2013 um 14:15 Uhr)

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    17.02.2009
    Ort
    Aachen
    Beiträge
    1.181
    So, ich bin nun endlich auf die Begriffe gestoßen, die mir weiterhelfen. Ich habe sphärische (Kugel-) Koordinaten und möchte diese umrechnen in kartesische Koordinaten

    Dazu habe ich hier die nötige Formel gefunden: http://wwwex.physik.uni-ulm.de/lehre...09/node56.html

    Um die anzuwenden, muss ich zunächst rausfinden, was für ein Datentyp die Werte im C++-Quellcode haben und wie ich diese abgreife.
    Dann werden die Koordinaten in kartesische Koordinaten umgerechnet und normiert.
    Und dann wiederum hab ich endlich die Form der Koordinaten, die ich an meinen bieherigen Programmcode andocken kann.

    Ich mach mich dann mal ran und hoffe, dass das so richtig ist
    Geändert von Cysign (19.03.2013 um 07:53 Uhr)

Ähnliche Themen

  1. Accelerometer mit integrierter Gebärdenerkennung
    Von Roboternetz-News im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 0
    Letzter Beitrag: 10.11.2011, 13:40
  2. Kollisionsdetektor mit Accelerometer??
    Von nortsys im Forum Sensoren / Sensorik
    Antworten: 10
    Letzter Beitrag: 21.01.2011, 10:14
  3. Integer --> String, mit führenden Nullen
    Von maker7 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 10
    Letzter Beitrag: 13.07.2010, 18:08
  4. 7 Segmentanzeige führende Nullen ausblenden
    Von TobiasBlome im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 18
    Letzter Beitrag: 23.08.2008, 16:04
  5. 360° Neigung mit Accelerometer
    Von benson im Forum Sensoren / Sensorik
    Antworten: 2
    Letzter Beitrag: 15.01.2006, 08:27

Berechtigungen

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

Solar Speicher und Akkus Tests