PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : NIBObee Video, Odometrie, Probleme mit unsymmetrischer Motor



s.frings
13.04.2010, 13:49
Hallo leute,
meine Motorsteuerung mittels Odometrie klappt schon ganz gut, und weil ich die Freude mit euch teilen möchte, ist hier ein Video davon:

http://www.youtube.com/watch?v=9EFK7XmfD08

Für das Video brauchte ich mehrere Versuche, denn ganz so gut läuft es nicht immer ab. Ich kämpfe noch ein bischen mit der unterschiedlichen Motor-Performance.

Erstens hängt sie offensichtlich von der Drehrichtung ab: Der Roboter neigt bei beiden Fahrtrichtungen zum Links-Drall, weil die Motoren offensichtlich ein eine Richtung performanter sind, als in die andere und blöderweise beide Motoren nicht gleich herum eingebaut sind.

Dazu kommt, daß die Motoren auch bei gleicher Laufrichtung nicht die gleiche Performance bieten.

Zwar gleicht der Roboter Abweichungen durch integrales und propertionales Gegenlenken aus, aber im Moment des Anfahrens nützt das nichts.

Deswegen habe ich vor, zwei weitere Konfigurationsparameter für diese beiden Leistungsverhältnisse einzufügen. Ich hoffe, daß er dann exakt geradeaus fährt und daß Radius und Länge von links/rechts Kurven identisch sind.

Als nächster Schritt kommt dann das Fahren auf Teppichboden. Ich stelle mir vor, daß der Roboter mit einem einzigen Programm sowohl auf Laminat als auch auf Teppichboden das gleiche Muster fahren können soll. Das wird noch spannend, muss erstmal in den Baumarkt einen Teppich kaufen :-)

Den Source Code von dem Programm möchte ich nicht veröffentlichen. Wenn ich nämlich wie bisher weiter mache, mülle ich das Forum noch zu, und eigentlich ist es doch Sinn der Sache, daß jeder diese Probleme selbst erforscht und löst - natürlich mit Hilfe der netten Helfer hier und der Wissens-Sammlung des RoboterNetz.

Wenn ich mit meiner Motorsteuerung völlig zufrieden bin (falls ich es überhaupt soweit schaffe), kann ich ja gerne mal die aufgetretenen Probleme und die angewendete Regelunsgtechnik zusammenfassend beschrieben.

bantyy
14.04.2010, 11:33
Hallo,

ich kann mir zur Zeit das Video noch nicht ansehen - erst heute abend...


Für das Video brauchte ich mehrere Versuche, denn ganz so gut läuft es nicht immer ab. Ich kämpfe noch ein bischen mit der unterschiedlichen Motor-Performance.

[...]

Zwar gleicht der Roboter Abweichungen durch integrales und propertionales Gegenlenken aus, aber im Moment des Anfahrens nützt das nichts.

Ich frage mich, welche Genauigkeit Du erwartest? Meine Regelung "krank" auch daran, trotzdem fährt die Biene auf Teppichboden relativ gerade. Nicht exakt, die äußeren Einflüsse sind einfach ziemlich groß. Wenn ich einen Kreis fahren lasse, klappt das auch ziemlich gut, der Kreis wird schon viele Runden lang eingehalten.

Ich habe bei mir erstmal weitere Arbeiten an der Motorregelung eingestellt, weil ich erstmal mit dem RC5-Empfänger und dem Liniensensor weiter machen will. Wenn das ganze läuft, baue ich vielleicht noch einen echten PID-Regler ein. Mal sehen, wie viel besser der ist.

Abgesehen davon habe ich meine Library gerade zum hosten eingereicht. Wenn das Projekt freigegeben ist, werde ich es posten - da können wir dann alle dran rum wurschteln :-)

Ciao bantyy

oberallgeier
14.04.2010, 12:27
... aber im Moment des Anfahrens nützt das nichts ...Genau das ist eines der Reg elungsprobleme. Ich hatte das so gelöst, dass ich möglichst erst mit dem PW M-Wert anfahre, der beide Motore zum Laufen bewegen kann.

