Forum: Digitale Signalverarbeitung / DSP / Machine Learning Ort / Geschwindigkeit durch Sensoren ermitteln


von N. G. (newgeneration) Benutzerseite


Lesenswert?

Hallo Forum,

ich habe mal wieder eine Frage.
Die Ausgangslage: ich habe eine Fläche von knapp 2,5m x 2m, auf der sich 
mein Roboter positionieren muss.
Dazu habe ich folgende Sensoren verbaut: GY-89 (das ist ein Kompass- und 
Beschleunigungssensor (LSM303D) zusammen mit einem Gyro-Sensor 
(L3GD20)).
Daraus möchte ich erst einmal die aktuelle Geschwindikgkeit bekommen, 
und danach den Ort. Eigentlich mittels Mathematik und idealen Sensoren 
kein Problem.
Das Problem ist, dass die Sensoren sowohl ein Rauschen (hoch beim 
Accelerometer, niedrig beim Gyro) und einen Drift (niedrig beim 
Accelerometer, vglw. hoch beim Gyro) haben.
Somit stimmt vor allem der Ort gar nicht!

Ich kann zwar an den Rändern der Fläche sagen, dass ich an den maximalen 
Punkten angekommen bin (x = 0 an linker Wand, x = X_MAX an rechter Wand, 
y = 0 an hinterer Wand, y = Y_MAX an vorderer Wand), aber dazwischen bin 
ich mehr oder weniger blind, weil ich mich auf die Werte nicht verlassen 
kann.

Ich habe gerade in meinem Programm also zur Verfügung:
Vektor vom Beschleunigungssensor (3 Achsen +-4g mit 16bit pro Achse)
Vektor vom Gyrosensor (3 Achsen 500°/s mit je 16bit pro Achse)
Aktuelle Heading/Yaw Richtung vom Kompass oder alternativ den Vektor vom 
Kompass (3 Achsen mit je 16Bit)

Meine Frage ist also:
Wie kann ich erstens die Werte vernünftig filtern, ohne dass die 
Updaterate in den Keller geht (5kHz wären schön, ich weiß allerdings 
nicht wie realistisch das ist) und
Wie macht man so was normalerweise (fehlen mir Sensoren, etc)?

GPS oder Funkpeilung oder so etwas ist leider nicht möglich. Ultraschall 
sind auch nicht verlässlich, da zu viel im Raum unterwegs ist (obwohl 
damit schon sehr lange getestet wurde).

Danke im Voraus und mit freundlichen Grüßen,
N.G.

von Peter II (Gast)


Lesenswert?

Kalman-Filter dürfte dafür das richtige sein.

Kannst du nicht die Räder besser auswerten? Wenn sie keine Schlupf haben 
sollte sie damit recht genau die Position bestimmen lassen.

von N. G. (newgeneration) Benutzerseite


Lesenswert?

Hallo Peter, danke für deine Antwort

Peter II schrieb:
> Kalman-Filter dürfte dafür das richtige sein.

Ich bin auch schon darauf gestoßen, aber ich habe diesen Filter noch 
nicht verstanden, was evtl auch daran liegt, dass jeder es anders 
erklärt, und für jemanden, der neu in der Materie ist, zu viel 
voraussetzt.

Peter II schrieb:
> Kannst du nicht die Räder besser auswerten? Wenn sie keine Schlupf haben
> sollte sie damit recht genau die Position bestimmen lassen.

Leider nicht. Erstens haben diese weder Encoder noch Rotatuonssensiren 
oder ähnliches und (schlimmer) diese können extrem durchdrehen. Beim 
Richtungswechsel ist es richtig schlimm: der Roboter rutscht teilweise 
noch mehrere Zentimeter in die gleiche Richtung, obwohl die Räder schon 
in die andere Richtung drehen.

von Peter II (Gast)


Lesenswert?

Eventuell kannst du auch eine Optischen-Maus-sensor verbauen.

von Der Andere (Gast)


Lesenswert?

Peter II schrieb:
> Eventuell kannst du auch eine Optischen-Maus-sensor verbauen.

Der misst ja so präzise Strecken.
Und ausserdem weiss der TO immer ganz genau in welcher Richtung sein 
Robbi und damit der Maus Sensor steht.

Das Problem ist alles andere als trivial und mit der Grund dass 
praktisch alle Staugsauber und Rasenmäher-Roboter Zufallsmuster fahren.

von Peter II (Gast)


Lesenswert?

Der Andere schrieb:
> Der misst ja so präzise Strecken.
ja, soweit ich weis.

