Forum: Mikrocontroller und Digitale Elektronik Kompass / Neigungssensor


von sn00py (Gast)


Lesenswert?

Hallo

Ich bräuchte ein kompaktes modul, das ich leicht mit einem ATMEGA 
ansprechen kann (also I2C, RS232, Analoge ausgänge)

womit ich die neigung und die aktuelle ausrichtung (Kompass) messen kann
Das teil sollte genau sein, wobei es hier nur um Änderungen geht

Sprich ich habe eine gewisse neigung, und eine einstellung am kompass, 
die cih mir dann im Atmel merken möchte und dann soll angezeigt werden 
wie weit ich drehen muß um wieder an diese position zu kommen.

Hat wer ideen oder schon mal so was gelöst?

von Der Michel (Gast)


Lesenswert?

sn00py schrieb:
> Hat wer ideen oder schon mal so was gelöst?

Die Neigungmessung geht z.B. mit einer kleinen Elektrolytzelle. Das 
Phasensignal für die Ansteuerung kann der ATmega direkt selbst erzeugen.

http://www.sensorsmag.com/sensors/position-presence-proximity/the-electrolytic-tilt-sensor-1063

von Daniel M. (erfolgstyp)


Lesenswert?


von Ano N. (oorim)


Lesenswert?

Naja, klassisches IMU - Initial Measurement Unit.

Besteht mind. aus Gyro und ACC, kann mit GPS und Kompass erweitert 
werden.

Gyro allein bringt dir den Drehwinkel aus integration, läuft dir aber 
mit der Zeit weg. ACC allein kann dir auch den Drehwinkel geben 
(ausrechnen, Trigonometrie) funktioniert aber nur im Stationären Zustand 
und orthogonal zur Erde (wenn ich da richtig liege).

Eine Kombination aus beidem bringt dir dann einen stabile Info über den 
Winkel. Sensorfusion muss man schauen da gibts verschiedenste Ansätze. 
Der angeblich beste und komplizierteste ist der Kalman Filter.

Findet sich auch einiges im Forum.


Achja, für die Reine Neigung könnte es auch Sensoren,google hilft
http://www.hy-line.de/fileadmin/hy-line/sensorik/hersteller/VTI/dokumente/vti_neigung.pdf

von Reinhard R. (reinhardr)


Lesenswert?

Hi,

in einem "wenig" bewegten System reicht dir die Kombination aus 
Magnetfeldsensor und Beschleunigungssensor. Bei ST bekommt man das auf 
einem einzigen Chip:
http://www.st.com/internet/analog/product/251902.jsp

Falls eine gewisse Dynamik ins Spiel kommt, z.B. Modellflug, brauchst du 
eine IMU, wie mein Vorredner schon geschrieben hat.

Reinhard

von Tom (Gast)


Lesenswert?


von sn00py (Gast)


Lesenswert?

Also der MK3Mag sieht eigetnlich eh sehr gut aus, und ist auch preislich 
noch interessant ...

Kann der nun auch neigung?
was bedeutet diese "3-achsen Magnetfeldsensor" so ganz schlau werde ich 
nicht draus ;)

Auch sehe ich nicht genau raus wie man den dann ansrpechen kann von 
einem µC