Rabenauge
14.04.2010, 12:33
Ich würde sagen, das kommt echt drauf an, was man vor hat.
Die Biene _hat_ nunmal eine recht gute Odometrie, wieso also sollte man die nicht nutzen?
Sie ein bisschen herumfahren lassen ist langweilig, das kann mein RC-Monstertruck bedeutend eindrucksvoller. ;)
Wenn man aber die (ja nunmal vorhandene) Odometrie auch nutzen will, dann sollte man schon versuchen, das maximal mögliche herauszuholen, sehe ich genauso.
Zumindest gehe ich davon aus, dass die Biene durchaus im Stande ist, ein Viertelstündchen herumzufahren und dann wieder heimzufinden.
Inklusive Brems-Richtungsänderungs- und Umkehrmanöver.
Und ich halte es durchaus für möglich, immerhin (ich selber bastele erstmal an einem Motoren-Getriebe-Diagnoseprogramm
) zeigen ja euere Versuche, dass da so einiges geht, also hat die Biene es drauf.
Radschlupf? Kann man nahezu eliminieren, wieso denn nicht? Geht mit nem Auto auf Glatteis doch auch.
Unterschiedliche Motorleistung? Auch kompensierbar.
Einzig der vorhandene Speicher schränkt die Geschichte _irgendwann_ ein, aber selbst der ist recht preiswert aufrüstbar, also, wieso nicht..

s.frings
14.04.2010, 13:57
Bein Anfahren bricht der Roboter oft zu einer Seite hin aus.

Manchmal starten die Motoren nicht zum gleichen Zeitpunkt, das kann man durch Gegenlenken dank der Odometrie ausgleichen. Aber: Wenn der Roboter statt geradeaus mit einer Linkskurve beginnt, und ich dann nach rechts ausgleiche, und dann mit Glück exakt geradeaus zurück fahre, dann kommt ich nicht zum Ausgangspunkt zurück, sondern links daneben.

Meine Rechtskurve zum Ausgleich müsste also noch größer sein, als die ungewollte Linkskurve und dann muß ich nochmal nach links lenken, um wieder gerade zu stehen. Ich bezweifle, daß diese komplexen Lenkmanöver auf eine Strecke unter 1 Meter zuverlässig klappen.

Ein anderes Problem ist, daß immer wieder Räder durchrutschen, vor allem wegen Staub und Sandkörner auf dem Bodem. Richtig blöd ist, wenn der Roboter über ein Sandkorn fährt, und das dann auf der Radoberfläche kleben bleibt. Dann ist nämlich die ganze Odometrie für die Tonne.

Wenn ich mir diverse Videos bei Youtube anschaue, hab' ich vermutlich bereits die grenzen des Machbaren erreicht. Ich habe nämlich keinen anderen Roboter mit gleichem Antriebs-Prinzip dort gesehen, der gerader fährt und sauberer anfährt.

Ich habe auch im Internet keinen einzigen Industrieroboter gefunden, der autark durch die Gegend fährt, ohne sich an irgendwelchen Markierungen zu orientieren.

Odometrie ist schön und gut, aber trotz der ganzen Mathematik bin ich nun sicher, daß ein zuverlässiges Einhalten der programmierten Strecke anhand der Odometrie Sensoren alleine nicht möglich sein wird.

Momentan fährt mein Roboter eine Strecke von etwa 10 Meter, wobei er mehrmals die Fahrtrichtung wechselt, sich auf der Stelle dreht, zwei achten fährt und dann +/-20cm wieder zum Ausgangspunkt zurück kehrt - wenn der Boden sauber ist.

Auf Teppich klappt es gar nicht mehr so gut, da weicht die tatsächlich gefahrene Strecke deutlich mehr von der gemessenen Strecke der Sensoren ab. Geradeaus fahren geht auf Teppich auch gut, aber die Distanz stimmt nicht und Kurven werden in ganz anderen Radien gefahren, als aus Laminat (bei gleicher Programmierung).

Rabenauge: Wie willst Du denn bei der NIBObee den Radschlupf eliminieren? Er kann ja nicht einmal erkannt werden. Ein Auto auf Glatteis zu steuern ist auch nur möglich, weil der Fahrer die Umgebung wahrnimmt und sich daran orientiert. Wenn Du die Scheiben undurchsichtig machst, und der Fahrer dann nur anhand von Tacho und Lenkrad-Position fahren soll, dann kann er das auch nicht mehr.

Vieleicht wäre das mal eine Iddee für "Wetten dass...", falls es doch jemand schafft.

Um auf das Glatteis-Auto zurück zu kommen: In der Landwirtschaft gibt es schon autarke Mascinen, die Felder bestellen. Sie orientieren sich je nach Bauart an optischen Markierungen oder mit GPS. Die GPS Variante wird im Wohnzimmer nicht klappen, und wenn ich die ganze Wohnung mit bunten Klebestreifen versehe, wird meine Frau rebellieren. Außerdem habe ich Katzen und zwei Kinder, die die Markierungen sabottieren werden.

