Kombisensor (Accel, Gyro, Kompass, aka. Bosch BMX055)

Community-Firmware (cfw), Selbstbaucontroller (TX-Pi, ftduino, usw.), usw.
Forumsregeln
Bitte beachte die Forumsregeln!
Antworten
fanboy
Beiträge: 17
Registriert: 24 Dez 2014, 23:28

Kombisensor (Accel, Gyro, Kompass, aka. Bosch BMX055)

Beitrag von fanboy » 12 Nov 2017, 08:09

Hallo zusammen,

Ich habe mir gerade bei d-edition den Kombisensor von fischertechnik geholt:
https://content.ugfischer.com/cbfiles/f ... -06-09.pdf

Was ich damit machen will ist den Erkundungsroboter plus Kombisensor plus Ultraschallsensor nutzen um eine „Karte“ der Räume zu zeichnen und wieder zum Ausgangspunkt zurückzufinden. Bevor ich mit der CFW den Kombisensor teste hab ich erst mal das Beispiel von RoboPro geladen.

Das Beispiel bei RoboPro liefert auf das TXT Display alle Werte. Allerdings habe ich damit so einige Probleme:
  • Die Lage sollte ja vom Gyroscope kommen. Wenn der TXT steht sind die Werte allerdings immer um die Null, auch wenn ich den TXT samt Sensor drehe.
  • Die Beschleunigungswerte kann ich nicht verstehen. Ich würde erwarten, dass wenn der Sensor steht alle Werte auf Null sind. AX und AY stehen bei 200-400 was ja vielleicht bei der Höhe der Messwerte sein kann. Aber warum ist AZ in der Ruhe bei -16400?
  • Was bedeutet AT?
  • Wie kann ich den Kompass norden?
Danke für die Hilfe,
Philipp

Lars
Beiträge: 564
Registriert: 25 Okt 2016, 21:50

Re: Kombisensor (Accel, Gyro, Kompass, aka. Bosch BMX055)

Beitrag von Lars » 12 Nov 2017, 10:36

Hallo fanboy,
fanboy hat geschrieben:Was ich damit machen will ist den Erkundungsroboter plus Kombisensor plus Ultraschallsensor nutzen um eine „Karte“ der Räume zu zeichnen und wieder zum Ausgangspunkt zurückzufinden. Bevor ich mit der CFW den Kombisensor teste hab ich erst mal das Beispiel von RoboPro geladen.
Genauso dachte ich mir das auch.

Blöde nur, daß ROBOPro Daten nur auf dem PC laden und speichern kann. Die SD-Karte kann nicht angesprochen werden, auf der man diese Karte ablegen könnte.
fanboy hat geschrieben:Das Beispiel bei RoboPro liefert auf das TXT Display alle Werte. Allerdings habe ich damit so einige Probleme:
Die Lage sollte ja vom Gyroscope kommen. Wenn der TXT steht sind die Werte allerdings immer um die Null, auch wenn ich den TXT samt Sensor drehe.
Ein Gyroskop liefert nur die *Änderung* der Lage, nicht die Lage selbst.
fanboy hat geschrieben:Die Beschleunigungswerte kann ich nicht verstehen. Ich würde erwarten, dass wenn der Sensor steht alle Werte auf Null sind. AX und AY stehen bei 200-400 was ja vielleicht bei der Höhe der Messwerte sein kann. Aber warum ist AZ in der Ruhe bei -16400?
In Ruhe verbleibt immer noch die Gravitationskraft der Erde.
fanboy hat geschrieben:Was bedeutet AT?
Temperatur.
fanboy hat geschrieben:Wie kann ich den Kompass norden?
Da müßte man wohl mit Hilfe von Google die Differenz zwischen dem magnetischen und geographischen Nordpol finden und letzteren einer festen Gradzahl des Sensors zuordnen. Im Prinzip ist es für einen Roboter aber eigentlich gleich, ob man die Orientierung relativ zum geographischen oder magnetischen Nordpol festhält.

Manchmal läuft der Kompaß des Sensors bei mir nicht an und verharrt auf 0 Grad. Dann muß man das Programm beenden, den Sensor kurz stromlos machen und das Programm wieder starten.

Die Nutzung eines solchen Sensors scheint doch erheblich komplizierter als gedacht zu sein. Wie schön wäre an dieser Stelle ein "didaktisches Begleitheft" ... ;-)

Mit freundlichen Grüßen
Lars

reus
Beiträge: 113
Registriert: 02 Nov 2010, 09:39

Re: Kombisensor (Accel, Gyro, Kompass, aka. Bosch BMX055)

Beitrag von reus » 12 Nov 2017, 11:24

