PID Einstellungen bei Brushless

hurtz2k

New member
Hi,

mein kleiner Landyard Umbau war gestern das erste mal an der frischen Luft. Was soll ich sagen, er mäht! Aber so ganz zufrieden bin ich nicht. Die Perimetrie funktioniert einwandfrei, er erkennt die Schleife, stoppt brav und fährt auch super. ABER: Wenn er auf die Schleife trifft, setzt er zum Umdrehen an, aber das gelingt ihm nicht zuverlässig. Der Rückwärtsgang hat quasi fast keine Wirkung. Er zuckt nur ein bisschen rückwärts, dann dreht er sich ca 1,5 mal im Kreis und fährt dann mit etwas Glück weiter. Das kann ja nicht so geplant sein, oder? Ich gehe davon aus, dass ich die PID-Einstellungen anpassen muss, da ich ja Brushless-Motoren und Treiber (aus dem Shop) nutze. Ich hab nur keine Ahnung in welche Richtung ich gehen muss. Ich habe den Eindruck, dass die Ansteuerung der Motoren zu sanft ist. Kann es sein, dass der Brushless-Treiber eine eigene Pid-Regelung hat, die das ganze nochmal extra dämpft? Der Geradeauslauf ist auch noch ausbaufähig, aktuell zieht er sehr stark nach links. Ich steh da momentan echt noch auf dem Schlauch. Hat wer ne Idee? Kann ich die PID-Regelung gänzlich rausnehmen zum testen? Bin um jede Idee dankbar.

Gruß Chris
 
Hallo, Hast du ein Kompass Modul drin? Wenn ja tue diesen mal deaktivieren. So weit ich weiß ist da noch ein Fehler in der Software drin. Der führt dazu das wenn er auf der Schleife trifft manchmal anfängt sich um den eigenen Kreis zu drehen. Manchmal führt das sogar dazu das er damit nicht mehr aufhört. Ein Pid Regler ist drin, kenne mich aber leider nicht mit den Einstellungen aus. In der Ardumower Software Azurit existieren zur Zeit nur 2 Motortreiber Einstellungen die man nutzen kann. Inwieweit das mit den Bruschless Motortreiber funktioniert kann ich leider nicht sagen weil ich die Standard Motoren bei mir im Einsatz habe.
Gruß
Uwe
 
Hi, ne ein Kompass hab ich nicht drin. GPS aber das liest meines Wissens ja nur die Position. Das brauch ich damit er feststellt ob er stecken geblieben ist, denn die Spannungsrückmeldung der Motortreiber ist trotz zusätzlich eingebauten INA nicht brauchbar. Dann muss ich mich Mal n bisschen in die Software graben und schauen ob ich da was für mich Basteln kann. Am besten wäre es eigentlich (wenn der Regler ja schon nen pid hat) den Software-Pid zu deaktivieren. Mal schauen ob ich das hinbekomme und dann Mal testen...
 
Hej Chris,
ich hatte beim "Rückwärtsgang" nach dem Überfahren des Perimeter ähnliche Probleme.
Solltest du die letzte Azurit Version verwenden, prüfe doch mal in der robot.cpp den STATE_PERI_OUT_REV, bei mir die Zeile 1639 .
Ich habe dort:
if (perimeterInside || (millis() >= stateEndTime))
in:
if (perimeterInside && (millis() >= stateEndTime))
geändert,
Seitdem funktioniert der "Rückwärtsgang" bei mir und kann in der App angepasst werden.

Mein Mower zieht leider auch nach links. Hier habe ich die Ursache noch nicht gefunden.
In der App zeigt er unterschiedlichen Leistungsverbrauch für die Motoren an. Kann auch sein, dass ich da ein mechanisches Problem habe.

Gruss
Wolfgang
 
Hallo,

in dev Version nicht in der Relase Version steht folgendes


Code:
case STATE_PERI_OUT_REV: 
      checkPerimeterBoundary();      
     // if (millis() >= stateEndTime) setNextState(STATE_PERI_OUT_ROLL, rollDir);   
      if (perimeterInside || (millis() >= stateEndTime)) setNextState (STATE_PERI_OUT_ROLL, rollDir); 
      break;
    case STATE_PERI_OUT_ROLL: 
      if (millis() >= stateEndTime) setNextState(STATE_FORWARD,0);                
      break;