Hab auch noch den 3D Sensorboard CHR-6D  gefunden, aber der kostet 
gleich das doppelte ... :(

von Ano N. (oorim)


Lesenswert?

Ein Raum ist 3D. Drei Dimensional. 3 Achsen. 3 = Drei = 3.

Heißt: Ein Sensor der in 3 Achsen misst misst in jeder Raumachse (x, y, 
z).

Sparcfun hat auch noch IMUs in allen möglichen Arten.

von Tom (Gast)


Lesenswert?

Eine IMU aus Beschleunigungssensoren und Gyroskopen zeigt dir nur 
fehlerbehaftete Werte, schau Dir deswegen mal "Einführung in den 
Kalman-Filter" an.

Und lies mal die Artikel über UAVs, z.B. Quadcopter, so ganz ohne ist 
das Vorhaben nicht und ob nur Magnetsensor reich fraglich.

Alternativ hol Dir doch einen Nunchuck bei Ebay, ich hab mal einen für 5 
Euro bekommen, an einen Arduino gehangen und als Presenter mishandelt.

von NopNop (Gast)


Lesenswert?

>Alternativ hol Dir doch einen Nunchuck
Ist auch nur ein Beschleunigungssensor drin. Also auch keine dynamische 
Winkelerfassung möglich.

Wenn es ein dynamisches System ist, dann ist Beschleunigungssensor + 
Gyroskop + Kalmanfilter ziemlich gut.
Allerdings auch mit gewissem Aufwand verbunden.

Auch der Steady-State-Kalmanfilter erziehlte bei mir gute Ergebnisse und 
reichte für meine Anwendung aus.

Grüße

von Tom (Gast)


Lesenswert?

> Ist auch nur ein Beschleunigungssensor drin.


Stimmt,
aber aus den Thread oben klingt ein Stück heraus, das der TS eigentlich 
noch am suchen ist und den Aufwand noch noicht anschätzen kann.

Und da sind 5 Euro für einen Test noch recht günstig.

Um den Kalmanfilter
http://letsmakerobots.com/node/15688

oder Diskrete Cosinusmatrix
http://code.google.com/p/ardu-imu/

wird er wahrscheinlich nicht rumkommen.

von sn00py (Gast)


Lesenswert?

Ano Nym schrieb:
> Ein Raum ist 3D. Drei Dimensional. 3 Achsen. 3 = Drei = 3.
>
> Heißt: Ein Sensor der in 3 Achsen misst misst in jeder Raumachse (x, y,
> z).
>
> Sparcfun hat auch noch IMUs in allen möglichen Arten.

Ja, das würde dann ja heissen das es der MK3Mag ja kann ... das er in 
alle 3 Achsen messen kann

von Tom (Gast)


Lesenswert?

Sorry Direction Cosine Matrix, nicht Discrete.
gentlenav.googlecode.com/files/DCMDraft2.pdf

von NopNop (Gast)


Lesenswert?

Tom schrieb:
> Und da sind 5 Euro für einen Test noch recht günstig.

Stimmt schon, so ein Teil ist mal schön um es zu testen. Wollte ja nur 
anmerken dass damit eine zuverlässige Winkelerfassung auch nur im 
statischen Fall möglich ist.

Grüße

von hepp (Gast)


Lesenswert?

HMC6343

Man kann aus dem Register nacheinander die Neigung (von den 
Beschleunigungssensoren) und die Ausrichtung (direkt in °) auslesen. 
Anbindung über I2C mit 100kHz und 10Hz Updaterate.

von Ano N. (oorim)


Lesenswert?

Bleibt das Problem mit der Fusion

von NopNop (Gast)


Lesenswert?

Solange er nicht genauer spezifiziert wie "genau" es sein soll und ob es 
auch dynamisch gemessen werden soll wird es schwierig.

von sn00py (Gast)


Lesenswert?

JA sollte schon genau sein,auf 0.5° aber eben nur realtiv gemessen

Sprich es soll eine position gemerkt werden, und später dnan angezeigt 
werden wie genau wir niun wieder dort sind.

Ich werde es am anfang mit diesem board mal testen 
http://www.shop.robotikhardware.de/shop/catalog/product_info.php?products_id=221

ich hoffe das ist genau genug ;)

von NopNop (Gast)


Lesenswert?

140 Tacken...heftig!

Die Sensoren sehen noch nicht mal so schlecht aus und ein STM32 ist auch 
noch mit drauf.
Wenn man an den ran kommt Softwaretechnisch...kannste Deinen ATMEGA 
entsorgen und gleich den Onboard STM32 nehmen.