> Und ausserdem weiss der TO immer ganz genau in welcher Richtung sein
> Robbi und damit der Maus Sensor steht.
ja, dafür hat er sein Gyro

von Amateur (Gast)


Lesenswert?

>Beim Richtungswechsel ist es richtig schlimm: der Roboter rutscht
>teilweise noch mehrere Zentimeter in die gleiche Richtung, obwohl die
>Räder schon in die andere Richtung drehen.

Das wird die Reifenhersteller freuen und durch den zugehörigen 
Verschleiß auch jede Wegmessung verhindern.

Die meiste hier werden aber sagen: 'Na Hallo! Da ist irgendwas wohl im 
Argen.

Übrigens: Was willst Du mit der Position und der Geschwindigkeit denn 
anfangen, wenn Du nicht Zielgerichtet anhalten kannst?

von Der Andere (Gast)


Lesenswert?

Peter II schrieb:
> dafür hat er sein Gyro

Der misst aber nur Drehraten. Für die ansolute Richtung im Raum 
integrierst du auch wieder alle fehler mit auf.

von N. G. (newgeneration) Benutzerseite


Lesenswert?

Peter II schrieb:
> Eventuell kannst du auch eine Optischen-Maus-sensor verbauen.

Dafür ist leider auf der Unterseite kein Platz mehr, das war auch unser 
erster Ansatz.

Der Andere schrieb:
> Das Problem ist alles andere als trivial

leider hast du Recht, trivial ist es nicht. Es muss aber nicht super 
genau sein, einige cm Genauigkeit reichen.

Amateur schrieb:
>>Beim Richtungswechsel ist es richtig schlimm: der Roboter rutscht
>>teilweise noch mehrere Zentimeter in die gleiche Richtung, obwohl die
>>Räder schon in die andere Richtung drehen.
>
> Das wird die Reifenhersteller freuen und durch den zugehörigen
> Verschleiß auch jede Wegmessung verhindern.

WEnn es Gummiräder wären ja, da stimme ich dir zu. Wir reden hier aber 
nicht von Gummi auf Asphalt, sondern von einem Teppich-artigen 
Untergrund und Metallrädern (siehe Omniwheels). Diese werden auch immer 
rutschen, dass ist schließlich deren Aufgabe (Okay, ich gebe zu, das 
hätte ich oben schon schreiben können).

Amateur schrieb:
> Übrigens: Was willst Du mit der Position und der Geschwindigkeit denn
> anfangen, wenn Du nicht Zielgerichtet anhalten kannst?

