Odometrie bringt Mega zum Absturz?

paddy

Active member
Halo zusammen,

dank der Unterstützung von Stephan verfügt der Bock jetzt auch über Odometrie. Über je eine Schlitzscheibe an der Motorachse wird mit dem Lichtschranken-Kit aus dem Shop die zurückgelegte Entfernung gemessen.


20160705_202924_2016-07-07.jpg


20160705_202857_2016-07-07.jpg


Damit erreiche ich etwa 9,9 Ticks pro cm und ca. 800 pro Radumdrehung. Problem ist nun aber, dass der Mower mit eingeschalteter Odometrie ca. 5 Minuten läuft und dann einfach stehen bleibt. Mähmotoren laufen weiter, aber Bluetooth bricht ab. Es scheint als ob der Mega abstürzt. Das Problem tritt auch auf, wenn Odometrie angeschlossen, aber deaktiviert ist. Ohne Odometrie (deaktiviert und ausgesteckt) mäht er ohne Kummer seit einigen Stunden.

Ich verwende zur Zeit die 1.0a5 Azurit. Hat jemand eine Idee, woran das liegt oder wie ich mich dem Problem nähern kann?
 
Genau das selbe Fehlerbild habe ich auch bei meinem iSHEEP. Ich dachte aber es hat mit der geringen Anzahl von Impulsen pro Umdrehung bei mir zu tun (odometryTicksPerRevolution = 64). Ich verwende auch die 1.0a5 Azurit (mit Anpassung für BTS7960 IBT_2 Motortreiber).
Nach dem mit Odometrie der Fehler immer wieder aufgetreten ist, habe ich wie du, die Odometrie abgezogen und deaktiviert. So geht es. Dann habe ich aus Verzweiflung einen anderen Arduino verwendet. Jetzt bleibt er nicht mehr einfach im Programm hängen, sondern bringt einen Odometrie-Error (mal links, mal rechts). Da ich nur "One-Wire-Odometrie" nutze, muss kurzzeitig eine "0" bei der Odometrieberechung trotz Radbewegung auftauchen.
Kann diese These jemand bestätigen, oder hab ich das Programm falsch verstanden?

PS: Tut mir leid, das ich so lang nichts von mir hören lassen hab. Ich kämpfe zur zeit noch an dem Problem und habe keine Vortschritte zu vermelden. Bislang war ich scheinbar auch der Einzigst mit diesem Problem. Außerdem dachte ich, es kann mit der Motortreiber Anpassung zu tun haben.
 
Ich hatte auch sporadische Odometriefehler siehe hier
Workaround war ADC samplerate in adcman auf die 19kHz zu setzen. (Das war noch mit der 1.0a4)
Die Anpassungen hier haben dann Abhilfe verschaffen.
Die Änderungen sind in die 1.0a6 oder der aktuellen Developper Version umgesetzt.

Pullup-Widerstände können auch Abhilfe verschaffen- auch auf den Odometrie-Pins (und RC-Pins), welche Ihr nicht verwendet.
Wenn die Pins nicht an eine Spannung gebunden sind, kann es sein, dass die den Wert (durch Induktion oder kapazitive Kopplung) "zufällig" ändern und
viele Interrupte auslösen -> der Mega kann nichts anderes mehr tun alls ISR abzuarbeiten.
Gebebenfalls könnte das einen Absturz zur Folge haben.

Gruess

Chris
 
Hallo zusammen,

das Thema habe ich erstmal nicht weiter verfolgt. Das Gras wächst aktuell so schnell, das ich den Bock fast täglich auf die Runde schicke.
Immerhin bin ich mit dem Problem nicht alleine. Die Pullup Widerstände habe ich bei Odometrie verbaut (alle vier).
Was meinst du mit RC Pins? Remote control also Funkfernbedienung? Dort werde ich mal die internen Pullup Widerstände aktivieren.

Ich verwende übrigens auch die One-Wire Odometrie
 