Zum Thema Kompass: Ich glaube nicht, dass ein kleiner ft-Roboter viel mit dem Kompass anfangen kann. Dafuer ist der Kompass zu empfindlich gegenueber Stoerquellen (selbst die eigenen Motoren!), zu ungenau (typischerweise mehrere Grad) und zu langsam (wegen des "Zitterns" muessen viele Messungen durchgefuehrt werden um einen einigermassen stabilen Mittelwert zu erhalten).

Vorausgesetzt es gibt keine groesseren Stoerquellen, dann kann man den Kompass hoechstens in Kombination mit Gyro+Accel benutzen: Langzeitmessung mit Kompass, Kurzzeitmessung mit Gyro+Accel, dann das ganze mit Sensorfusion zusammenrechnen. Auf diese Weise kann der Kompass benutzt werden um die Langzeit-Intergrationsfehler von Gyro+Accel auszugleichen. Aber selbst das wird nicht unbedingt klappen.

Edit: Ich sehe gerade, dass Boch einen BNO055 (statt BMX055) mit eingebautem Sensorfusion hat.

Benutzeravatar
MasterOfGizmo
Beiträge: 2720
Registriert: 30 Nov 2014, 07:44

Re: Kombisensor (Accel, Gyro, Kompass, aka. Bosch BMX055)

Beitrag von MasterOfGizmo » 12 Nov 2017, 11:34

Zur Info: Für die CFW habe ich vor einiger Zeit mal ein kleines Beispiel für diesen Sensor gemacht:

https://github.com/harbaum/cfw-apps/tre ... ges/bmx055

Den Kompass habe ich allerdings auskommentiert. Weiss selbst nicht mehr genau, warum ich das damals gemacht habe.
Arduino für fischertechnik: ftDuino http://ftduino.de, ftDuino32 http://ftduino.de/32

Lars
Beiträge: 564
Registriert: 25 Okt 2016, 21:50

Re: Kombisensor (Accel, Gyro, Kompass, aka. Bosch BMX055)

Beitrag von Lars » 12 Nov 2017, 11:42

Hallo zusammen,

als ersten Ansatz könnte man den Roboter ja erstmal als Fahrzeug bauen. Dann läßt man ihn auf einer glatten, ebenen Oberfläche für den Anfang gerade Strecken fahren und zeichnet sowohl die Impulse des Antriebs (beispielsweise aus dem Encodermotor) als auch die laufenden Ausgaben des Sensors auf. Das kann man dann mit Hilfe von Excel o.ä. auswerten und anhand der gewonnen Kurven die mathematische Natur des Zusammenhangs zwischen gefahrener Strecke und den Werten des Sensors ermitteln.

Das wiederholt man dann mit verschiedenen Einbauplätzen am Fahrzeug, auch um den tatsächlichen Einfluß von Störquellen insbesondere beim Kompaß sichtbar zu machen.

Mit der Kamera könnte man einige absolute Positionsmarken erkennen lassen, mit dem Ultraschall-Abstandssensor den Abstand zur Marke hinzufügen und so eine absolute Position bekommen.

Mit freundlichen Grüßen
Lars

fanboy
Beiträge: 17
Registriert: 24 Dez 2014, 23:28

Re: Kombisensor (Accel, Gyro, Kompass, aka. Bosch BMX055)

Beitrag von fanboy » 18 Nov 2017, 13:01

Vielen Dank für all Eure Ideen. :D Nach einer Menge weiterer Versuche bin ich jetzt von RoboPro auf die CFW umgestiegen. Mit RoboPro ist der Algorithmus um sinnvolle Werte aus dem Rauschen des Sensors rauszubekommen einfach zu aufwendig. Mit dem tollen Python Script fuer den BMX055 hat es gleich geklappt und ich habe die gleichen Werte wie unter RoboPro!

OK, AT ist die Temperatur. Guter Tipp. Bei einem Beschleunigungssensor wäre ich da nicht drauf gekommen. Passt.

Die grossen Werte fuer AZ liegen tatsächlich darauf wie der Sensor liegt. Wenn ich den TXT mit Sensor auf den Kopf kippe bekomme ich statt -16000 etwa 16000. Also muss ich wohl erst mal in der Ruhelage "kalibrieren" und so den wahren Nullpunkt für AX, AY, AZ finden.

Ich habe auch jetzt versucht ein Stück nach vorne zu fahren und dann über die akkumulierten Beschleunigungswerte die Strecke zu errechnen. Das hat leider nicht geklappt.

Das Gyroskop liefert mir auch noch keine sinnvoll zu verarbeitenden Werte.

Ich denke der Ansatz erst mal ein fest vorgegebenes Stück nach vorne zu fahren und an Hand der Sensorwerte die Strecke zu berechnen ist gut. Bisher sind aber die Ergebnisse des Encodermotors noch genauer.