Vor zwei Wochen field mir dies ein: Ich könnten unter der Decke an den zwei Ecken einer Wand Schnüre (Nähgarn) befestigen, die zum Roboter verlaufen. Der hat oben drauf zwei Rollen, welche per Motor so angetrieben werden, daß die Schnüre immer leicht gespannt sind. Anhand der Rotation der Nähgarnrollen erfasse ich Länge der Schnüre von der Decke bis zum Roboter, und anhand der Differenz beider Längen ergibt sich die Position des Roboters.

Das geht natürlich nur in einem Raum und funktioniert nicht, wenn der Roboter unter das Bett fährt. Also auch irgendwie doof.

Aber ich suche noch nach einer praktikablen Alternative, mir wird schon noch etwas einfallen.

workwind
14.04.2010, 14:37
Das Odometrieproblem hatten wir damals auch bei unseren Fussballrobotern (AllemaniACs, MSL), die Lösung heisst Lokalisation!

Die Odometrie gibt eine kurzzeitige präzise Ortsänderungsinformation und die Lokalisation eine ungefähre, aber absolute Position. Das bedeutet wenn man weiss wo man ist, kann man mit Hilfe der Odometrie feststellen wohin man fährt. Diese Information ist wiederum für die Lokalisation sehr nützlich, mit der man den Fehler der Odometrie wiederum korrigieren kann.

Man benötigt für das Verfahren jedoch eine zusätzliche Informationsquelle über die Umgebung, zum Beispiel einen Laserscanner, oder einen Distanzsensor auf einem Servo.
Die Schwierigkeit liegt bei der Verknüpfung der Odometrie und der Scanner Daten....

bantyy
14.04.2010, 15:35
Hallo,


Ich hatte das so gelöst, dass ich möglichst erst mit dem PWM-Wert anfahre, der beide Motore zum Laufen bewegen kann.

Meine Regelung kennt die Werte 0 - 100, wobei 0 = Motor Stopp, 1 = minimale Geschwindigkeit ( = 1 Radsensortick / 125 ms) bis 100 ( = 1 Radsensortick / 12,5 ms). Ich starte mit den PWM-Werten, die rechnerisch diese Geschwindigkeiten erreichen sollten, die minimale Anfahrgeschwindigkeit ist höher als die minimale Fahrgeschwindigkeit.


Die Biene _hat_ nunmal eine recht gute Odometrie, wieso also sollte man die nicht nutzen?

Die Odometrie ist tatsächlich gut, wie ich meine, und es ist auch sehr sinnvoll, sie zu nutzen. Die Frage ist nur, was erwartet ihr von einer Regelung mittels Odometrie? Beispiel: Meine Biene hat ohne Regelung bei gleichen PWM-Werten nach ca. 2 m eine Abweichung von 2 m nach rechts gefahren. Mit Regelung fährt sie auf 5 m ca. 10 cm falsch - mal nach rechts, mal nach links, je nach Bodenbeschaffenheit. Ich finde das durchaus ein beeindruckendes Ergebnis - scheinbar erwartet ihr hier etwas anderes.


Zumindest gehe ich davon aus, dass die Biene durchaus im Stande ist, ein Viertelstündchen herumzufahren und dann wieder heimzufinden.

Das glaube ich auch, die Frage ist nur, _wie_ sie das anstellt. Und mit Odometrie allein weiss ich nicht, ob dass erreichbar ist.


Radschlupf? Kann man nahezu eliminieren, wieso denn nicht? Geht mit nem Auto auf Glatteis doch auch.

Moment mal, den Radschlupf auf Glatteis kann man auch beim Auto nicht verhindern. Fahr doch mal mit Sommerreifen auf Glatteis - da wird das ESR dafür Sorgen, dass Dein Auto stehen bleibt. OK, dann gibts auch keinen Schlupf mehr ;-)

Und bei der Biene hast Du ja kaum eine Chance, Schlupf zu erkennen. Beim Auto wird ja auch nur _unterschiedlicher_ Schlupf an den Rädern erkannt - und ein Auto hat immerhin vier davon. Die Biene nur zwei und das halte ich schon für problematisch, dazu kommt, dass ein Auto nur gesteuert und nicht geregelt wird.


Bein Anfahren bricht der Roboter oft zu einer Seite hin aus.

