Kurskorrekturen mit CMPS10 Kompass auf Roboter

Alles rund um TX(T) und RoboPro, mit ft-Hard- und Software
Computing using original ft hard- and software
Forumsregeln
Bitte beachte die Forumsregeln!
Antworten
funmca
Beiträge: 102
Registriert: 03 Jan 2013, 18:54
Wohnort: Hannover
Kontaktdaten:

Kurskorrekturen mit CMPS10 Kompass auf Roboter

Beitrag von funmca » 10 Jan 2013, 23:18

Hallo zusammen,

ich wollte nur kurz mal meine ersten Erfahrungen mit dem Kompass CMPS10 auf einem bereiften Roboter schildern.

Fazit: so ganz genau bekomme ich es (noch, mal sehen) nicht hin, den Roboter ganz exakt auf die vorgegebene Grad Zahl zu drehen.

Es ist meist eine Abweichung von 5-10 Grad zu verzeichnen. Ich gehe davon aus, der Motor reagiert nicht schnell genug auf die Programm Befehle. Der Roboter überschreitet beim Drehen oft die vorgegebene Gradzahl.
Ich habe auch den Eindruck, manchmal überspringt der Gradzähler (die Abnahme des Werts vom Kompass) den bereits erreichten Vorgabewert. Der Gradzähler läuft als Parallelprozess unabhängig mit.
Ich habe in dem Programm daher eine Variable eingebaut (Var) die die Abweichung darstellt, ganz einfach Vorgabe minus aktuellem Wert des Kompass.
Ich lasse den Roboter innerhalb einer Toleranzgrenze, die auf diese Weise einfach einstellbar ist verlangsamen, hat er sich zu weit gedreht, dreht er in die andere Richtung.
Trotz langsamer links-rechts Schwenks trifft er den eingestellten Wert nie genau.

Hier mal ein Bild des Roboters, hab ihn etwas größer gebaut um ihn für weitere Anbauten erweitern zu können, ebenso war mir wichtig den Kompass weit von den elektronischen und Motorteilen entfernt zu haben.
Übrigens sieht auf dem Bild der Kompass nach vorn gekippt aus, das ganze Chassis ist aber etwas nach hinten geneigt und der Kompass (der gelbe Kasten aus kleinen Statikteilen) ist mit einem kleinen Winkel angebracht und ist relativ horizontal.

Bild

Hier der Screenshot vom Programm:
Bild

Und hier ein Video, ich habe ein paar Geradeausfahrten eingebaut und die Richtungsänderungen Nord,Ost, Süd, West jeweils als Unterprogramm dazwischengeschaltet.
Sehr schön sind die manchmal vorkommenden Feinjustierungen zu sehen, ebenfalls dass er manchmal Probleme hat den Wert 255 für Nord sofort zu erkennen, dann kreist er einmal rundrum:
http://qik.ly/BtGGJD3LJtqvsyqc57H2qLF

***Kleiner Nachtrag: Hatte die ganze Zeit im Online Modus via Bluetooth getestet. Habe das Gefühl nach dem Download justiert er nicht mehr so oft nach, insofern trifft er die Gradwerte wohl besser auf Anhieb, vielleicht ist der Datenaustausch zwischen Programm und Kompass jetzt schneller. Ich lasse mir die Var-Abweichungen mal in den nächsten Tagen in eine CSV Datei schreiben.***

Vielleicht hat ja der eine oder andere ebenfalls Erfahrungen und ein paar Tipps!

Viele Grüße , Marco
Zuletzt geändert von funmca am 12 Jan 2013, 21:08, insgesamt 1-mal geändert.
;-)

jona2004
Beiträge: 149
Registriert: 10 Jun 2011, 22:30

Re: erste Erfahrung mit CMPS10 Kompass auf Roboter

Beitrag von jona2004 » 11 Jan 2013, 18:21