Hallo Leute,
ich habe aktuell dasselbe Problem mit der Version 1.0a6 Azurit.
SW habe ich erweitert damit Mähzonen angefahren werden, sollte aber mit dem Problem nichts zu tun haben!

Seitdem Odometrie aktiviert ist (70 ticks/Rev und 0.8cm/tick mit 1 Sensor/Rad) ist die Steuerung instabil geworden(Mower stoppt mit laufendem Motor, reagiert nicht auf Eingaben via Pfod bzw. hängt sich nach Wertänderung auf).

Das die aktuelle Version eine "ADC samplerate"von 19kHz kann ich nicht bestätigen, werde es aber umstellen und testen.
PlanB wäre die nicht benötigten Eingänge für RC bzw. Odometrie2 auszukommentieren damit die keine Interrupts mehr auslösen können.
 
Hallo Alex,
zu eurem Odometrieproblem kann ich leider nicht viel sagen.
Aber es würde mich sehr interessieren, wie du das mit den Mähzonen umgesetzt hast.
Gruß
Stephan
 
Hallo,

auch hier Probleme mit der Odometrie. Sobald diese aktiviert ist, lässt sich der Mower nur durch den ausschalter stoppen.

Es sind zwar two Way Sensoren verbaut, wird aber nur noch einer Ausgewertete.

Pullup Widerstände sind (noch) nicht eingebaut. Ich wollte erstmal die internen aktivieren.

Schleife verwende ich nicht. Ist alles außer Bumper und Odometrie deaktiviert.

Ohne Odometrie läuft er gut mit nicht.

Stefan
 
Stephan schrieb:
Hallo Alex,
zu eurem Odometrieproblem kann ich leider nicht viel sagen.
Aber es würde mich sehr interessieren, wie du das mit den Mähzonen umgesetzt hast.
Gruß
Stephan

Hi Stephan,
Mähzonen hab ich einfach so gelöst dass der Mower nach dem Verlassen der Station den Perimeter sucht,
dann eine einstellbare Zeit(momentan 5 verschiedene Zeiten einstellbar) lange dem Perimeter folgt und dann den "normalen" Mähbetrieb startet.
Bei Interesse kann ich gerne den Source zur Verfügung stellen (gerade nicht zur Hand).
 
Zuletzt bearbeitet von einem Moderator:
Interessanter Ansatz.
Ich hatte gehofft, dass du eine Lösung für virtuelle Grenzen gefunden hast.
Wie kommst du denn beim Auffahren aus der Ladestation halbwegs an die Stelle der Schleife hinter der Ladestation um in die Zonen zu kommen?
In den Einstellungen der Ladestation kann man ja nur die Rückfahrzeit und die Drehzeit definieren.
Hast du noch eine zusätzliche Einstellung für Gradeausfahrt, Linksdrehung,Gradeausfahrt und nochmals Linksdrehung eingebaut? Oder denke ich da jetzt zu kompliziert?
Und ich vermute deine Mähbereiche sind durch Engstellen voneinande getrennt, so das der Mower nur beim Abfahren der Schleife da durch kommt.
Beim programmieren bin ich leider nicht sehr fit. Würde mich aber freuen mir mal deinen Code anzuschauen zu können und das auch zu testen.
Gruß
Stephan
 
Hallo ,

bitte nicht falsch verstehen aber könnte Ihr bitte das Zonen Problem, das betimt auch andere Interessiert
in einem neune Thread diskutieren ?

Gruss Stefan
 
Hallo,

gestern habe ich nochmal weiter gebaut und Ultraschall Sensoren angebracht. Wo ich schon mal den Kasten auf hatte, hab ich die Odometrie auch wieder angeschlossen. Beim testen der Ultraschallsensoren ist er mir wieder abgestürzt. Vorher hat er ein paarmal gepiept.
Zum testen und einstellen der US Sensoren habe ich den Mäher von Hand immer wieder vor ein Hindernis geschoben (angehoben). Die Motoren waren aus. Trotzdem ist nach ein paar Minuten schluss. Bluetooth Verbindung bricht ab und kann nicht wieder aufgebaut werden. Auch sonst geht nichts mehr (Button). Nur Aus- und Einschalten hilft.

