Sunray-Firmware - Ideensammlung / ideas for improvement

@how Es sollte jetzt gehen (Firmware 1.0.119) - allerdings musst du den PCB-Pin "Mow" nehmen für Vor/Zurück (Speed). Der Speed-Pin benutzt leider denselben CPU-Interrupt wie der Motor beim M4.
 
Zuletzt bearbeitet:
@how Es sollte jetzt gehen (Firmware 1.0.119) - allerdings musst du den PCB-Pin "Mow" nehmen für Vor/Zurück (Speed). Der Speed-Pin benutzt leider denselben CPU-Interrupt wie der Motor beim M4.
Hallo Alexander,
vielen Dank für die superschnelle Erledigung. Der Pin-Switch ist kein Problem, muss ja nur am Stecker P13 die Pins 3 und 5 gegeneinander tauschen.
Werde es baldmöglichst testen und hier nochmals kurz berichten.
Gruß HOW
 
I use this kind of behaviour into mow motor management:
A runningmedian is used on mow power to compute each seconde a coeff according to max power.
Using a maximum PWM speed and minimum PWM speed the mow motor can modulate is speed according to the high of the grass.

The mower is really more quiet and the mowing duration is extended. ;)
Here part of the code
Code:
void Robot::motorMowControl() {
//bber60
  if (millis() < nextTimeMotorMowControl) return;
  nextTimeMotorMowControl = millis() + 100;
  if (motorMowForceOff) motorMowEnable = false;
  //Auto adjust the motor speed according to cutting power (The goal is On high grass the motor rotate faster)
  //A runningmedian process is used to check each seconde the power value of mow motor
  //if power is low the speed is reduce to have a longer mowing duration and less noise.
  if (motorMowEnable) {
    motorMowPowerMedian.add(motorMowPower);
    if (motorMowPowerMedian.getCount() > 10) { //check each 1 secondes
      int prevcoeff =  motorMowPwmCoeff;
      motorMowPwmCoeff = int((100 * motorMowPowerMedian.getAverage(4)) / (0.5 * motorMowPowerMax));
      if (motorMowPwmCoeff < prevcoeff) {
        //filter on speed reduce to keep the mow speed high for longuer duration
        motorMowPwmCoeff = int((0.1) * motorMowPwmCoeff + (0.9) * prevcoeff);// use only 10% of the new value
      }
      if ((statusCurr == WIRE_MOWING) || (statusCurr == SPIRALE_MOWING)) motorMowPwmCoeff = 100;
      if (motorMowPwmCoeff > 100) motorMowPwmCoeff = 100;
      if (motorMowEnable) {
        motorMowSpeedPWMSet = motorMowSpeedMinPwm + ((double)(motorMowSpeedMaxPwm - motorMowSpeedMinPwm)) * (((double)motorMowPwmCoeff) / 100.0);
      }
      if (motorMowSpeedPWMSet < motorMowSpeedMinPwm) motorMowSpeedPWMSet = motorMowSpeedMinPwm;
      if (motorMowSpeedPWMSet > motorMowSpeedMaxPwm) motorMowSpeedPWMSet = motorMowSpeedMaxPwm;
      //max speed on wire and spirale
      motorMowPowerMedian.clear();
    }
  }
  else
  {
    motorMowSpeedPWMSet = 0;
  }
  if (stateCurr == STATE_ERROR) {
    setMotorMowPWM(0, false); //stop immediatly on error (tilt etc....)
  }
  else
  {
    setMotorMowPWM(motorMowSpeedPWMSet, true);
  }
}
 
@how Es sollte jetzt gehen (Firmware 1.0.119) - allerdings musst du den PCB-Pin "Mow" nehmen für Vor/Zurück (Speed). Der Speed-Pin benutzt leider denselben CPU-Interrupt wie der Motor beim M4.
Hallo Alexander,
habe die 1.0.119 aufgespielt und den R/C Mode getestet. Funktioniert jetzt wieder wie bisher beim Due ohne Probleme. Nochmals vielen Dank für die superschnelle Umsetzung und Deine tolle Arbeit.
Gruß HOW
 
I suppose that when the GPS is in float mode you use the IMU and odometry to drive between checkpoint.
The issue can be the drift of the Gyro Accel IMU over time
So maybe you can compute a driftPerSeconde value when the mower drive in fix mode to reduce this error when you are in float mode.
 
Nice idea! Actually, we measured float accuracy on ground and it was always below 20cm, so I decided to use float values too for longer distances. Also, odometry accuracy can be only 50cm over longer distances and is highly depending on slope and ground and GPS float accuracy is highly depending on nearby buildings and obstacles. So, there's no constant driftPerSecond, it's highly depending on where the mower currently is in the garden. In the video below I'm using a difficult (both slope and float) track.

 
Zuletzt bearbeitet:
Hi Alexander,

Here are some ideas for improvement of the Sunray Firmware/App :
  • Use the actual time from the RTC
    • for the time stamps in the CONSOLE logging output
    • for the file date of the logging files written to SD card
  • Move hard coded configuration options from "config.h" to EEPROM in RTC module and add commands to modify the configuration via serial console or app
  • Add some entries to the Operations Menu in the Sunray App that allow to enable or disable user defined extensions of the Sunray firmware
  • Add the possibility to load maps created offline on a PC into the Sunray App (e.g. in JSON format)
  • Add the possibility to directly download maps in JSON format to a PC (currently this seems to be possible only via cut & paste).
