Exakt geradeausfahren (PID-Regler)

r2d2

New member
weiter oben schreibt alexander, daß mit gyro eine extrem gerade fahrt möglich ist.
dazu hätte ich ne frage :

gyro und acc werden wennich richtig gelesen habe (wie beim quadrocopter) fusioniert.
damit kriegt man (nicht so ohne weiteres, aber immerhin) den winkel.

den vermute ich jetzt als ist-wert in einem äußeren pid-regelkreis. dazu schätze ich gibts innen einen auf den inkrementgeber aufgebauten motorregler (p). die regelkreisfrequenz vermute ich bei 10hz.

1) liege ich schwer daneben ?

2) geht das auch mit der spielzeug-mechanik für 11€ (motoren/getriebe dem preis entsprechend) ?
 
weiter oben schreibt alexander, daß mit gyro eine extrem gerade fahrt möglich ist.
dazu hätte ich ne frage :

gyro und acc werden wennich richtig gelesen habe (wie beim quadrocopter) fusioniert.
damit kriegt man (nicht so ohne weiteres, aber immerhin) den winkel.

den vermute ich jetzt als ist-wert in einem äußeren pid-regelkreis. dazu schätze ich gibts innen einen auf den inkrementgeber aufgebauten motorregler (p). die regelkreisfrequenz vermute ich bei 10hz.

1) liege ich schwer daneben ?

2) geht das auch mit der spielzeug-mechanik für 11€ (motoren/getriebe dem preis entsprechend) ?
 
Hallo,

1) Nein, ist richtig - Ein paar Daten:

MPU9150: mit dort bereits vom Hersteller integrierter 6-Achsen Sensor-Fusion (200 Hz - verwendet Beschleunigungssensor und Gyro). Zum Betrieb wird passender Firmware Code benötigt (der MPU9150 hat diesen nicht im Speicher), ein passender Treiber (C Code) kann beim Hersteller nach Anmeldung heruntergeladen werden (Motion Driver). Die fusionierten Daten (Yaw,Pitch,Roll) landen im FIFO des MPU9150 (die Rate ist einstellbar). Ich rufe sie mit 20 Hz ab.

Motor-Regelkreis: 20 Hz
Ansteuerung: 2 PID-Regler (einer für "Fahren mit Geschwindigkeit X und Winkel Y", einer für "Drehen mit Geschwindigkeit x" zum Drehen auf der Stelle)

2) Sollte gehen - ich benutze ja auch Spielzeugelektronik (50 Cent Motor, 30 Cent Getriebe etc., 30 Cent Radencoder) ;)

https://www.youtube.com/watch?v=bA2sRMLeSjg
 
@alexander : der film beeindruckt mich sehr !

bin grade beim geradeausfahren mit der selben mechanik schätze ich. den regler dafür hab ich noch nicht im griff. die motorregelung als innerer krais hat sich als wertlos gezeigt. ich verwende jetzt den kompass für den p-teil und den gyro drin für den d-teil. es hängt aber sehr von der bodenbeschaffenheit ab, ob das funktioniert. ich trenne auch in drehen / fahren.

der acc ist ohne neigungkompensation wertlos, und die ist natürlich aufwändig (fusion gyro/acc).

den induktionsdraht möchte ich durch einen farbsensor ersetzen (beet, terrassenplatten, kies außenrum), und dann durch gezieltes fahren ne karte aufbauen. aber erstmal muß das ding präzise gradeausfahren auf jedem untergrund...

kannst du ein wenig über deinen regler sagen ?
hast du mal 10hz probiert ? ich dachte das sei schnell genug für die langsame kiste, hab aber kein bodediagramm oder ähnliches gemessen.
 
ich muß aufpassen, dich nicht mir zuviel fragerei zu nerven ...

1) ich hab auf deine aussage hin, daß du den kompass kaum nutzt, ein wenig mit kompass und gyro gespielt. wenn ich den gyro sauber nulle und kalibiriere, liefert mir das gyrointegral ziemlich präzise die gleichen winkelsignale wie der kompass. ok, aber wozu ?
wieso verwendest du den kompass nicht ??

2) danke für den code. ich schreibe alles in c++, deshalb ist mir die syntax an manchen stellen ungewohnt. ist das der "arduino-dialekt" ?
 
Reiner Doll schrieb:
ich muß aufpassen, dich nicht mir zuviel fragerei zu nerven ...
Das schaffst Du nicht! ;)

1) Grund ist: um mit "großen" Motoren (hohe Ströme) dasselbe Ergebnis in einem kleinen Rasenmäher zu erhalten wo der Kompass nicht weit weg von z.B. einem Mähmotor sitzen kann (jetzt argumentieren einige mit dem "am Quadcopter geht's", aber das zählt nicht ;) - dort sind die Motoren kleiner, der Abstand größer oder der Kurs muss nicht auf
 
Zuletzt bearbeitet von einem Moderator:
witzig, da beschäftigen wir uns offenbar mit ähnlichen spielzeugen :

vor 2 jahren hab ich mit dem atmega einen quadrocopter entwickelt, und ja, dort hat trotz der enormen motorströme der kompass gut funktioniert, allerding in über 10 cm höhe über den motorkabeln. den stm32f4 wollte ich für einen "extended" quadrocopter einsetzen, habe aber ehrlich gesagt nach ner woche "bare metal" aufgegeben, der aufwand war mir dann doch zu groß. ein f3 wartet darauf, als kern eines selbergeschrieben autopiloten für ein flächenflugzeug eingesetzt zu werden, irgendwann bring ich die energie auf ...
 
danke für den code !