Manchmal starten die Motoren nicht zum gleichen Zeitpunkt, das kann man durch Gegenlenken dank der Odometrie ausgleichen.

Huch? Ist das denn bei Dir gravierend? Bei mir ist das kein Problem, die Motoren starten bei mir schon immer gleichzeitig, nur mit ganz leicht unterschiedlichen Geschwindigkeiten. Das wird aber so schnell ausgeglichen, dass dieser Unterschied nicht zu einem "schräg fahren" führt.


Momentan fährt mein Roboter eine Strecke von etwa 10 Meter, wobei er mehrmals die Fahrtrichtung wechselt, sich auf der Stelle dreht, zwei achten fährt und dann +/-20cm wieder zum Ausgangspunkt zurück kehrt - wenn der Boden sauber ist.

Genau das meine ich: Was erwartet ihr denn? Das der Roboter nach so einer Aktion tatsächlich auf den Milimeter an der gleichen Stelle ankommt? Wenn ja, gebe ich einen Tipp: Macht Markierungen auf den Boden und lasst den Liniensensor diese Markierungen erfassen. Muss ja keine Linie sein, es reichen ja ein paar Punkte, an denen der Roboter auf jeden Fall vorbei kommt. An diesen Stellen kann der Roboter sich neu justieren und fährt ab so einem Punkt wieder mit präzisen Werten los.


Die Odometrie gibt eine kurzzeitige präzise Ortsänderungsinformation und die Lokalisation eine ungefähre, aber absolute Position. Das bedeutet wenn man weiss wo man ist, kann man mit Hilfe der Odometrie feststellen wohin man fährt. Diese Information ist wiederum für die Lokalisation sehr nützlich, mit der man den Fehler der Odometrie wiederum korrigieren kann.

Genau so sieht es aus. :-)


Man benötigt für das Verfahren jedoch eine zusätzliche Informationsquelle über die Umgebung, zum Beispiel einen Laserscanner, oder einen Distanzsensor auf einem Servo.
Die Schwierigkeit liegt bei der Verknüpfung der Odometrie und der Scanner Daten....

Oder - man nutzt markante Punkte, die mit dem Liniensensor erfasst werden können. Siehe oben :-) Der Phantasie ist da vermutlich keine Grenzen gesetzt.

Irgendjemand hier hatte doch einen Distanzsensor an einen Servo angeschlossen und das ganze auf die Biene gebaut. Das sah durchaus interessant aus :-) Außerdem hab ich hier noch ein Bit-Banging-Display und den ATmega16 aus der Biene rumfliegen (meine fährt mit nem ATmega644) - also Ideen, die Biene zu erweitern gibts genug...

Happy Engineering ;-)
Ciao bantyy

s.frings
14.04.2010, 17:13
Ich hatte wirklich perfekte Regelung angestrebt. Zu dumm, dass die Odometrie Sensoren nur die Rotation der Räder erfassen, und nicht die tatsächliche Fortbewegung. Da ist es einleuchtend, dass Abweichungen zwangsläufig vorkommen.

Ganz besonders bei Kurvenfahrten weicht die tatsächliche Bewegung stark von der gemessenen ab (was bei den breiten Reifen auch kein Wunder ist). Beim Vergleich Laminat/Teppich sieht man das besonders deutlich. Nun ist ja jeder Teppich wiederum anders beschaffen. Ich denke, es war gut und lehrreich, mich mit diesem Thema auseinander zu setzen. In künftigen Programmen werde ich aber nicht mehr versuchen, exakte Kurven und Drehungen hin zu bekommen. Das geht sowieso nicht, jedenfalls nicht, wenn der Bodenbelag wechselt.

Praktikabel scheint mir eine ungefähre Geschwindigkeitsregelung der Motoren, sowie ein Geradeaus-Lauf. Und das bekomme ich sicher auch ohne Fließkomma-Zahlen hin, was mir ganz recht ist, denn die "math" Library kostet viel Programmspeicher und Zeit. Wenn die Regelung einfach genug ist, kann ich sie in der Interrupt-Routine vom PWM-Counter unterbringen. Ich denke, das werde ich jetzt mal versuchen.