Hallo Marco,
Das ist natuerlich ein interessantes regeltechnisches Problem. Mit RoboPro habe ich auch nicht viel Erfahrung, weil ich den RoboTX erst seit Weihnachten habe, aber ein bischen mit Regeltechnik.
Zum 255/0 Problem: Das sollte recht einfach zu loesen sein. In dem Program habe ich keine Abfrage gesehen, die den Zahlenstrahl ( 0... 255..) auf einen Zahlenkreis abbildet. Im Program sehe ich (vorgabe - aktgrd) Beispiel: der gewuenschte Winkel is 0 wenn der aktuelle 1 ist => z = -1, wenn aber der akgrd 255 ist (also eigentlich nur 1 in der anderen Richtung) kommt -255 raus. Sieht nach ganz weit weg aus ist aber im Absolutbetrag genauso weit. Ich wurde das so machen dass ich 2 Werte berechne: 1 - das Vorzeichen gibt die Drehrichtung an, 2 die Entfernung.
Den Regelkreis wuerde ich dann nicht mit "if -verzweigungen" sondern rechnerich loesen. Als einfacher P-regler (siehe wikipedia P/PI/PID-regler) zu Anfang, d.h. die Motorgeschwindigkeit ist proportional zur Differenz des aktuellen und Sollwinkels. Die Motoren kann man mit den "Basiselementen" (level 4?) mit einer Geschwindigkeitsaufloesung von 512 Schritten ansteuern d.h. man muss die Winkeldifferenz in den Zahlenbereich von -512 .. +512 bringen mittels einer Multiplikation. Dabei fragt man z.b. alle 100ms den Compass ab und rechnet die neue Motorgeschwindigkeit aus. das Vorzeichen geht in die Drehrichtung ein. Die Genauigkeit kann man sicher noch erhoehen wenn man vom Kompass nicht nur 8 sondern 12-bit (2 bytes) abfragt.
Viel Spass Joachim

funmca
Beiträge: 102
Registriert: 03 Jan 2013, 18:54
Wohnort: Hannover
Kontaktdaten:

Re: erste Erfahrung mit CMPS10 Kompass auf Roboter

Beitrag von funmca » 11 Jan 2013, 20:57

Hallo Joachim,

also ich habe das Programm jetzt mal so geändert wie Du vorgeschlagen hast. Was ich nicht raus habe, da beschäftige ich mich später mit, ist das 255 auf Null umspringen Problem. Ich denke aber das Zusammenspiel Motor, Kompassgenauigkeit wegen magnetischer Störeinwirkungen ist noch nicht optimal. Evtl muss ich auch noch das Getriebe ändern um eine höhere Motorgeschwindigkeit bei trotzdem langsamer Bewegung zu erreichen. Unter 200 Geschwindigkeit wirds etwas kritisch mit dem Losfahren...

Also hier ist die Berechnung der Motorgeschwindigkeit:
Bild

und hier das Drehen mit den jeweils berechneten Motorgeschwindigkeiten MV

Bild

Danke nochmal für den Tipp!

Gruß Marco
;-)

jona2004
Beiträge: 149
Registriert: 10 Jun 2011, 22:30

Re: erste Erfahrung mit CMPS10 Kompass auf Roboter

Beitrag von jona2004 » 12 Jan 2013, 20:50

