Update 1.0.230 -> 1.0.298 Verhalten OBSTACLE_DETECTION_ROTATION

tetzlav

Member
Hallo liebe Leute,

ich habe heute mal ein Update von 1.0.230 auf 1.0.298 gewagt und das hat prinzipiell auch sehr gut funktioniert. Mir ging es primär um die Anzeige von erkannten Hindernissen in der Karte.

Mir ist dann nur aufgefallen, dass bei aktiviertem #define OBSTACLE_DETECTION_ROTATION true bei einem Hinternis nun etwas anders reagiert wird.
Typische Situation: Mower bleibt beim Drehen mit dem Popo an der Wäschespinne hängen. Nun wird der Mähmotor abgeschaltet wird, kurz gepiept, dann der Mähmotor wieder hochgefahren und dann ein neuer Versuch gestartet sich zu drehen, sprich: den Popo zu befreien.

In der Version .230 wurde das etwas effizienter gelöst: Es wurde eine unmögliche Drehung am Zaun oder an einer Stange erkannt. Dann wurde aber ohne Mähmotorstop etwas Vorwärts gefahren und dann einfach weiter gedreht. So wurde der Hintern recht effizient an dem Hinternis vorbeigedrückt. Das führte zwar hin und wieder dazu, dass der Mower die jungen Bäume mit der scharfen Hinterkante etwas unsanft bearbeitet hat, aber er kam zügig weiter.

Das "neue Verhalten" hat heute dazu geführt, dass der Mower sich an der dem Schaukelgestänge festgebissen hat und immer wieder Mähmotorstop, Minimaler Fahr/Drehversuch, sofort wieder Mähmotorstop, usw, usf. Er konnte sich so aber nicht mehr befreien.

Wie kann ich das "alte Verhalten" wieder herstellen?


LG
 
Hast Du inzwischen eine Lösung, wie der Mähmotor nicht immer stoppt? Ich wollte für dieses Frühjahr den gleichen Versionswechsel machen. Das klingt für mich aber nach einem Showstopper. Da ich noch immer mit dem Brushlesstreiber fahre, der gern beim Ausschalten abraucht, wäre das natürlich ein großes unnötiges Risiko.
 
Hallo,

weil die Saison startet wollte ich das Thema gerne nochmal nach oben bringen.
Bin ich echt der Einzige der dieses Verhalten beobachtet?

LG
 
Ich habe jetzt mal auch den Wechsel 1.0.230 nach 1.0.298 probiert und sehe ähnliche unschöne Verhalten:
1. Er kam etwas nah an den Zaun, wo der Bumper am Pfeiler ausgelöst hat. Früher war er dann mit großem Radius außenrum gefahren. Jetzt ist er nur minimal ausgewichen und hat den Pfeiler sanft umfahren. Soweit eigentlich sogar positiv. Nur ist auch hierbei jetzt der Mähmotor ausgegangen. Es dauerte bis er wieder auf Touren war und das ganze mit dem Risiko, dass der Treiber bei der Abschaltung ein Mal mehr hätte abrauchen können. Sobald ich Zeit finde, werde ich auf die Suche gehen, wie ich die Mähmotorabschaltung für diesen Fall unterbinden kann.
2. Über Winter hat sich an einer Stelle eine abgesenkte Kante zwischen Rasenkantstein und Gehweg eingestellt. Beim Wechsel von der ersten äußeren Runde in die 2. innenliegende, dreht der Mäher genau hier mit dem Hinterrad durch. Mit 230 dreht das rechte Rad auf dem Gehweg leicht durch. Dann hat er sich aber auch schon befreit und fährt normal weiter. Mit 298 stoppt er sofort, schaltet den Motor auch wieder aus, fährt den Motor wieder auf Touren, versucht es minimal, stoppt wieder, ... - sitzt fest. Auch hier werde ich mal auf die Suche gehen, was das hervorruft und wie ich es beseitigen kann bevor ich die Kante entschärfe. Das gefällt mir so auch nicht.

Vermutlich handelt es sich im 2. Fall um die gleiche Ursache wie bei Dir. Es wird irgendeine Fahrmotor läuft, Mäher bewegt sich nicht oder Lasterkennung durch Motorstromüberwachung sein. Ich melde mich, wenn ich etwas gefunden habe.
Es wird aber etwas dauern, da ich gerade beruflich viel unterwegs bin. Bis dahin läuft bei mir erst einmal 230 weiter.
 
Kann man nicht die Größe des Obstacle Radiuses in der config.h einstellen? Bin mir aktuell nicht sicher…
 
Ja, hier muss aber irgendetwas anderes ablaufen. Den Radius habe ich in beiden Versionen unverändert gelassen. Dennoch verhält es sich anders. Aber in der Zwischenzeit sind halt einige weitere Optionen hinzugekommen. Hier ist einiges verändert worden. Muss ich mir mit etwas Ruhe mal genauer vornehmen.
 
