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?
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
Hier wäre ein kompassmodul das beim mikrokopter verwendet wird https://www.mikrocontroller.com/index.php?main_page=product_info&cPath=74&products_id=374&zenid=029f6a3081ab47945d9d54dfbb2e65c0 vllt gibts auf der seite auch noch den neigungssensor https://www.mikrocontroller.com/index.php?main_page=index&cPath=74
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
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
Die IMU http://www.watterott.com/de/IMU-6DOF-Razor-Ultra-Thin-IMU1 und div. Magnetsensoren http://www.watterott.com/de/Sensoren/Magnetometer-Kompass
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 ... :(
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.
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.
>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
> 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.
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
Sorry Direction Cosine Matrix, nicht Discrete. gentlenav.googlecode.com/files/DCMDraft2.pdf
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
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.
Solange er nicht genauer spezifiziert wie "genau" es sein soll und ob es auch dynamisch gemessen werden soll wird es schwierig.
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 ;)
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?
Ach ja...erst nach 4 Tagen antworten wenn man eine Frage stellt zeigt auch wieviel Interesse bzw. Engagement man an dieser Sache hat ;-)
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 ....
Sn00py schrieb: > Hmmmm kein Kompass .... Kompass wird sowieso IMHO überbewertet. Jeder Fernseher, jeder Trafo, jeder Motor in der näheren Umgebung lenkt den ab.
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
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
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
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 ...
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
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
@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
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ß
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.
Ü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
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
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 ...
>Ich muss nur die Drehung und die Neigung erkennen.
Sensor um 90 Grad drehen?
Ok...Kommando zurück. Dann hat man ja wieder nur den Gyro...und keine Stützpunkte. Grüße
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.