was ist mit "(STATE_PERI_OUT_ROLL, rollDir); " hinter der Zeile? bleibt das? oder muss das gelöscht werden was ich aber nicht glaube?


Code:
case STATE_PERI_OUT_REV: 
      checkPerimeterBoundary();      
     // if (millis() >= stateEndTime) setNextState(STATE_PERI_OUT_ROLL, rollDir);   
      if (perimeterInside && (millis() >= stateEndTime)) setNextState (STATE_PERI_OUT_ROLL, rollDir); 
      break;
    case STATE_PERI_OUT_ROLL: 
      if (millis() >= stateEndTime) setNextState(STATE_FORWARD,0);                
      break;


ist es so richtig dann ändere ich das um

Gruß
Uwe
 
Hallo Uwe,

ich habe nur das erste statement geändert. PERI_OUT_Roll habe ich so belassen.
So wie ich das originale statement lese, ist die Bedingung erfüllt, sobald der Mower im Perimeter ist. Das stateEndTime für das Rückwärtsfahren wird damit ebenfalls beendet.

Ich weiss nicht, ob das für alle Anwender gilt - bei mir hat es geholfen.
Das Thema wurde auch früher schon mal hier im Forum behandelt - weiss jetzt aber nicht wann und von wem.

Gruss
Wolfgang
 
Hey,
erstmal n dickes Danke! Der Rückwärtsgang funktioniert jetzt prima! Es lag offensichtlich an den beiden kleinen && ;)
Jetzt hat mein kleiner eben einige erfolgreiche Runden über den Rasen gedreht, bin mächtig stolz auf den kleinen Flitzer. Ein bisschen Sorgen bereitet er mir noch und vielleicht passt das auch direkt hierher. Er setzt jetzt brav zurück, macht ne viertel Drehung (ungefähr) und fährt meistens brav wieder weiter. Komischer weiße aber nicht immer! Ab und an bleibt einfach das rechte oder das linke Rad stehen wenn er wieder anfährt und das Teil wirft nen Odo-Fehler. Wenn er den Fehler geworfen hat und quasi auf Off geht, dann fängt das Rad sich an zu bewegen und er legt ein paar Meter (1-3) zurück ohne das er wirklich gesteuert werden sollte. Es scheint so als würde das Rad einfach keinen "Go"-Befehl bekommen, erst wenn eben alles auf Off geht. Ich hab auch beobachtet, dass er ab und an beim losfahren einen dreiviertel-Drehung macht. Es scheint auch da so, als würde eines der Räder auf besseres Wetter warten. Ich habe keine Ahnung woran das liegen kann. Ich bin nicht ganz unbeleckt was das Programmieren eines Arduinos angeht, aber bei dem mächtigen Code bin ich noch nicht ganz durchgestiegen, so dass ich auch keinen wirklich Anhaltspunkt habe. Persönlich schiebe ich es wieder auf die PID Einstellungen, die vielleicht das Rad zu sanft(?) oder zu spät ansteuern!?
Vielleicht weiß hier ja noch jemand einen guten Rad, denn so kann er noch nicht in die Wildnis entlassen werden und meine Nachbarn wundern sich bestimmt schon, warum ich immer mit dem Handy in der Mitte meines Rasens sitze und gebannt dem komischen Rasenmäher zuschaue. :D
Achso, nur so nebenbei, weil es ja auch hierher passt (glaub ich): der Geradeauslauf, das habe ich ja schon berichtet, ist ja nicht wirklich gerade. Ich habe aber eben festgestellt, dass er scheinbar sogar weiß dass er nicht gerade ist. Zumindest gibt mit der 2D-Odo-Plot tatsächlich eine schöne Kurve aus. Kann das normal sein? Ich meine, ich kann damit leben, dass er Kurven fährt, aber so ganz kann das ja dann nicht stimmen, oder?

Gruß und nochmal Danke
Chris
 
Oben