Best regards
Harald
 
Zuletzt bearbeitet:
A waypoint function with the mow motor switched off. It could be called a ‘transit’. This would enable the mower to traverse a non grass path safely between mowing areas. In my case I have two lawn areas with a gravel/stone path between them on which a rotating mower blade could kick stones.
 
  • Actually, allow for reading a config file from the SD;-) That would make changes really easy.
  • Multiple maps on the SD with just some switch/check/sync commands from the app.
I'll have to switch to the large wheels first before I need the 'transit points';-)
 
It should be possible to use the Sunray App on a PC and in parallel observe the console logging output (on the same PC using the same WIFI link).

NOTE: This feature is already implemented! The option ENABLE_UDP in "config.h" enables CONSOLE output over WiFi to a PC.
 
Zuletzt bearbeitet:
A waypoint function with the mow motor switched off. It could be called a ‘transit’. This would enable the mower to traverse a non grass path safely between mowing areas. In my case I have two lawn areas with a gravel/stone path between them on which a rotating mower blade could kick stones.
A ’transit’ function/area would be very valuable. An important feature is that the mower does not drive in the exact same line every time during transit. The exact same path could make permanent marks if the transit ground is soft. A few cm random difference in the path every time would solve the problem with marks.
 
Hi Alexander,

I propose that the sliders in the mobile app get replaces by an input field, potentially with a spin box. It happens again and again, that the slider get accidentally moved during sliding through the options. As well it seems to me that the slider position sometimes does not represent the actual value. I have the impression, that the sliders are at their default position after a restart of the app, but underneath the most recent values are used. I think that the usability would not get worse with this change.

Except this flaw, the app is great!

Many thanks and best regards, Felix
 
Hi,

I think I was suggested this before but it had been nice if I can split one map in different zones.

For example, I want only to cut my backyard. (Zone 2) Frontyard (Zon 1) Everything: All Zones.

zones-sunray-ardumower.jpg

I'm also at moment testing docking but was got a problem. I need to test a little more before I can give suggestions on improvments.

UPDATE: Maby skip 10/25 Waypoint could be a quickfix and skip waypoint button in mapview.

BUG: Also I think there is a bug if you press skip waypint when mowing. You need to stop machine and then press skip waypoint otherwise it may want to fly to next place in no map area :)
 
Zuletzt bearbeitet:
@AlexanderG folgendes Problem mein Grundstück ist zu größten Teil mit Mauern umgeben wenn der Mower zu dicht an eine Mauer oder Randstein gekommen ist versucht er diese zu umfahren dann fährt er immer einen Meter nach rechts und drückt gegen die Mauer und das manchmal die ganze Mauer entlang ich beobachte meiner Mower fast immer aber bis ich von der 2 ten Etage zu ihm gelaufen bin hat er schon Ordendlich spuren im Rasen gekratz. Mir wäre es lieber ich könnte auswählen das er die Bahn beendet und mit der nächsten Bahn weiter macht. Oder kann ich das jetzt schon irgendwie einstellen?
Dann noch ein Problem ich habe 2 Mähmotore die ziehen wenn das gras mal etwas höher ist soviel Strom das der mäher abschaltet. Besser wäre es doch wenn der Motortreiber (aus dem Shop wie alles) der ja 2 anschlüsse hat auch beide verwenden könnte ist das möglich? Eine Auswahl in der Config.h ein mow Motor oder 2 Mowmotore. Vielen Dank.
VG Michael
 
Zuletzt bearbeitet:
Hallo Michael,
ich habe das z.T. bei mir so gelöst:
- der Perimeter macht, wenn ich auf die Mauer / das Haus zufahre, nicht eine 90° knick, sondern 2x45. So Fahre ich nicht frontal drauf zu. Außer dem halte ich wegen relativ schlechtem GPS direkt an der Wand einen Sicherheitsabstand.
- die Karte habe ich von Hand am Rechner zusammengebaut: erst 2 Runden in "Rings" außenrum, nun die 2. Runde als Perimeter in einen neue Karte speichern und "Lines" berechnen lassen, anschließend alles zusammenkopieren.
Wenn man sich die JSON-Struktur mal ansieht, ist es eigentlich recht plausibel. Habe meinen Null-Punkt in der App nach Süd-West außerhalb des Grundstücks gelegt, so habe ich nur Positive Offset-Werte in der Karte.

Das wäre übrigens mein Wunsch / Idee an dieser Stelle: außen eine Anzahl X an Ringen, den Rest als Linien
 
Bei der GPS-Version setzt du einfach die Perimeter-Punkte kurz vor und kurz nach der Ecke, wenn du mit Begrenzungsdraht arbeitest ziehst du den Draht entsprechend wie in dem Bild rechts.
 

Anhänge

  • Bildschirmfoto 2021-06-15 um 08.53.10.png
    Bildschirmfoto 2021-06-15 um 08.53.10.png
    5,7 KB · Aufrufe: 29
Oben