Hallo zusammen,
ich habe folgendes Problem. Wenn ich meinen 3 Achsen Beschleuningssensor auslese, dass schwanken die Werte obwohl der Sensor nicht bewegt wird. Nun ist die Frage wie ich diese Schwankungen ausgleichen kann, denn wenn ich zb die Daten eines Wii-Nunchucks auslese und dieser auf dem Tisch liegt dann ändern sich die Werte nicht im geringsten. Also wie gehe ich so etwas am besten an?
„Inmitten der Schwierigkeiten liegt die Möglichkeit.“
Albert Einstein
Mittelwertbildung ist mir auch als erstes in den Sinn gekommen aber hab dann befürchtet, dass das die ganze Sache schlicht und ergreifend zu ungenau macht. Da es ja immer etwas dauert bis man die Messungen durch hat und bei einer starken Änderung der G-Werte würde das natürlich auch etwas suboptimal ablaufen oder?
„Inmitten der Schwierigkeiten liegt die Möglichkeit.“
Albert Einstein
Hmm okay das ist schon klar, dass die AD Wandlung ziemlich flott geht aber dennoch scheint mir das etwas zu einfach. Ist das wirklich die übliche Methode vorzugehen wie sie auch zb eine Wii nutzen?
„Inmitten der Schwierigkeiten liegt die Möglichkeit.“
Albert Einstein
Du kannst den Tiefpass auch per Hardware realisieren. Indem du einen Widerstand und einen Kondensator anschliesst. Wie genau das geht weiss die Suchmaschine die Chuck Norris nicht findet (jedenfalls die US Version davon).
Gruß Daniel
Unser Sommer ist ein grün angestrichener Winter. Das einzige reife Obst, das wir haben, sind gebratene Äpfel. [Heinrich Heine]
Man darf nicht vergessen das ein "Tieffpass", hard oder software, nicht nur das Rauschen, aber auch die Bandbreite von das Signal verringert. Beim schnelle G-Aenderungen, kommt dan die Messwerte fiel spater dan die G-Aenderung. Beispiel : ein Balance Roboter. Die Messwerte von Winkelposition darf keine Sekunde hinterlaufen von die Ist-Position, dan ist das Ding lange gecrasht.
Ich sollte erst das Datenblatt von den Sensor ansehen, da gibt schon eine Aussage von Bandbreite und rauschen. Danach kan menn entscheiden welche Bandbreite wirklich notwendig ist, und entsprechend Sample Rate / Mittelwerte einstellen, oder eine Teifpass HW machen.
Da git noch eine einfache SW filter, das ohne grosse Daten Arrays functioniert : Neue Sensorwerte = ADC_Messung* 0.1 + Alte Sensorwerte*0.9. Ist nicht exact einen Mittelwerte Bildung, aber das Ergebnis ist recht gut.
Stimmt natürlich, aber Kompromisse wird man eingehen müssen und bei den Trikoptern die auch mit gleitendem Mittelwert arbeiten, klappt das doch schon ganz gut. Es kommt halt auch auf die Abtastrate und den Rest das Programm Ablaufes an ob schnell genug reagiert wird. Dazu wird auch ein PID Regelkreis gehören, da die Sensoren leider alle einen gewissen Drift haben bleibt auch keine andere Wahl als zu "tricksen".
Gruß Richard
Du könntest ein Kalman-Filter verwenden. Hier gibts evtl. sogar Code, den du mal leicht modifiziert testen könntest:
http://forum.mikrokopter.de/topic-5875.html
Im Nao (Aldebaran-Robotics) verwenden wir zur Filterung von verschiedenen Sensordaten auch nen Kalman-Filter. Reagiert immer noch recht schnell auf Änderungen aber eliminiert das Rauschen der Sensorwerte recht gut.
Cheers,
Thomas
Lesezeichen