Wie dem auch sei: Ich würde jedem Bastler hier empfehlen, das exakte Fahren von Kurven, Achten und Geraden mal zu versuchen. Man kann dabei viel lernen, z.B. welche Fortschritte mit einfachen Mittels zu erreichen sind, und welche schwieriger sind. Man kann auch lernen, sich mit 95% zufrieden zu geben (siehe http://de.wikipedia.org/wiki/Paretoprinzip).

Rabenauge
14.04.2010, 19:26
Präziser als nötig will ich auch nicht.
Aber mir fällt da ein Beispiel ein, an dem ich (habe ich als überüber....nächstes vor) schon ein Weilchen herum denke:
Bienchen bekommt eine Ladestation.
Nun soll sie, wenn es nötig ist, diese anfahren, sich voll futtern und dann -womitauchimmer- weitermachen.
Sicher, man kann auch der Ladestation eine gewisse Intelligenz spendieren (darauf läuft mein Plan sowieso hinaus, weil doch etwas komplexere Dinge erledigt werden müssten, wie Bienchen ab- und wieder anschalten, Lösung hab ich im Kopf dafür), auch sollte sie vielleicht besser _nicht_ die Katze aufladen. ;)
Dennoch muss die Biene sich dazu einigermassen gut orientieren können, meine _kann_ allemal zwei Stunden in der Bude herum wuseln.
Danach sollte sie mindestens noch wissen, ob die Ladestation vorne oder hinten ist, auch _wenn_ selbige ne Rundumleuchte hat.

Das Problem der Odometrie ist, dass sich Abweichungen aufaddieren, wenn ich also auf nen Meter geradeaus lausige 5mm Abweichung habe, ist das nix, fahre ich die Strecke aber 20x, werd ich anschliessend die Ladestation nicht mehr finden.
Es sollte als schon so genau wie _möglich_ funktionieren.
Darum reite ich so drauf herum.
Klar ist, dass da Grenzen sind, aber sind die wirklich schon erreicht?

Thema Radschlupf: richtig, Bienchen kriegt nicht mit, wenn die Räder durchdrehen.
Trotzdem kann man da mit sanftem beschleunigen und abbremsen sicherlich noch _einiges_ rausholen.
Sowie mein Motor-Diagnoseprogramm (es wird die Motoren mit festgelegten Fahrstufen eine Weile laufen lassen, und dann Fahrstrecke, Drehzahlen und einige andere interessante Dinge ausspucken, somit kann ich auf verschiedenen Untergründen und mit beliebigen Drehzahlen herumtesten) fertig ist, mache ich mit genau diesem Problem weiter- ohne Bremse fährt die Biene grundsätzlich zu weit.

@s.frings: es gibt bei der Biene (und bei jedem, ähnlich aufgebauten Fahrzeug) ein wichtiges Problem: Der Radabstand zum Drehpunkt!
Man kann nämlich die Räder der Biene auch unterschiedlich weit auf die Achsen stecken, somit wird sie, bei ansonsten gleichen Bedingungen, nie rechts und links gleich kurven (und Geradeausfahrt korrigieren ist auch kurven!).
Ich hatte neulich ein kleines Spielzeugmotorrad in der Hand (Standmodell), dessen Räder hatten ziemlich die richtige Grösse fürs Bienchen, wollte schon spontan zwei der Dinger mitnehmen, weil sie hübsch aussahen und eben schön schmal sind, aber leider hatten sie Plastikreifen.
Aber in der Richtung schaue ich mal weiter, solche Modelle kosten nicht viel.

Ein Entfernungssensor ist bei mir ohnehin geplant (ich mag diese Fühler nicht, auch wenn sie ihren Dienst gut tun, einfach zu sperrig alles), ausserdem halte ich es für suboptimal, erst gegen eine Wand zu fahren, um festzustellen dass da eine Wand ist. Also ganz im Sinne der Erfinder: Bienchen ausbauen.
Passt noch etliches rein, in die Kleine. ;)

radbruch
14.04.2010, 19:48
Hallo

Hier hat Pinsel (https://www.roboternetz.de/phpBB2/profile.php?mode=viewprofile&u=32411) eine IR-Abstandsmessung vorgestellt und entwickelt:
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=52115

Eure Grundlagenforschung finde ich echt spannend. Nahezu genial scheint mir das "Lenkradmodel" und die Umsetzung dazu im Video. Echt beeindruckend. Mit der Loch-Odometry ist die Biene Klassenbeste;)

Gruß

mic

s.frings
15.04.2010, 09:24
Die odometrie Sensoren funktionieren wirklich völlig unproblematisch und absolut zuverlässig. Ich habe mich schon darüber gewundert, daß zur Einstellung ein Trimmpoti vorgesehen wurde. Demm ich Einstellbereich 1=% bis 90% funktionieren sie super. Da gibt's eigentlich nichts zu justieren.