der kern schaut bei mir im prinzip ähnlich aus, klar, pid-regler halt, dein code ist aber deutlich komplexer und sehr viel weiter ausgefeilt. ich brauche aber was, das (ohne peripheriebedienung natürlich) maximal 2 a4-seiten lang ist und möglichst nur basisstrukturen enthält.

der größte unterschied wird wohl duie sensorik sein, du verwendest eine komplexe inertialanordnung, ich nur den gyro und den kompass, und keine wie auch immer gestaltete fusion. ich dachte mir, für so ein wägelchen sollte das reichen (beim quadrocopter hab ich auch fusioniert mit nem komplementärfilter).

wenn ich nun mit dem gyro (pi-regler) ein stück fahre (sagen wir 1 meter), und dann kurz einen äußeren (p-) kreis mit dem kompass draufschalte zur korrektur ... geht das dann vom ansatz her in deine richtung ?
 
Ich würde mir erstmal deine Messwerte anschauen, insbesondere die des Kompass. Hier in der Wohnung ist der Kompass-Norden am Boden 5-10 Grad unterschiedlich, je nachdem wo der Roboter gerade fährt. Draußen ist der Kompass-Norden 5-10 Grad unterschiedlich, je nachdem wie stark die Motoren gerade drehen.

Mein Ansatz ist daher ganz ohne Kompass bei der Regelung auszukommen. Dann braucht man allerdings einen extrem guten Gyro. Der MPU9150 wäre so einer (Gyro bleibt 3 Minuten unter 1 Grad Fehler).

Ansonsten klingt Dein Regler-Ansatz gut, vorausgesetzt Du kannst Dich auf Deine Sensorik verlassen ;-)
 
ich hatte das mit dem kompass auch vermutet, weil ich bei den geradeausfahr-tests immer an den gleichen regionen auf dem fußboden abweichungen festgestellt habe. habe aber gedacht, der fehler liegt bei mir.

wie quantifizierst du den fehler vom gyro ? nur die drift in null ? eine konstante winkelgeschwindigkeit, vielleicht sogar in mehreren werten, ist ja schwer zu erzeugen.
 
Ich nehme den angegebenen Wert im Datenblatt:


Code:
noise dps/sqrt(Hz)
L3G4200D        0.03
BMG160/BNO055   0.014
LSM9DS0         0.00875
BMI160          0.007  
MPU9150         0.005


Diese Angaben kann man schon ganz gut als Grundlage verwenden. Dann startet man den Gyro (Nullposition) und notiert sich den entsprechenden Kompass-Kurs (nicht am Boden gemessen sondern weiter in der Luft). Nachdem man nun mit dem Roboter eine bestimmte Zeit (z.B. 3 Minuten) durch die Gegend fährt, ermittelt man erneut die Gyro-Nullposition und vergleicht diese erneut mit Kompass-Kurs. Dabei erhält man den Gyro-Fehler. Damit kann man den Grad-Fehler pro Sekunde ermitteln. Dieser deckt sich sehr gut mit dem Datenblatt. Die Messung kann man ja einige Male wiederholen.
 
oh. ich dachte, dazu müsse man das ding exakt (!) waagrecht halten. außer du wertest alle gyroachsen aus, was ich ja (noch) nicht mache.

unklar ist mir, wie das überhaupt klappen kann mit der orientierung, wenn der kompasswert so ein dreck ist. alles andere (bildverarbeitung, gps ..) ist ja noch viel ungenauer. für mein ziel, ne karte im speicher, brauch ich ne auflösung von vielleicht 10 cm, die ist bei solchen fehlern unrealistisch.

ich fahre jetzt so :

- drehen in den zielwinkel (räder gegeneinander, pd auf kompass, innen pd auf gyro, geht auf 1° genau)
- kleine strecke mit pd auf kompass und innen pd auf gyro fahren, dann umschalten :
- bis zum ziel mit pd auf gyro (ohne kompass)

dort wieder drehen usw.. klappt recht gut.
 
hallo,

wie von alexanderG vorgeschlagen, hab ich ne weile weiter mit kompass/gyro messtechnisch experimentiert. leider sind die ergebnisse gar nicht gut.

der kompass ist für ne genauigkeitsanforderung besser 1° unbrauchbar. zum teil messe ich bei fahrten von 1m länge an einem exakt geraden brett entlang kommpassfehler von über 5° !
die gyrodrift ist zwar bedeutend geringer, aber leider kaum reproduzierbar, ich fürchte die offsetdrift ist temperaturabhängig, damit würde der kompensationsaufwand extrem steigen, außer man beheizt den chip.

damit ist mein wägelchen kein geradeaus-fahrer, sondern ein meßgerät für gyrodrift. das etappenziel : 1 meter fahren, 180° drehen, zum startpunkt zurück, verfehle ich um mehrere cm.

ist es euch ähnlich ergangen ? gibts lösungsansätze mit dem acc, um die gyrodrift rauszurechnen ?
 
Hallo Reiner,

Kompass: genauer als 1 Grad wird man mit dem Kompass nur schwer schaffen, wichtig ist wohl dass man 2 Messungen hintereinander macht (z.B. 50cm Distanz) und die Abweichung vergleicht. Ist diese zu groß weitere Messung (z.B. nächsten 50cm) einholen

"Auf 1cm genau": es gäbe da vielleicht noch etwas, was die Trajektorie am Boden relativ genau erfasst: https://pixhawk.org/modules/px4flow
Schau Dir dort mal die Karte weiter unten auf der Seite an - die blaue Linie ist nur mit dem Optischen Fluß-Sensor erfasst worden.

Dies ist zwar keine globale Ortientierung (d.h. die Fehler werden sich addieren), aber immerhin! :)

Gruss,
Alexander
 
Oben