Beim testen habe ich bestimmt den ein oder anderen Interrupt der Odometrie ausgelöst, aber es können nur wenige gewesen sein. Die Anzahl der Interrupts scheint nicht das Problem zu sein.
Was nutzt ihr denn für die Odometrie? Ich habe das Set aus dem Shop https://www.marotronics.de/Dual-Dre...dometrie-Drehzahlmessung-Arduino-Raspberry-PI
Die Pullup Widerstände an den RC Eingängen schließe ich als Ursache auch aus, da ich weder an den Anschlüssen, noch am Code was geändert habe (versuchen werde ich es bei Zeiten trotzdem).

PS: Wozu dienen eigentlich die Potis an den Counting Modul? Vielleicht könnte die Ursache ja hier liegen?
 
Guter Einwand von StefanM, habe hier ein Thema für Mähzonen gestartet:

Mähzonen

Was die "Aufhänger" der Steuerung angeht habe ich jetzt mal sämtliche Interrupts bis auf die zwei für Odometrie auskommentiert.
Testlauf mit einer Stunde ist ohne Probleme gelaufen. Der Test war natürlich zu kurz um verlässliche Aussagen treffen zu können!
Die Spur scheint allerdings in Richtung Interrupts zu führen die scheinbar zu viel Performance brauchen (evtl. durch Rauschen an den Eingängen zu oft aufgerufen oder obwohl deaktiviert trotzdem aufgerufen werden).
Bin gespannt ob es hilft die Interrupt Eingänge auf ein definiertes Potential zu ziehen!

@Patrick, hast du RC angeschlossen?

Hab auch dieses Modul aus dem Shop, die Potis dienen meines Erachtens nur dafür den Schwellwert für low/high einzustellen. Sofern die Led's bei Signalwechsel nicht flackern, denke ich dass das nicht das Problem ist.

Alex
 
Hi,

ich habe kein RC angeschlossen. Werde mal die Interrupts nach und nach deaktivieren und schauen wie es läuft
 
Hallo,
hab nur mehr 2 Interrupts aktiv und auch adcman auf 19khz runter gestellt.
Leider funktioniert das Ding heute so gut wie gar nicht(komisches herumregeln und speziell wenn er rückwärts wieder in die Schleife fahren soll hängt er sich auf).
Bin momentan etwas ratlos :huh:
 
Hallo,

ich habe gestern alle Interrupts außer den beiden für Odometrie auskommentiert. Keine Besserung, er fährt kurz oder besser gesagt, eiert durch die Gegend (deutlich langsamer) und nach vielleicht 2 Minuten ist Schluss.

Wenn ich Odometrie deaktiviere, bleibt es dabei, nach 2 Minuten ist Schluss. Habe nun alle Interrupts auskommentiert (und damit natürlich keine Odo), jetzt fährt er wieder bis der Akku leer ist.

Ich habe den Eindruck, speziell wenn er die Schleife trifft ist es sofort vorbei
 
Hi,

ich kann das von Patrick genau so bestätigen!
Solange er gerade aus Vor fährt ist alles gut, Drehrichtungsänderungen oder vlt. auch Stopps scheinen Probleme zu verursachen.

Kenne mich mit den Interrupts zwar nicht so gut aus, aber mir war dass
nach Abschalten der Odometrie und speichern der Settings erst ein Neustart die Interrupts deaktiviert hat.