Hier wäre das gleiche Board etwas günstiger gewesen:
http://www.watterott.com/de/CHR-6d-IMU

Ein evtl. weiterer Vorteil ist die anscheinend implementierte 
Kalibrierung bzw. Schätzung der Bias-Werte (wenn sie gut und zuverlässig 
funktioniert).
Nachteilig könnte sein, dass wenn dies nicht richtig geschieht man nur 
schwer Einfluss darauf hat. Man kann zwar anscheinend auch manuell 
Bias-Werte setzen für die Sensoren, allerdings müsste man die dann im 
angeschlossenen ATMEGA schätzen und dann zum STM32 übertragen. Dies 
passt natrürlich nur bei einer sauberen zyklischen Erfassung der 
Sensordaten. Ansonsten läuft Dir auch der Kalmanfilter davon.

Fast die gleichen Sensoren (außer Gyro mit +- 300°/sek und +-1200°/sek) 
und ohne STM32 gäbe es auf diesem Board für 55 Euro:
http://www.watterott.com/de/IMU-6DOF-Razor-Ultra-Thin-IMU1
Die Signale werden hierbei Analog ausgegeben, eine Auswertung müsste 
dann im uC erfolgen (dies übernimmt im anderen Board der STM32).

Grüße

P.S: Du hast schon gesehen dass auf den Boards kein Kompass drauf ist, 
oder?

von NopNop (Gast)


Lesenswert?

Ach ja...erst nach 4 Tagen antworten wenn man eine Frage stellt zeigt 
auch wieviel Interesse bzw. Engagement man an dieser Sache hat ;-)

von Sn00py (Gast)


Lesenswert?

Ja musste leider familienbedingt wegfahren .... Und die SIM im iPad geht 
leider nicht im Ausland ... Tschuldigung, das ich mich nicht abgemeldet 
habe.... ;)

Hmmmm kein Kompass .... Aber die Drehung erkennt er trotzdem oder?
Ich muss nur die Drehung und die Neigung erkennen. ... Und das nur 
relativ


Sprich der Sensor wird auf einer beweglichen Latte montiert diese zeigt 
in den Raum und kann dann irgendwo hinzeigen
Diese position wird dann gespeichert und sollte später wieder gefunden 
werden ....

von Karl H. (kbuchegg)


Lesenswert?

Sn00py schrieb:

> Hmmmm kein Kompass ....

Kompass wird sowieso IMHO überbewertet.
Jeder Fernseher, jeder Trafo, jeder Motor in der näheren Umgebung lenkt 
den ab.

von NopNop (Gast)


Lesenswert?

Ausgangsposition speichern, Latte drehen und anschließend wieder zur 
Ausgangsposition zurückfinden sollte gehen. Wie gesagt, wenn das mit der 
Kalibrierung gut funktioniert hast Du sogar die absolute Position der 
"Latte".
Wenn Du die Sensordatenauswertung und Sensordatenfusion selber berechnen 
muss (und dazu gehört eben nun mal auch die Bias-Schätzung) dann wirds 
etwas bist etwas viel aufwändiger.

Grüße

von NopNop (Gast)


Lesenswert?

Ach ja, über den Watterot Link findet man auch das Users-Forum der 
STM32-Platine:
http://www.chrobotics.com/forum/index.php

Und von da aus den Entwickler des implementierten DCM-Algorithmus:
http://vrhome.net/vassilis/
http://vrhome.net/vassilis/dcm/
Tom hatte ja oben bereits die Direction Cosine Matrix erwähnt.

Das ist dann der Download des Sourcecode für das STM32-Board:
http://vrhome.net/vassilis/wp-content/uploads/2009/12/CHR6D_DCM_091220.zip

Theoretisch würde also einer direkten Implementierung Deines Codes auf 
dem STM32 nichts entgegensprechen (genügend Recourcen und Kenntnisse 
vorausgesetzt).

Grüße

von Wolfgang Horn (Gast)