Habt einer von Euch es geschafft über den Sensor die zurückgelegte Strecke zu berechnen?

Danke, Philipp

chehr
Beiträge: 193
Registriert: 07 Apr 2015, 21:07
Wohnort: Friedrichshafen

Re: Kombisensor (Accel, Gyro, Kompass, aka. Bosch BMX055)

Beitrag von chehr » 18 Nov 2017, 19:52

Hallo Philipp,
fanboy hat geschrieben: Habt einer von Euch es geschafft über den Sensor die zurückgelegte Strecke zu berechnen?
Ich habe schon viel Zeit in das Thema investiert und auch schon viele Sensoren untersucht.

Prinzipiell brauchst du nur die Beschleunigungswerte zwei mal über die Zeit Integrieren um die Strecke zu berechnen. Jedoch wird das Ergebnis mit diesem Sensor immer viel ungenauer sein bezogen auf deinen Encodermotor.

Für diese Aufgabe sollte man Sensorfusion aus Beschleunigung, Drehgeschwindigkeit und Magnetfeld machen um den Sensordrift zu minimieren. Auch verbessert ein Filteralgorithmus die Positionsgenauigkeit.
Das könntest du halbwegs auf dem TXT machen, jedoch ist die Bandbreite mit I2C das limitierende. Deshalb wäre der Bosch Sensor BNO055 der viel besser geeignete Sensor für diese Aufgabe. Für die Wegbestimmung sind die Quaternions vorgesehen.

Zur info, mein Python code für den BNO055 ist unter
https://github.com/chehr/ftc-apps/tree/ ... I2C_bno055

Gruß
Christian

Aber natürlich ist der BMX055 ein Super Sensor um sich mit der Sensorfusion und Filtertechnik auseinanderzusetzen bzw selbst zu implementieren - also er hat sicher einen tollen Lerneffekt bezüglich deinem Ziel die Wegstrecke zu ermitteln.

Lars
Beiträge: 564
Registriert: 25 Okt 2016, 21:50

Re: Kombisensor (Accel, Gyro, Kompass, aka. Bosch BMX055)

Beitrag von Lars » 18 Nov 2017, 22:49

Hallo zusammen,
chehr hat geschrieben:Ich habe schon viel Zeit in das Thema investiert und auch schon viele Sensoren untersucht.
Das ist mein Problem - soviel Programmierung wollte ich eigentlich gar nicht. Ich halte mich derzeit noch an der Entwicklung eines guten lenkbaren Fahrzeugs fest, das sich für einen stabilen Stand absenken läßt.
chehr hat geschrieben:Prinzipiell brauchst du nur die Beschleunigungswerte zwei mal über die Zeit Integrieren um die Strecke zu berechnen. Jedoch wird das Ergebnis mit diesem Sensor immer viel ungenauer sein bezogen auf deinen Encodermotor.
Orientierung allein mit so einem Kombisensor ist attraktiv, weil er sich leicht verbauen läßt und man beim Antrieb dann die freie Wahl hat. So könnte man beispielsweise zum leistungsfähigeren Powermotor greifen, der keinen Encoder hat und daher zur Odometrie nichts beitragen kann.

Auf der anderen Seite kann man ja schon mit ROBOPro zwei Encodermotoren synchron laufen lassen und hat so für ft-Verhältnisse schon recht ordentlich Kraft, insbesondere wenn man die neueste Generation aus dem "TXT Discovery Set" verbaut.
chehr hat geschrieben:Für diese Aufgabe sollte man Sensorfusion aus Beschleunigung, Drehgeschwindigkeit und Magnetfeld machen um den Sensordrift zu minimieren. Auch verbessert ein Filteralgorithmus die Positionsgenauigkeit.
Vermutlich läßt sich der Kombisensor noch am einfachsten dazu verwenden, etwas motorisiert gerade zu halten, zu balancieren o.ä. Ob die RIchtung genau genug ist, die der Kompaß liefert, habe ich noch nicht ausprobiert. Wenn man das ft-Beispielprogramm startet, läuft der leider manchmal nicht mit und sein Wert bleibt 0.

Mit freundlichen Grüßen
Lars

deets
Beiträge: 12
Registriert: 11 Nov 2017, 11:02

Re: Kombisensor (Accel, Gyro, Kompass, aka. Bosch BMX055)

Beitrag von deets » 19 Nov 2017, 08:38

Nur als kleiner Hinweis: MEMS Sensoren unterliegen einer stark temperaturabhängigen drift. Selbst beobachtet an einer MPU6050. Darum haben die immer einen Temperatursensor eingebaut, um entsprechende kalibration vornehmen zu können.

fanboy
Beiträge: 17
Registriert: 24 Dez 2014, 23:28