Wie regelt denn deine Heizung? Die ist ja auch nicht sofort auf 
Maximaltemeperatur, wenn du sie auf 5 drehst, sonder braucht Zeit. Und 
wenn es dir dann wieder zu warm ist, drehst dus wieder runter. Das 
wiederholst du solange, bis es sich bei einer angenehmen Temperatur 
einpendelt.
Analog dazu das Fahren beim Roboter: ich weiß wi ich hin will (= 
Soll-Temperatur), also regel ich es solange, bis ich dahin komme. Gibt 
halt leider Over- und Undershoot, aber da ein Roboter schneller 
reagiert, als ein Mensch geht das. ((Funktioniert jetzt ja auch schon)

von N. G. (newgeneration) Benutzerseite


Lesenswert?

Der Andere schrieb:
> Peter II schrieb:
>> dafür hat er sein Gyro
>
> Der misst aber nur Drehraten. Für die ansolute Richtung im Raum
> integrierst du auch wieder alle fehler mit auf.

Und einen Kompass, der sogar relativ genau ist

von W.A. (Gast)


Lesenswert?

N. G. schrieb:
> Beim Richtungswechsel ist es richtig schlimm: der Roboter rutscht
> teilweise noch mehrere Zentimeter in die gleiche Richtung, obwohl
> die Räder schon in die andere Richtung drehen.

Was nützt es, die Räder wild zu drehen, wenn sie das Drehmoment des 
Motors nicht auf den Boden bringen?

Habt ihr es schon mal mit ABS und ASR probiert?

von N. G. (newgeneration) Benutzerseite


Lesenswert?

W.A. schrieb:
> Was nützt es, die Räder wild zu drehen, wenn sie das Drehmoment des
> Motors nicht auf den Boden bringen?

ganz so schlimm ist es dann auch wieder nicht. Sobald die Trägheit des 
unter 1.5kg schweren Roboters überwunden ist gehts flott in die andere 
Richtung.

W.A. schrieb:
> Habt ihr es schon mal mit ABS und ASR probiert?

Hat nichts gebracht, oder zu wenig um den zusätzlichen Aufwand zu 
rechtfertigen. Es funktioniert so wie es ist auch ganz gut. Und 
spätestens wenn irgendein Hindernis im Weg steht, bringen diese Systeme 
auch nichts mehr.

Aber zurück zum Hauptthema. Wie könnte ich die Sensoren und Berechnungen 
(wenigstens auf ~10cm genau) in  Einklang mit der echten Welt bringen?

Funktioniert ein Kalman -Filter z.B. im stehen überhaupt? Ich habe 
bisher immer nur von Gyro-Sensoren gelesen, aber dieser meldet im 
Stillstand keine Drehung, während der Beschleunignungssensor (laut im 
selbst) angeblich wild rumgeschleudert wird. Ich will sagen: Wenn es im 
stillstand schon kaum geht, wie soll es in der Bewegung funktionieren?

Und: wie lösen andere dieses Problem? Ich bin ja wohl sicher nicht der 
erste mi so einem Anliegen.

Danke schon mal für eure Antworten

von *gb* (Gast)


Lesenswert?

>Und: wie lösen andere dieses Problem? Ich bin ja wohl sicher nicht der
>erste mi so einem Anliegen.
Ich hab eine ähnliche Anwendung und einen CCD Sensor, der in ca 3m Höhe 
sitzt und die Position des Roboter optisch ermittelt. Auflösung ca 
0.2mm.

von W.A. (Gast)


Lesenswert?

N. G. schrieb:
> Und spätestens wenn irgendein Hindernis im Weg steht, bringen diese
> Systeme auch nichts mehr.

Willst du damit sagen, dass du den Roboter jetzt stur dagegen rasseln 
läßt? Fakt ist doch, dass die Gleitreibung niedriger als die Haftreibung 
ist und damit Brems- und Beschleunigungsstrecken kürzer werden, wenn man 
mit ABS oder ASR dafür sorgt, dass die Räder den Großteil der Zeit 
Bodenhaftung haben und damit in gleicher Zeit mehr Impuls auf den Boden 
übertragen können.

> Hat nichts gebracht, oder zu wenig um den zusätzlichen Aufwand zu
> rechtfertigen.

Dann ist bei der Implemenentierung wohl was schief gelauften.

von N. G. (newgeneration) Benutzerseite


Lesenswert?

Hallo Zusammen,

um jetzt mal mit ein paar Unklarheiten aufzuräumen:
Es geht um fußballspielende Roboter auf dem Robocup Junior. Wem das 
nichts sagt: hier ein paar Impressionen: 
https://www.youtube.com/watch?v=TYeKAMcxOPs

Ich wollte nur erst mal das Problem abstrakt darstellen, hilft mir 
meistens beim Lösungen finden.

*gb* schrieb:
>>Und: wie lösen andere dieses Problem? Ich bin ja wohl sicher nicht der
>>erste mi so einem Anliegen.
> Ich hab eine ähnliche Anwendung und einen CCD Sensor, der in ca 3m Höhe
> sitzt und die Position des Roboter optisch ermittelt. Auflösung ca
> 0.2mm.

Ist eine gute Idee, so weit ich weiß gibt es das auf dem "echten" 
Robocup (für Unis etc.) auch genau so eine Liga. Nennt sich wohl Small 
Size League.
Leider ist das in unserem Fall nicht erlaubt. Das wäre die ideale 
Lösung. Mittels verschiedener Punkte und Farben könnte man sogar die 
Roboter unterscheiden und die Drehung, Geschwindigkeit und Ort 
bestimmen. Leider nicht möglich.

W.A. schrieb:
> N. G. schrieb:
>> Und spätestens wenn irgendein Hindernis im Weg steht, bringen diese
>> Systeme auch nichts mehr.
>
> Willst du damit sagen, dass du den Roboter jetzt stur dagegen rasseln
> läßt?

Kommt drauf an ob es die Wand, der Gegner oder der Ball ist. Bei der 
Wand nein, die sollte der Roboter nicht mal berühren, wobei es bei den 
Toren durchaus vorkommt, dass er mit voller Geschwindigkeit dagegen 
fährt.
Bei Gegnern und Ball sowieso (Die beiden Roboter von uns kommunizieren, 
sollten also so gut wie nie gegeneinander fahren). Kann man im Video 
auch relativ gut sehen.

> Fakt ist doch, dass die Gleitreibung niedriger als die Haftreibung
> ist und damit Brems- und Beschleunigungsstrecken kürzer werden, wenn man
> mit ABS oder ASR dafür sorgt, dass die Räder den Großteil der Zeit
> Bodenhaftung haben und damit in gleicher Zeit mehr Impuls auf den Boden
> übertragen können.

Du machst allerdings im Auto auf der Autobahn auch nicht den 
Rückwärtsgang rein und erwartest, dass du sofort in die andere Richtung 
fährst ;)