Lesenswert?

sn00py schrieb:
> Ich bräuchte ein kompaktes modul, das ich leicht mit einem ATMEGA
> ansprechen kann (also I2C, RS232, Analoge ausgänge)
>
> womit ich die neigung und die aktuelle ausrichtung (Kompass) messen kann
> Das teil sollte genau sein, wobei es hier nur um Änderungen geht

Hi, sn00py,

Honeywells HMC6343 macht das in etwa: Geomagnetisches Feld in X, Y, und 
Z. Dazu Beschleunigung in X, Y und Z.

Prima für tragbare Geräte, aber unmöglich für Motorräder, Pkw, Lkw, 
Boote. Weil der eingebaute Kalibrieralgorithmus ein Überschlagen 
erfordert, eine Drehung um eine horizontale Achse.
Weil Kalibrierung die Mitdrehung der Plattform erfordert, müsste das 
Motorrad sich auch entsprechend mitdrehen, was man nicht jedem Fahrer 
zumuten kann.

Die Kalibrierung ist unverzichtbar, weil der vertikale Komponente des 
geomagnetischen Feldes in unseren Breiten deutlich stärker ist als die 
horizontale Komponente.

Den Sensor um ein Grad aus der Horizontalen heraus zu kippen verursacht 
einen Nordfehler von mehr als ein Grad.
Und bei Montage im Fahrzeug weißt Du erst mal nicht, ob Dein Fahrzeug 
gekippt wird oder sich beschleunigt.

Da lobe ich mir meinen Marschkompass mit der spitzengelagerten Nadel.
Zur Nordbestimmung bleibe ich damit halt stehen.

Ciao
Wolfgang Horn

von sn00py (Gast)


Lesenswert?

Auf jeden Fall mal danke an alle :)

und auch an den link mit dem günstigeren Preis, habe ich irgendwie 
übersehen ...

Ich werde dann bereichten ob das teil für meine Zwecke taugt oder nicht 
...

von sn00py (Gast)


Lesenswert?