Re: Kombisensor (Accel, Gyro, Kompass, aka. Bosch BMX055)

Beitrag von fanboy » 25 Nov 2017, 22:47

So, nun habe ich den BNO055 angeschlossen und der Sensor läuft! Dank Christians bno055.py habe ich auch schon einen guten Startpunkt. Die Werte vom Magnetometer im unteren Bereich passen. Allerdings sind die Accelerometer Werte, die im oberen Bereich angezeigt werden sollen, nicht da. Es wird hier weder ein Wert angezeigt noch bewegen sich einer der drei Regler (ValueWidget).

Christian,
klappt der Acceleromter bei Dir?

Danke,
Philipp

chehr
Beiträge: 193
Registriert: 07 Apr 2015, 21:07
Wohnort: Friedrichshafen

Re: Kombisensor (Accel, Gyro, Kompass, aka. Bosch BMX055)

Beitrag von chehr » 26 Nov 2017, 10:47

Hi Philipp,
es gibt am Anfang vom BNO055 Treiber Settings die man je nach Gebrauch ändern kann. Momentan müssten folgende Settings definiert sein:

Code: Alles auswählen

# Logging settings
ACCEL_DATA          =   False
MAG_DATA            =   True
GYRO_DATA           =   True
EULER_DATA          =   True
QUATERNION_DATA     =   True
LINEAR_ACCEL_DATA   =   False
GRAVITY_DATA        =   True
TEMP_DATA           =   True
VISUAL_VIEW         =   True
DATARATE            = 100       # Data sampling rate [ms]
LOGGING_TIME        = 300        # Logging time [s]
Das habe ich so gemacht, um die Sampling-performance zu verbessern. Also am besten ist nur solche Sensordaten auszulesen, die du benötigst, d.h. in diesem Fall auf "True" ändern und den rest auf "False".
Unter Robo Pro ist mein Treiber noch effizienter, d.h. die Datenrate ist höher, allerdings lassen sich die Daten dann nicht so komfortable speichern und auswerten wie unter Python. Falls du in Robo Pro weiterarbeiten möchtest, könnte ich dir ein Treiber zukommen lassen, zugeschnitten auf deine Bedürfnisse.

fanboy
Beiträge: 17
Registriert: 24 Dez 2014, 23:28

Re: Kombisensor (Accel, Gyro, Kompass, aka. Bosch BMX055)

Beitrag von fanboy » 27 Nov 2017, 21:05

Christian,

OK, da hätte ich auch drauf kommen können. Langsam brauchen wir wirklich einen eigenen BNO055 Thread.

Wir haben allerdings noch das Problem, dass der Sensor erst kalibriert werden muss. Sonst kommen keine anständigen Werte raus. Ich habe beim Hochfahren mal die Werte ausgegeben:

Code: Alles auswählen

   calib_sys, calib_gyro, calib_accel, calib_mag = self.bno.getCalibration()
Alle Werte sind anfangs auf Null. Anschliessend habe ich 10 Sekunden gewartet, den TXT samt Sensor in 8-Figuren bewegt und dann wieder die Werte ausgegeben. Gyroscope und Magnetometer sind dann voll kalibriert gewesen (Wert 3) und das Accelerometer auf 1. Das ist auf jeden Fall auch ein wesentlicher Grund warum meine Werte vorher nicht gestimmt haben. Norden war dann anfangs wo anders und ist später auf das "richtige" Nord gegangen.

Was komisch ist: der Sensor ist die ganze Zeit unter Strom. Wenn ich die App beende und wieder neu starte ist auch die ganze Kalibrierung hin und ich muss wieder neu kalibrieren. Man kann zwar die Kalibrierung irgendwie abspeichern aber es wäre einfach chicer wenn die Kalibrierung auch wenn ich die App beende und neustarte erhalten bleibt. U.u. ist dafür der begin der Klasse BNO055 verantwortlich, da dort auch jedes Mal alle Werte neu geschrieben werden, inkl. dem Sensor Modus.

Ich bastele jetzt mal damit rum. Es wäre schon gut wenn die App erst mal wartet bis die Kalibrierung abgschlossen ist.

Gruß,
Philipp

chehr
Beiträge: 193
Registriert: 07 Apr 2015, 21:07
Wohnort: Friedrichshafen

Re: Kombisensor (Accel, Gyro, Kompass, aka. Bosch BMX055)

Beitrag von chehr » 24 Feb 2018, 20:47

Hallo Philipp,
hast du bzgl Kalibrierung was implementiert, was ich übernehmen könnte?
fanboy hat geschrieben:Langsam brauchen wir wirklich einen eigenen BNO055 Thread.
Gibt es nun unter
viewtopic.php?f=8&t=4683

Antworten