Durch Zufall habe ich bemerkt dass die Motorkontrolle/Odometrie auch im Status OFF aktiv ist. Meine Encoderscheibe sitzt auf einem Vierkant und da etwas Spiel zwichen Vierkant und Getriebe ist, kommt es beim Herumtragen auch wenn er abgeschaltet ist (State = OFF)zu Impulsen was sehr zuverlässig zum Aufhängen des Mega führt bzw. zum ansteuern der Motoren bis zur geschätzten Maximaldrehzahl.
Dieser Status (Solldrehzal NULL aber evtl. noch Impulse vom Encoder) trifft eigentlich auch zu wenn der Roboter nach Überfahrt des Perimeters stoppt. Werde jetzt mal versuchen die Auswertung der Odometrie mit "motorXXXXPWMCurr" zu verknüpfen damit Impulse die ohne Solldrehzahl daherkommen ignoriert werden.
 
Hi,

ich hatte da gestern auch so ein Erlebnis. Die Odometrie war deaktiviert. Ich hatte ein schleifendes Geräusch und wollte schauen, woher es kommt. Also hab ich den Mower angehalten (State OFF) und mal geschaut, was das ist. Kurz an einem Rad gedreht und schwupps springt die Kiste an (habe keinen Button verbaut). Plötzlich war ich im Auto Modus, Messer gehen an und Antriebe laufen los.
Das ist sehr toll, wenn man die Kiste gerade auf der Seite liegen hat. Zum Glück habe ich genügend Not-Aus um von allen Seiten einen zu erreichen.

Merke: mit der Odometrie haben wir nicht nur Ärger, es kann auch echt gefährlich werden. Also immer schön den Mower abschalten, bevor man an einem Rad dreht
 
Hallo Patrick,
das mit dem Drehen der Räder im State-OFF-Modus habe ich auch.
Also wenn der Mäher im State OFF ist und ich ihn mit der Hand etwas bewege laufen die Räder für einen Moment an. Sehr langsam und nicht gleich. So als wollte er etwas ausgleichen.
Aber einen Absturtz vom Mega hatte ich noch nie.
Ab jetzt schalte ich den Mower dann auch besser ganz aus, wenn ich mal unten etwas reinige. Besse ist besser. :whistle:
Habt ihr eigentlich IMU verbaut und auch aktiv?
Ich habe bei mir IMU zwar aktiv aber wenn ich IMU für Kurskorrektur einschalte macht er auch die komischsten Sachen.
Fährt extrem langsam, schwänzelt stark und beim auftreffen auf die Schleife dreht er nicht um sondern fährt ein Stück zurück dreht ein wenig und fährt wieder auf die Schleife bis ich ihn dann komplett Ausschalte. Evtl. liegt da das Problem?
Gruß
Stephan
 
Hi,

ich habe keine IMU verbaut und auch nicht aktiviert. Hast du an den Potis vom Odometrie Modul was verändert? Ich hab da nie gedreht.
Mir ist die Interrupt Geschichte noch nicht ganz klar. So wie ich es verstehe, wird bei jeder Wertänderung der Interrupt aufgerufen. Wir reden hier aber über einen analogen Eingang, da ändert sich der Wert doch ständig Aufgrund von Spannungsschwankungen (+/- 0,05V oder so)?
 
Hi,

hab auch keine IMU verbaut oder aktiviert.

Diese Analogeingänge werden in dem Fall digital abgefragt:
.................
"boolean odometryRightState = digitalRead(pinOdometryRight); "
.................
Der Interrupt löst soweit ich es verstanden habe erst bei Flankenwechsel aus.

Was die Ansteuerung der Antriebsmotoren angeht, ist das glaub ich nicht ganz im Sinne des Erfinders dass die
Regelung im Status OFF aktiv ist.
Ich denke es kommt von der Gleichlaufregelung:
"if (motorLeftSpeedRpmSet == motorRightSpeedRpmSet){
// line motion
motorLeftPID.w = motorLeftSpeedRpmSet - RLdiff/2;
motorRightPID.w = motorRightSpeedRpmSet + RLdiff/2; "
allerdings ist fraglich ob "motorControl()" überhaupt ausgeführt werden muss/soll wenn das Ding ausgeschaltet ist,
bzw. wenn kein Drehzalsollwert ansteht!
 
Oben