Sooooo ....
ich habe nun das Teil hier den CHR-6d
aber irgendwie siehts aus, wie wenn das Teil das gar nicht kann :(

der kann die rotierung um die z-Achse niocht, zumindest passt kein 
ausschlag der Sensoren dazu wenn ich den drehe ... wenn ich den langsam 
um die z-Achse drehe, dann sehe ich niergends einen Ausschlag

nur die Gyro werte ändern sich, aber die gehen dann immer wieder zurück 
auf 0


.... ich fürchte ich habe nun einen sensor hier, der das gar nicht kann, 
was ich brauche?

Was sagt ihr dazu?

Kennt wer diesen CHR-6d?

Hat wer eine empfehlung, welchen sensor ich stattdessen verwenden 
sollte?

danke
sn00py

von Reinhard R. (reinhardr)


Lesenswert?

Hi,

das Bauteil dass du hast kann das nur indirekt. Gyros zeigen direkt nur 
die Drehrate an, wenn sie still stehen ist ihr Signal 0. Dein Board 
funktioniert im Rahmen seiner Möglichkeiten normal. Wenn du jetzt 
anstatt der Drehrate einen Winkel haben willst, musst du das Signal 
numerisch integrieren. Ein simples Beispiel: Der Sensor zeigt für 2 
Sekunden eine Drehrate von 25°/s an. Dann weißt du, dass sich der Winkel 
um 50° gegenüber deinem vorherigen Wert geändert hat. Wenn du deinen 
Ausgangswinkel kennst, kennst du damit auch deinen neuen Winkel.
Die Sache hat zwei Probleme. Zuerst einmal wird die Sache im 
dreidimensionalen Raum deutlich komplizierter, da man die Achsen nicht 
unabhängig voneinander betrachten kann (mathematisch gesehen kommutieren 
Rotationen nicht). Dazu kommt noch das Problem der Drift. Normalerweise 
ist es kein Problem wenn der Messwert ein klein wenig daneben liegt. 
Durch die numerische Integration summiert sich dieser Fehler aber auf. 
Stell dir vor das Gerät liegt ruhig am Tisch, aber der Sensor hat einen 
kleinen Offset von 0.1°/s. Nach einer Stunde wird das Ding glauben dass 
es sich einmal im Kreis gedreht hat, obwohl es sich nicht bewegt hat.

So lange du nicht relativ dynamisch unterwegs bist (z.B. in einem 
Flugzeug), musst du dich nicht mit den Eigenarten von Gyroskopen 
beschäftigen. Ein dreiachsiger Beschleunigungssensr kombiniert mit einem 
dreiachsigen Magnetometer reicht dazu vollkommen aus. Weiter oben habe 
ich schon einmal einen Link auf den LMS303 gepostet. Den kannst du auch 
als kleines Modul bei Sparkfun kaufen (oder einem europäischem 
Distributor).
http://www.sparkfun.com/products/9810
http://elmicro.com/de/sfe-sensoren.html
Da du schon den Beschleunigungssensor hast, kannst du auch ein reines 
Magnetometer nehmen und mit dem CHR-6d kombinieren.

Reinhard

von sn00py (Gast)


Lesenswert?

@Reinhard

Danke für die Erklärung.

Dann ist der Sensor mal nichts für mich ... :(
Ich will auch nicht zwei Sensorboards verbauen, das muß schon einer 
alleine sein.

der größere Bruder vom CHR-6d also der CHR-6dm wird das dann mal richten 
können vermute ich mal.

Also alles was Gyro sensoren und Beschleunigungssensoren sind, können 
die Richtung im 3D Raum nur per Integration ermitteln stimmt das mal?

Warum reicht dann kein einfacher Sensor mit "nur" magnetisch nicht aus?

Du schreibst oben ja komibiniert mit einem 3 Achs Magnetometer

von NopNop (Gast)


Lesenswert?

Sorry, aber wenn solche Dinge schon zu schwer sind...san wird das gar 
nichts!

Du kannst über den integrierten Beschleunigungssensor den Winkel über 
Pythagoras bestimmen...aber eben nur im statischen Fall (bei 
Stillstand).
Du hast ja dann einen absoluten Bezugspunkt (die Erdbeschleunigung).
Soll es auch für den dynamischen Fall funktionieren, brauchst Du eben 
noch die Gyroskope um die schnellen Änderungen ohne fremde 
Beschleunigungen zu erfassen.

Jede IMU (Inertialsensorik) macht das so!
Stichwort Segway oder Quadcopter.

Gruß

von Matthias (Gast)


Lesenswert?

sn00py schrieb:
> Also alles was Gyro sensoren und Beschleunigungssensoren sind, können
> die Richtung im 3D Raum nur per Integration ermitteln stimmt das mal?

Was verstehst du jetzt unter "nur". Bevor es Funknavigation wie z.B. GPS 
oder LORAN gab, sind die Flieger damit über den Atlantik geflogen.

von NopNop (Gast)


Lesenswert?

Übrigens, in der Windowsanwendung die mitgeliefert wird kannst Du 
nachschauen wie er die Winkel berechnet:
1
private void timer3_Tick(object sender, EventArgs e)
2
        {
3
            // Calculate roll and pitch
4
            //double pitch = Math.Atan2(dcmData[2, 0], dcmData[2, 2]) * 180.0 / Math.PI;
5
            double pitch = Math.Asin(dcmData[2, 0]) * 180.0 / Math.PI;
6
7
            //double roll = Math.Atan2(dcmData[2, 1], dcmData[2, 2]) * 180.0 / Math.PI;
8
            double roll = Math.Asin(dcmData[2, 1]) * 180.0 / Math.PI;           
9
            if (dcmData[2, 2] < 0)
10
            {
11
                roll = 180 - roll;
12
            }
13
14
            // Update horizon
15
            horizon.pitch_angle = pitch;
16
            horizon.roll_angle = roll;
17
        }

Das muss man jetzt nur noch richtig umstricken für den uC und dann läuft 
das!

Grüße

von NopNop (Gast)


Lesenswert?

Ergänzung von S.7 Kapitel 6.2. Extended Kalman Filter:
1
As of February 26, 2010, all CHR-6d units shipped from CH Robotics come with a built-in Extended
2
Kalman Filter for pitch and roll angle estimation. To maintain compatibility with older devices, pitch
3
and roll angles estimates are not transmitted by default. Pitch and roll angle outputs can be
4
enabled by sending a SET_ACTIVE_CHANNELS packet to the IMU.

Es ist also schon möglich die absoluten Winkel direkt auszugeben.
Man muss es nur vorher einstellen!

Also mit Kommando SET_ACTIVE_CHANNELS die Bits 6 & 7 setzen für Pitch 
und Roll-Winkel und das Ding sollte dir die beiden Winkel des Extended 
Kalmanfilters rauswerfen. (siehe S.11 chr6d-Datasheet).

Grüße

von sn00py (Gast)


Lesenswert?

Ah ok für mich hat sich das mit dem aufsummieren (Integrieren) angehört 
als ob das etwas sehr ungenaues wäre ... :)

Also das mit dne Bits 6 & 7 hat funktioniert .... Allerdings hilft mir 
ja das Pitch und Roll auch nicht weiter, da mir ja der winkel der z 
Achse abgeht (also der Kompass sozusagen) .... ist einfach das falsche 
Modul.


Ich werde mir mal den großen Bruder anschauen ...

von NopNop (Gast)


Lesenswert?

>Ich muss nur die Drehung und die Neigung erkennen.
Sensor um 90 Grad drehen?

von NopNop (Gast)


Lesenswert?

Ok...Kommando zurück.
Dann hat man ja wieder nur den Gyro...und keine Stützpunkte.

Grüße

von Reinhard R. (reinhardr)


Lesenswert?

sn00py schrieb:
> der größere Bruder vom CHR-6d also der CHR-6dm wird das dann mal richten
> können vermute ich mal.
Der sieht auf den ersten Blick ganz gut aus. Vor allem hat der auch, 
genauso wie der CHR-6d, einen integrierten Controller der dir einen Teil 
der Arbeit abnimmt.


> Also alles was Gyro sensoren und Beschleunigungssensoren sind, können
> die Richtung im 3D Raum nur per Integration ermitteln stimmt das mal?
So in der Art. Gyros muss man eigentlich fast immer integrieren, da man 
sich selten für die Winkelgeschwindigkeiten an sich interessiert. Bei 
Beschleunigungssensoren hängt das ein wenig davon ab was man damit vor 
hat. Für eine Neigungserkennung reichen die Messwerte aus. Falls man 
damit aber Trägheitsnavigation betreiben will, muss man die Daten 
zweimal integrieren (1* für die Geschwindigkeit, 2* für die Position).


> Warum reicht dann kein einfacher Sensor mit "nur" magnetisch nicht aus?
>
> Du schreibst oben ja komibiniert mit einem 3 Achs Magnetometer
Das Magnetfeld ist nicht, wie man vielleicht glauben möchte, waagrecht. 
Hierzulande ist die vertikale Komponente sogar größer als die 
Horizontale (ca. 60° von der Waagrechten). Deshalb muss man die Neigung 
kennen, um sie bei der Berechnung kompensieren zu können. Dafür sind die 
Beschleunigungssensoren da.


Gruß,
Reinhard

von sn00py (Gast)


Lesenswert?

Ok danke nochmal an alle (vorallem Reinhard für die Geduld ;) einem wie 
mir das zu erklären )

Ich habe mal den großen Bruder bestellt, und hoffe das damit dann alles 
funkt ..

danke noch mal an alle

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.