>> Hat nichts gebracht, oder zu wenig um den zusätzlichen Aufwand zu
>> rechtfertigen.
>
> Dann ist bei der Implemenentierung wohl was schief gelauften

Kann schon sein, war uns aber wie gesagt nicht so wichtig. Extrem ist 
dieses Schlittern nicht.

Es wäre schön wenn noch jemand mit mehr Ahnung als ich (also praktisch 
jeder der sich mal kurz mit der Materie beschäftigt hat) etwas zur 
(digitalen) Filterung sagen könnte.

Danke trotzdem an alle die sich beteiligen!

mit freundlichen Grüßen,
N.G.

PS: wir nutzten das Modul GY-89, das hat einen integrierten LDO von 5V 
auf 3.3V für die Chips.
Allerdings kommen unsere 5V von einem Schaltregler, der zwar weit vom 
Modul weg ist, aber evtl sind da Störungen drauf (obwohl man am Oszi 
nichts sieht, kann ich mir aber ohne Filterung nicht wirklich 
vorstellen).
Könnte da die Glättung von VCC helfen? (zB mittels LC-filter?)
Der Buck-Converter ist dieser hier: LM2576T-5.0 (58kHz)
Bei dem Modul weiß ich den LDO leider nicht

von N. G. (newgeneration) Benutzerseite


Lesenswert?

in der Hoffnung auf neue Antworten...
einmal Push bitte ;)

von Herbert (Gast)


Lesenswert?

N. G. schrieb:
> Dazu habe ich folgende Sensoren verbaut: GY-89 (das ist ein Kompass- und
> Beschleunigungssensor (LSM303D) zusammen mit einem Gyro-Sensor
> (L3GD20)).

Das ist natürlich ein absoluter billig Mist. Gyros driften, Accs 
rauschen, das hast du ja bereits gesagt. Je billiger die Sensoren, desto 
schlimmer ist es. Im Datenblatt findest du ja die jeweiligen Drift- und 
Rauschwerte. Du kannst die ja mal aufintegrieren (nur die Drift), dann 
hast du eine ungefähre Abschätzung wie gut das geht und vor allem wie 
lange. Wenn du alle 10s einen fixen Punkt oder so hast bei dem du deine 
Sensorik "nullen" kannst, dann könnte ich mir schon vorstellen, dass das 
mit einigen cm Genauigkeit funktioniert. Wie gesagt - das kannst du ja 
aus den Datenblattangaben ausrechnen. Ansonsten in ein Kalmanfilter 
natürlich das mittel der Wahl, es gibt inzwischen genügend 
Implementierungen frei zur Verfügung. Google evtl. mal nach IMU, INS und 
AHRS. Meistens kommst du dann auf irgendwelche Quadrocopter Codes. 
Alternativ wäre ein Komplementärfilter. Grundsätzlich wirst du aber 
(meiner Einschätzung nach) nicht darum herumkommen eine andere Art der 
optischen Wegstreckenmessung vorzunehmen. Der Maussensor wurde dir ja 
bereits ans Herz gelegt, das dürfte sehr gut funktionieren auf 
definiertem Untergrund. Dann musst du eben Platz schaffen für den 
Sensor. Der Sensor muss ja nicht zentral mittig stehen, sondern du 
kannst ja auch zwei verbauen, einer Vorne, einer Hinten. Daraus kannst 
du dir Drehung und Wegstrecke (die sogar redundant) messen. Weiter fällt 
mir LIDAR ein, da gibt es für 350€ inzwischen sehr brauchbare Lösungen 
die aus dem Quadrocopter Bereich kommen. z.B. 
http://www.robotshop.com/en/rplidar-360-laser-scanner.html
Das sind so prinzipiell die Möglichkeiten wenn du nicht die Möglichkeit 
hast irgend was außen am Fahrbereich fest anzubringen. Ansonsten könnte 
man z.B. 2 oder mehr mit Motor drehbare Laserpointer auf PSD 
(https://de.wikipedia.org/wiki/Position_Sensitive_Device) am Roboter 
richten. Die werden dann - auch während der Roboter verfährt - immer auf 
das Zentrum der PSDs geregelt. Die Korrekturen würde der Roboter dann 
per Funk oder IR an die feste(n) Station(en) senden. Aus den Kenngrößen 
der Regelung kann man sehr einfach die Position herausfinden.

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.