Ich finde das ständige Motor Starten und stoppen auch sehr nervig. Insgesamt benötige ich für meine Fläche nun deutlich länger. Oft kann sich der mower auch nicht mehr befreien und bleibt mit Error stehen.
Mit der alten Version hatte ich diese Probleme nicht.
Kann ich das neue Verhalten irgendwie deaktivieren?
 
Das Abschalten des Motors macht er wohl aus sicherheitsgründen, weil der ein Stück zurück fährt.
Hab ich auch schon versucht abzuschalten. Aber leider noch nicht die richtige Stelle gefunden.
 
Schaut mal in den neuen "Op" Ordner in Sunray/src/op.

Da gibts Escape Forwar und Backward.
Diese Stelle sollte zu dem besagten Verhalten führen:

void EscapeForwardOp::run(){
battery.resetIdle();
motor.setLinearAngularSpeed(0.1,0);
motor.setMowState(false);

Grüße.
 
Ok, danke für die Info.
Wie kann ich denn das besagte verhalten "deaktivieren"?
Einfach alles auskommentieren wird vermutlich nicht funktionieren...?
Wird es zum Saisonstart ein Patch oä geben, oder macht es ggf. sinn auf die x.230 downzugraden?
 
Ich denke er meint einmal in der Escape Forward und Backward Datei (im "Op" Ordner in Sunray/src/op)

Ich werde das die Tage mal testen...
 
Werde ich am Wochenende auch mal teste, mir hat es irgendwie noch nie gefallen das der Mähmotor immer ausgeht. Habe ich auch noch nie bei einem anderen Mähroboter gesehen. Anderseits kann es natürlich auch einen Vorteil haben, wenn er vorwärts anstoßt und Rückwärts dann z.B. den Abgrund runterfällt.
 
Moin, nach meinem Test heute muss ich leider melden, dass der Motor noch immer stoppt...

Das sonar löst bei mir aus, der Mäher legt den Rüchwärtsgang ein, der Motor stoppt.
Dann fängt er an zu piepen (Initialisierung) und startet den Motor wieder. Dann gehts weiter mit der wilden Fahrt ;)
 
Zuletzt bearbeitet:
Ich glaube das ist in der MowOp.cpp:

void MowOp::eek:nMotorError(){
if (ENABLE_FAULT_OBSTACLE_AVOIDANCE){
if (motor.motorError){
// this is the molehole situation: motor error will permanently trigger on molehole => we try obstacle avoidance (molehole avoidance strategy)
motor.motorError = false; // reset motor error flag
motorErrorCounter++;
CONSOLE.print("MowOp::eek:nMotorError motorErrorCounter=");
CONSOLE.println(motorErrorCounter);
if (maps.wayMode != WAY_DOCK){

Oder sehe ich das falsch?
 
Schaut mal in den neuen "Op" Ordner in Sunray/src/op.

Da gibts Escape Forwar und Backward.
Diese Stelle sollte zu dem besagten Verhalten führen:

void EscapeForwardOp::run(){
battery.resetIdle();
motor.setLinearAngularSpeed(0.1,0);
motor.setMowState(false);

Grüße.
Hallo,
ich habe es auch gerade mal probiert. Die hier benannte Zeile motor.setMowState(false) in beiden Dateien wegzulassen, ist auf jeden erforderlich. Damit wird der Motor schon einmal nicht gestoppt, um bei einem Bumpertrigger bei Vorwärtsfahrt zurückzusetzen.

Erst jetzt, wenn der Mäher fertig zurückgesetzt hat und die ObstacleAvoidance-Umfahrung starten will, stoppt der Motor.
Hier ist also nur eine weitere Stelle im Code anzupassen, damit der Mähmotor durchläuft.
Das "motor.stopImmediately(false);" im Anschluss wird in diesen Routinen mit false übergeben, kann den Motor also nicht stoppen.
Ich befürchte, es passiert im anschließenden ChangeOp.
 
So ist es.
Ich habe gerade in MowOp.cpp auch noch die Initialisierungszeile auskommentiert und jetzt stoppt der Motor nicht mehr.
Ich bin mir nur nicht sicher, ob es irgendwo vielleicht notwendig ist. Von daher werde ich daran noch mal feilen.

void MowOp::begin(){
bool error = false;
bool routingFailed = false;
CONSOLE.println("OP_MOW");
motor.enableTractionMotors(true); // allow traction motors to operate
motor.setLinearAngularSpeed(0,0);
//motor.setMowState(false);
 
Ich könnte mir vorstellen, dass es in MowOp.cpp mit der folgenden Zeile funktionieren könnte:
if ((previousOp != &escapeReverseOp) && (previousOp != &escapeForwardOp)) motor.setMowState(false);
Ich kann es aber heute nicht mehr ausprobieren. Es hat hier stark zu regnen angefangen.
 
Müsste es nicht ein ODER sein?
Also, wenn der vorherige Op NICHT escapereverse oder forward war, nur dann motor.setMowState(false)

if ((previousOp != &escapeReverseOp) || (previousOp != &escapeForwardOp)) motor.setMowState(false);

ne, quark was ich schreibe :ROFLMAO: du hast recht, das stimmt schon
 
Oben