Hallo Marco,
Für das 255/0 Problem gibt es glaube ich eine ziemlich einfache lösung, ich schreibe sie mal in "C" auf.
s = sollwert
i = ist wert
d = distance
Den Motoren kann man mit dem 'blauen '=' Befehl eine Zahl von -512 ... +512 schicken -512 max. geschwindigkeit links, 0 stopp, +512 max rechts.
Das ist offensichtlich der niedrigste Level auf dem man Motoren mit ProbPro ansprechen kann.
Ich hatte da eine kleines Programm geschrieben, das über das Bedienfeldelement Schieber die Zahlen erzeugt, funktioniert prima. Natürlich hast Du recht, dass die Motoren bei kleinen Zahlen nicht anlaufen. Aber das ist mal eine andere Geschichte. ICh sehe Du hast schon eine Konstante addiert.
Zurück zur Rechnung
d = s - i;
if ( d > 128)
d = d - 256; // deutlicher als d -= 256;
if ( d < 128) // Ich glaube else if is schwieriger nachzubilden mit RoboPro mag mich aber täuschen
d = d + 256;
dann steckt in d das vorzeichen (rechts links) und der minimale drehwinkel.
Dann kannst Du natuerlich mit Ganzzahl -> Gleitzahl weiterrechenen und am Schluss wieder auf Ganzzahl rückkonvertieren.
Grüße Joachim
PS: BIn nächste Woche auf einer langen Dienstreise => praktisch 0 Zeit für ft.

funmca
Beiträge: 102
Registriert: 03 Jan 2013, 18:54
Wohnort: Hannover
Kontaktdaten:

Re: erste Erfahrung mit CMPS10 Kompass auf Roboter

Beitrag von funmca » 12 Jan 2013, 21:06

So ich denke ich habe es jetzt:

Bild

Er dreht jetzt brav wieder in die andere Richtung, wenn er über die 255 Grenze kommt. Die 255 zu treffen scheint mir aber schwer zu machen.

Ich bin dabei die ganze Systematik mal so zu ändern, von Geradeausfahrten sanft in Kurven zu gehen und den Kurs nach Hindernissen wieder zu finden....

Macht auf jeden Fall Spass!!

Gruß Marco.
;-)

Benutzeravatar
Dirk Fox
ft:pedia-Herausgeber
Beiträge: 1832
Registriert: 01 Nov 2010, 00:49
Wohnort: Karlsruhe
Kontaktdaten:

Re: Kurskorrekturen mit CMPS10 Kompass auf Roboter

Beitrag von Dirk Fox » 13 Jan 2013, 21:11

Hallo Marco,

wenn ich Dein erstes Foto oben richtig erkenne, dann arbeitest Du doch mit den Encodermotoren?

Damit ist es doch viel einfacher und exakter, den Motoren die Schrittzahl vorzugeben, anstatt die Geschwindigkeit zu "justieren" (das ist immer ungenau, siehe Stefan Brunners Beitrag in ft:pedia 4/2012 - die Geschwindigkeitsangaben sind nicht linear und werden zudem durch die Last verändert). Also: Wenn Du den Roboter in eine bestimmte Richtung drehen möchtest, dann drehe erst (z.B. um 45° nach rechts = linker Motor vor, rechter zurück um eine von Radumfang und Achslänge abhängige, aber vorab bestimmbare Anzahl von Impulsen, bei voller Geschwindigkeit) und fahre dann mit voller Geschwindigkeit geradeaus (dabei aber die Motoren synchronisieren). Sollte das Drehen nicht exakt stimmen, kannst Du vor der Geradeausfahrt nochmal korrigieren... Das Programm solltest Du im Offline-Modus testen, damit keine Impulse verloren gehen.

Beste Grüße,
Dirk

funmca
Beiträge: 102
Registriert: 03 Jan 2013, 18:54
Wohnort: Hannover
Kontaktdaten:

Re: Kurskorrekturen mit CMPS10 Kompass auf Roboter

Beitrag von funmca » 14 Jan 2013, 07:39

Hallo Dirk,

aber ich wollte ja gerade mit dem Kompass arbeiten, denn so richtig geradeaus fährt der Roboter aufgrund von manchmal durchdrehenden Rädern auch nicht, ausserdem find ich es irgendwie cooler mit dem Kompass, er kann dann laufend die Richtung korrigieren...
Gruß Marco.
;-)

Benutzeravatar
Dirk Fox
ft:pedia-Herausgeber
Beiträge: 1832
Registriert: 01 Nov 2010, 00:49
Wohnort: Karlsruhe
Kontaktdaten:

