Hi oberallgeier,
das sieht doch echt super aus !
Glückwunsch !
Gruss
mausi_mick
Meine ADC waren nicht von der Schweinepest befallen und laufen (wieder). Dafür kribbelte es mich, mal ein Döschen nicht nur rumrollern zu lassen. Ein kleines Teilprojekt gab mir neuen Antrieb und nun balanciert das MiniD0 - zumindest als Erlkönig und (noch?) nicht wirklich perfekt.
Es gibt sogar ein Video (aufs Bild klicken, dann meldet sich YouTube):
................Bild hier
Geändert von oberallgeier (17.10.2016 um 19:01 Uhr) Grund: Neuer Bildserver
Ciao sagt der JoeamBerg
Hi oberallgeier,
das sieht doch echt super aus !
Glückwunsch !
Gruss
mausi_mick
Danke mausi_mick.
Nun muss ich noch tiefer in die Regelungstechnik (baaaahhhhh - schauderhaft), damit ich den scheußlichen Ausleger wegbekomme und das Fahrverhalten weniger spastisch wird.
Ciao sagt der JoeamBerg
Hallo oberallgeier,
mach noch nen Haken dran, und dann auf zum angeln .
Da hast du dir aber eine echte Sauerei ausgedacht. (Sieht ja noch viel mehr nach Schweinepest aus.)
Wenn man das Video mal wieder 30- bis 42-mal ansieht, kann man erahnen, dass die Schwenkhöhe vom Sensor so um "Dosenhöhe durch 2,5" ist.
Das ist nicht allzu viel. Somit ist natürlich auch der Messbereich vom Sensor extrem klein und die Abweichungen vom Sollwert ja noch nur die Hälfte.
Liefert der Sensor in dem Abstandsbereich überhaupt 'glaubwürdige' Daten?
Es kann ja sein, dass du dich gar nicht auf die Regelung (da stimme ich deinem "baaaahhhhh - schauderhaft" voll zu), sondern eher auf die Datenerfassung konzentrieren musst.
Ansonsten bleibt auch mir die Spucke weg und ich stimme mausi_mick voll zu. Ratten-, bzw. um beim Thema zu bleiben: Saustark!
Gruß Sternthaler
Lieber Asuro programieren als arbeiten gehen.
Schade, dass ich Dich verpasst hatte. Was glaubst DU denn, was man sich hier, hinter allen bekannten Wäldern, den ganzen Tag ausdenkt? Das ist hier schlimmer als in unseren Kanzleien und Ministerien (kommt NICHT von mini - aber eben auch nicht von ministere). Aber mit Angeln hab ich es nicht so.Zitat von Sternthaler
Der GP2D120 hat aktuell einen Messabstand zwischen 54 und 83 mm, entsprechend rund 550 bis 350 digit. Anm.: Diagramme OHNE Motorbetrieb !Zitat von Sternthaler
................Bild hier
Mit dem Ausleger habe ich so eine Art ("Evolventen-" *gggg*) Sinus, der ja um die Null Grad recht linear verläuft. Das hilft schon viel. Später, wenn ich das auf dem MiniD0 realisieren sollte, wird nach meiner Methode "Blindenstock" gemessen. Der Abstand ist dann rund 99 mm bis 110 mm und ich werde mit etwa 50 bis 60 digit auskommen müssen (genau - die Regelung muss mit der Hälfte leben). Geht wieder ein bisschen ans Limit. Dabei habe ich mich auf diese Eichkurve bezogen. Die selbstständige Kalibrierung war beim MiniD0 notwendig geworden, weil ich keine Spannungsregelung habe und bei meinen Fahrten ein deutliches Fading nach ein paar Minuten feststellbar ist . . . . Zur Vermeidung von Rundungsfehlern und natürlich mit Blick auf die Zeit verwende ich die digits gleich als Regelungsgrundlage und rechne nicht erst nach Längeneinheiten um.
Nachtrag, spät abends: Die Messungen oben sind Einzelwerte ohne Durchschnittsbildung, Messzylus unter 60 ms. Damit hole ich fast alle (neuen) ADC-Werte des Sharp ab (ADATE = 1, ADCPrescaler = clock/12. Die Anfahrdellen bei einigen Kurven sind Nachschwinger nach dem Kippvorgang zwischen den beiden Extremwertmessungen - danach wurde die Wartezeit nach dem Kippen verlängert. Nach dem Kippen wird auch der neue Wert kontrolliert - manchmal schwingtkippt das Ding nämlich zurück.
Ist ja fies, dass Du mir solche Fehler zutraust - ich schreibe vermutlich immer noch zu viel über all den Blödsinn, den ich mache und all die Sackgassen in die ich blind renne. Aber guck Dir doch das Bild und die Eichkurve im Link an: im aktuellen Bereich ist die Steigung des Sharp schön: viele Messwerte bei wenig Weg. Im Bereich um die 100 mm ist das immer noch ganz ok, erst über 150 mm wird der Messwert für die hier diskutierte Regelung wenig Wert sein. Die Datenerfassung ist schon ein Problem: der Sharp liefert neue Messwerte leider nur im Abstand von 40 ms, das ist für die Zeitkonstante des "Dosen-" Pendels etwas langsam. Aber wers nicht probiert, hat ja schon verloren.Zitat von Sternthaler
Dagegen hilft bestimmt ein zügiger Zug aus einer vertrauenswürdigen Flasche. Prost!Zitat von Sternthaler
Geändert von oberallgeier (17.10.2016 um 19:09 Uhr) Grund: Neuer Bildserver
Ciao sagt der JoeamBerg
Hallo zusammen,
laßt euch bloß nicht von den "Evolventen" beeindrucken .
Wahrscheinlich sind nun bei diesem 'Schwenkgewicht' die Getriebe-Zahnräder in den Antriebsservos so ausgefahren, dass dortige Abschabungen zu solchen Effekten führt. (Huuaaa, was für ein Unsinn kommt denn nun )
Da muss ich dir uneingeschränkt Recht geben.Zitat von oberallgeier
Die Flasche war wie immer groß. Deshalb erst jetzt eine dumme Antwort. Muss ja bei klarem Verstand geschrieben werden.Zitat von oberallgeier
... ja, Ja, JA ... Bist du was anderes von mir gewohnt?Zitat von oberallgeier
Da ICH den "Messwert-Thread" von dir nicht gesehen, oder vergessen hatte, sollte das aber nicht heißen, dass DU das nicht schon lange erledigt hattes.
Nun bist du aber trotzdem, oder gerade deshalb, der Angeschmierte, da du dich nun doch um "baaaahhhhh - schauderhaft" kümmern musst .
Frohes Schaffen wünscht
Sternthaler
Lieber Asuro programieren als arbeiten gehen.
Hallo Zuseher,
Das spastische Fahrverhalten hatte schon diesen Verdacht geweckt. Nach den ersten Balanceakten waren bei Normalfahrt, einfacher Vor- und Rückwärtsfahrt mit Kurven, deutliche Schwingungen zu sehen, die zuerst auf Verschleiss im Getriebe und erst nach näherer Kontrolle auf Fehlanpassung des Reglers deuteten.Zitat von Sternthaler
Stimmt. Hobbies sind wie Urlaub "auf der Arbeit" - alles was zu tun ist, bleibt liegen, wenn Du es nicht selbst machst.Zitat von Sternthaler
Genauere Tests zeigten eine Fehlanpassung der Regelung. Daher wurden die Regelparameter geändert. Trotzdem blieben Störungen, die teilweise eher zufällig auftraten. Sie zeigten sich vor Allem beim Übergang von gewissen Manövern - beispielsweise bei einfacher Geradeausfahrt nach einem schnellen Turn. Hier half keine Anpassung der Regelungsparameter - und diese Arbeiten waren nicht nur unergiebig, sondern auch zäh und langandauernd (habs halt nicht gerafft was da los war).
Zusätzliche Codeanpassungen hatten auch diese Störungen behoben. Dabei werden vor markant geänderten Fahranweisungen sämtliche Werte, die von der Regelung benutzt werden (letze Drehzahl u.ä.), auf Null initialisiert, die neue Teilfahrt bedeutet also immer ein Einschwingen des Reglers in seine Normalfunktion. Offensichtlich hatten vorhergehende Fahrweisen den Regler (bei der notwendigen Anpassung) so verstellt, dass er bei der neuen Fahrweise überreagierte.
................Bild hier
................Die Testfahrt auf YouTube
Die Testfahrt mit diesen Änderungen ist im Rahmen der apparativen Möglichkeiten recht ordentlich. Dabei wird das MiniD0 mit aktivierter Regelung, aber sonst nur mithilfe der Odometrie gefahren. Wieso "im Rahmen der apparative Möglichkeiten"? Die Getriebe hatte ich von der originalen Übersetzung ca. 768:1 auf ca. 90:1 umgebaut. Dabei habe ich mittlerweile beinhahe 1 mm Fahrweg pro "Tick" bzw. halber Motorumdrehung - beim R2D03/Dottie sind das eher 0,1 mm ! Das bedeutet beim MiniD0 bei einer engen Kurve schon eine Richtungsänderung um fast ein Grad mehr oder weniger . . . . . Ich finde, dass es trotzdem gelungen ist.
Geändert von oberallgeier (17.10.2016 um 19:11 Uhr) Grund: Neuer Bilderserver
Ciao sagt der JoeamBerg
AUFRUF
an die Regelungsexperten.
Mit diesem Code bemühe ich mich, die beiden Motoren meines MiniD0 gleichmässig auf die geforderte Geschwindigkeit einzuregeln.
Das obige Video zeigt, dass mit meiner Odometrie und dieser Regelung die Fahrt recht genau sein kann. Es gibt natürlich auch andere Videos - maximale Abweichung nach Rückkehr des MiniD0 rund 3 cm - nach etwa insgesamt 80 cm Fahrtstrecke (ohne Turn gerechnet), mit vier und 1/4 Vollkreisen, der 180°- und der 90°-Kurve. Sprich: die Reproduzierbarkeit der Fahrten ist unbefriedigend. Die Abweichungen haben wohl mehrere Gründe:Code:// ================================================================================= // === HAUPTProgramm ============================================================== // Initialisierungen, LED1 kurzblinken als Signal für Programmstart, ..... Kp12 = 2; // Regelfaktor P-Anteil !!! Divisor ### war 5 (=1/5), dann 4 Kp34 = 2; // Regelfaktor P-Anteil !!! Divisor Ki12=Ki34 = 30; // Regelfaktor I-Anteil !!! Divisor Kd12=Kd34 = 4; // Regelfaktor D-Anteil !!! Divisor ..... // ===== Ende des main ===== // ================================================================================ // ================================================================================= // === Regelungsroutine für Motor 34 ============================================= // Die gemessene Zeitdifferenz Iz_diff1 zwischen zwei Encoderinterrupts // wird zur Regelung verwendet void rgl_mo_34(void) // Regelung für Motor 34 { if (sspeed34 <= 15) // Soll überhaupt gefahren werden? { OCR0A = 0; // Unter x mm/s soll nicht gefahren werden return; } tupsi34 = Iz_diff1; // Übernahme Iz-Wert in Regelung ndrz34 = sspeed34; ix34 = 8300 / tupsi34; // => Ist-Geschwindigkeit in mm/s ie_mot34 = ndrz34 - ix34; // Vergleich => Regelabweichung if (tupsi34 > 500) {tupsi34 = 500;} // 22apr09-0847 Begrenze auf 500 statt 250 isum34 += ie_mot34; if (isum34 < -1000) { isum34 = -1000;} if (isum34 > 1000) { isum34 = 1000;} iyp34 = ie_mot34 / Kp34; // P-Anteil berechnen; Kptheor = 0,25 !! iyi34 = isum34 / Ki34; // I-Anteil berechnen iyd34 = (ie_mot34 - ie_alt34) / Kd34; // D-Anteil berechnen iy34 = iyp34 + iyi34 + iyd34; // Gesamtkorrektur berechnet ie_alt12 = ie_mot12; if ( iy34 < 0 ) { iy34 = 0;} if ( iy34 > 255 ) { iy34 = 255;} OCR0A = iy34; // Ansteuerung der PWM direkt statt "setPWMxxx" // PORTC ^= (1<<PC4); // "war-hier-Signal": LED auf PC4 toggeln return; } /* ============================================================================== */
1) Ungleiches Anfahren aus dem Stillstand. Als Abhilfe habe ich jedesmal beim Anfahren die PWM für einen Zyklus auf 250 gestellt . . .
2) Mir fehlt natürlich die Kopplung der Antriebe bzw. eine Art Software-Differential, mit dem ich Nachhinken oder Vorlauf eines Antriebs in die Regelung bzw. die Vorgaben des anderen Antriebs übertragen kann. Dies könnte ja im schlimmsten Fall zu unkontrollierbaren Schwingungen führen.
Frage: Wie mache ich so eine softwareseitige Verbindung der jeweiligen Abweichungen der beiden Antriebe - mit der die Fahrstrecken z.B. alle fünf bis 20 mm (hier also etwa fünf bis 20 Regelzyklen oder mehr) aufeinander abgestimmt werden können?
Ciao sagt der JoeamBerg
Hallo Joe,................
................Die Testfahrt auf YouTube
schönes Ergebnis, fliessende Bewegungen. Leider bin ich mit der Regelungstechnik gar nicht vertraut. So bin in ich hier nur ein interessierter Zuseher.
grüsse,
Hannes
Danke Hannes für das Lob. Leider ist der Bewegungsablauf nicht so schön wie ich es will, insbes. die Reproduzierbarkeit krankt, siehe obigen Beitrag von mir.Zitat von vohopri
Also habe ich dies und jenes versucht - und bin drauf gekommen, dass ich trotz mancher theoretisch basierten Einstellung eher blind am Regler herumschraube. Ergo: simultane Aufnahme verschiedener Reglerdaten (das hätte mir gleich einfallen müssen). Praktischerweise passt ein mega328 in mein MiniD0 - auch wenn seine Datenkapazität immer noch mässig ist: ein Feld mit 100 wordbreiten Daten belegt schon 10% seiner Kapazität. Immerhin konnte ich etliche Werte aufnehmen. Dargestellt ist hier eine der ersten Messungen mit Werten, die in der ISR für den Encoder des rechten Motors erfasst wurden.
Izeit_1 . . . . Bordzeit mit 50µs-Auflösung
iy12 . . . . . . PWM-Stellwert für rechten Motor (= mot12 nach L293-Lesart). Regelung etwa 100/s
lncges . . . . Encodertics-Gesamtstand zum Beobachtungszeitpunkt
mdiff0 . . . . Encodertic-Abstand zum Beobachtungszeitpunkt mit 50µs-Auflösung (reziproke Geschwindigkeit)
andere Werte
................Bild hier
Nun ist deutlich zu sehen, wie die Reglerwerte schwingen. Dass die Daten nur offline verfügbar sind, ist ein geringes Übel. Weitere Messungen werden folgen - natürlich auch für den zweiten Motor und auf anderen Wegstrecken. Ich hoffe, dass ich am Ende dieser Analysen der Frage nach dem elektronischen Differential bzw. nach (m)einer Differentialsperre näher kommen werde.
Einige Dinge sind schon jetzt gut erklärbar. So zeigt beispielsweise die Wendetangente im frühen Verlauf von lncges das Kippen des nach vorne geneigten MiniD0 auf den hinteren Gleitpad an . . . *gggg* und die Gegenläufigkeit der Schwingungen von iy12 und mdiff0 ist ja nicht allzu schwer zu verstehen. Mal sehen, wie es weiter geht (auch wenn meist das schöne Wetter zu Kletter- und anderen Touren einlädt - und es gibt auch andere Dinge zu tun).
Geändert von oberallgeier (17.10.2016 um 19:13 Uhr) Grund: Neuer Bilderserver
Ciao sagt der JoeamBerg
Lesezeichen