Re: Kurskorrekturen mit CMPS10 Kompass auf Roboter

Beitrag von Dirk Fox » 14 Jan 2013, 08:46

Hallo Marco,

klar, ich wollte Dir auch nicht empfehlen, den Kompass wegzulassen (der ist klasse!) - aber die Kurskorrektur ist mit Impulsvorgaben sicher einfacher und genauer.

Gruß, Dirk

funmca
Beiträge: 102
Registriert: 03 Jan 2013, 18:54
Wohnort: Hannover
Kontaktdaten:

Re: Kurskorrekturen mit CMPS10 Kompass auf Roboter

Beitrag von funmca » 14 Jan 2013, 17:59

Hallo Dirk,

du hast natürlich Recht, die Kurswendung an sich ist mit dem Impulszähler genauer. da hatte ich erst gar nicht so drüber nachgedacht.

Allerdings habe ich festgestellt dass auch dann nicht immer GENAU das gleiche Ergebnis rauskommt.

Die Mischung machts, denke ich.

ich tüftele halt so ein bisschen rum und hab Spass am ausprobieren....


Danke für den Hinweis!

Gruß Marco.
;-)

Volker
Beiträge: 2
Registriert: 10 Jun 2013, 19:30

Re: Kurskorrekturen mit CMPS10 Kompass auf Roboter

Beitrag von Volker » 10 Jun 2013, 19:44

Hallo Marco,
wie ich gelesen habe hast du dich schon mit dem Kompass CMPS10 angefreundet.
Ich wollte fragen, ob du mir Hilfestellung geben kannst um den Sensor auszulesen.

Der Punkt ist ich habe deine Abbildung nicht verstanden um den Sensor abzufragen
(von der Message am Jan 2013, 23:18)

schon mal Dank im voraus
Volker

funmca
Beiträge: 102
Registriert: 03 Jan 2013, 18:54
Wohnort: Hannover
Kontaktdaten:

Re: Kurskorrekturen mit CMPS10 Kompass auf Roboter

Beitrag von funmca » 13 Jun 2013, 13:30

Volker hat geschrieben:Hallo Marco,
wie ich gelesen habe hast du dich schon mit dem Kompass CMPS10 angefreundet.
Ich wollte fragen, ob du mir Hilfestellung geben kannst um den Sensor auszulesen.

Der Punkt ist ich habe deine Abbildung nicht verstanden um den Sensor abzufragen
(von der Message am Jan 2013, 23:18)

schon mal Dank im voraus
Volker

Hallo Volker,

es gibt so ein Programm in der I2C Bibliothek mit dem Du die Daten auslesen kannst, ich antworte heute abend ausführlicher.

Gruß Marco
;-)

funmca
Beiträge: 102
Registriert: 03 Jan 2013, 18:54
Wohnort: Hannover
Kontaktdaten:

Re: Kurskorrekturen mit CMPS10 Kompass auf Roboter

Beitrag von funmca » 14 Jun 2013, 19:47

Hallo, ich habe Dir mal mein Programm zum Download bereitgestellt:


wohnung_basisdrehungen.rpp

bei diesem hier habe ich versucht eine richtung durch beschleunigung des rechten oder linken motors zu halten: (ich bin mir aber nicht mehr sicher, ob dies der letzte funktionierende stand ist):

wohnung_kurs_per_regelkreis_negativermv.rpp

musste mal schauen. (ist auch auf meine Wohnung abgestellt, für schäden bei wandkollisionen übernehme ich keine Verantwortung ;-) )



dieses i2c programm aus der i2c bibliothek "compass cmp09" (09 geht) liest halt unter dem tab "i2c-comp get byte" die jeweiligen werte für den kurs aus. du musst schauen dass deine geräteadresse und unteradresse passt, du kannst die aber so lassen.

Was verstehst du denn genau nicht?

Lg Marco.
;-)

Antworten