Mein Projekt CaSSAndRA zur Steuerung des Ardumowers

Hört sich interessant an, Firmware darüber online update bar?
Wenn Du den Raspberry im/am Mower verbaut hast und das Arduino/Adafruit Board per USB daran angeschlossen, kannst Du die Arduino IDE auf dem Raspberry installieren, die per VNC am Raspberry anmelden und hierüber flashen.

Was auch gehen könnte: Per Filetransfer das fertige Programmflashfile auf den Raspberry bringen und per avrdude vom Raspberry im Comandline mode flashen (bin mir nur nicht sicher, ob das auch das Adafruit unterstützt).
 
Was auch gehen könnte: Per Filetransfer das fertige Programmflashfile auf den Raspberry bringen und per avrdude vom Raspberry im Comandline mode flashen (bin mir nur nicht sicher, ob das auch das Adafruit unterstützt).
I use this way on PyArdu to flash arduino Due and on PySunray version to flash the teensy4.1
Here the python command part to flash a DUE from dueflash.py:

Code:
print("put the DUE into flash mode on ttyACM0")
        myShell.send('stty -F /dev/ttyACM0 1200')
        time.sleep(1)
        print("Flash the DUE")
        print()
        myShell.send('/home/pi/.arduino15/packages/arduino/tools/bossac/1.6.1-arduino/bossac -i -p /ttyACM0 -R -e -w -b -v '+str(tk_fileName.get())+'')
        time.sleep(1)
        print("restart the DUE")
        myShell.send('stty -F /dev/ttyACM0 115200')
        time.sleep(3)
        os.remove(str(tk_fileName.get()))


You build the bin file on your PC using arduino ide (or download it from the net) and put it into PI using VNC.

It's explain in the WIKI here :
and here under DUE FIRMWARE UPDATE section :

For Adafruit Grand central M4 i need to check , but i hope the process is the same , simply need to find the command to put the board in flash mode and command to flash.
 
Hallo,
Herzlichen Dank. Ich habe die App auch soweit auf einem Raspberry Pi 3 Model B mit aktuellem Pi OS (64-bit) zum Laufen bekommen. Zumindest habe ich eine Kommunikation über UART und kann die App per Safari oder direkt auf dem Pi mit Chromium ansprechen.

Ich hatte alles direkt unter dem User pi eingerichtet, also insbesondere die Pythonumgebung. D.h. dann aber auch, dass es unter pi läuft, nicht aber als Systemservice. Von daher war in der Servicebeschreibungsdatei auch zusätzlich ein User=pi notwendig, damit dieses als Service lief.

Leider habe ich ein Problem: Ich kann meine exportierte Karte nicht einladen. Ich gehe davon aus, Du meinst die Map als Textdatei exportiert.
Ursprünglich hatte ich eine Datei mit 4 Maps mit jeweils Perimeterpunkten und Waypoints. Ich habe es auch schon auf 1 Map mit nur Perimeterpunkten reduziert. Immer das Gleiche: "Warning: Import failed".
Kann es sein, dass Deine Funktion unbedingt Exclusions oder Dockpoints erwartet? Ich habe keine Dockingstation und keine Exclusions. Dementsprechend sind diese Sektionen bei mir leer.
 
Ok, interessant.

1. Kannst du mit "journalctl -u cassandra -e dir die Einträge anschauen, was zum Zeitpunkt des Imports in der Console ausgegeben wird.
2. In der app.py Zeile 5, INFO auf DEBUG ändern und die App neuestarten und den Import noch mal durchführen, danach muss es im journalctl mehr Eintraäge geben
3. Oder lass dein Export mir zukommen ich gucke mal woran es scheitert

Gruß
 
Apr 28 20:09:15 RaspberryPiMuh python3[2113]: 2023-04-28 20:09:15 DEBUG 0:4:39 ctlDur=0.02 op=Idle(initiatedByOperator 0) freem=237787 sp=443D7 bat=27.01(0.25) chg=0.17(0.02) tg=0.00,0.00 x=5.47 y=>
Apr 28 20:09:15 RaspberryPiMuh python3[2113]: 2023-04-28 20:09:15 DEBUG CON:AT+S
Apr 28 20:09:15 RaspberryPiMuh python3[2113]: 2023-04-28 20:09:15 DEBUG S,27.01,5.47,-5.29,1.96,0,0,0,279.56,0,0.00,0.00,607400.06,0,0.25,0,7820,0.00,0xbe
Apr 28 20:09:15 RaspberryPiMuh python3[2113]: 2023-04-28 20:09:15 DEBUG Backend: Calc data from state data frame
Apr 28 20:09:18 RaspberryPiMuh python3[2113]: 2023-04-28 20:09:18 WARNING Backend: Sunray file import failed
Apr 28 20:09:18 RaspberryPiMuh python3[2113]: 2023-04-28 20:09:18 DEBUG "['sol'] not found in axis"

Ich vermute, das ist der Punkt, der Dich interessiert.

In 230428-Test.Txt sind 4 Test-Maps, wovon der Perimeter der Map 4 der interessanteste wäre. Aber soweit komme ich halt nicht.
 

Anhänge

  • Debug.txt
    6,7 KB · Aufrufe: 4
  • 230428-Test.Txt
    49,6 KB · Aufrufe: 4
Ok, warum fehlt sol Größe in deinem Export, das ist interessant. Ich meine ich brauche für die weitere Berechnungen diese Größe nicht. Es scheitert an der Stelle, wo diese aus dem DataFrame rausgeschmissen werden soll :) Dürfte einfach zu korrigieren sein
 
So den file.py unter /src/backend/utils mit dem Anhang ersetzen. Ich kann leider keine *.py dateien hochladen. txt hinten durch py ersetzen
 

Anhänge

  • file.txt
    2,4 KB · Aufrufe: 3
Danke.
Was soll denn in sol stecken?
Vielleicht liegt es daran, dass ich die Perimeterdaten bereits letztes Jahr im Frühjahr erstellt habe. Seither hat sich anscheinend einiges geändert. Der Export ist zwar aktuell und mit aktueller SW. Die Daten sind aber letztes Jahr entstanden.
 
Ich habe noch einmal ein Problem mit der gespeicherten Perimeterdatei.
Erst einmal beim Erzeugen auffällig: Obwohl in der Importdatei Maps 1 bis 4 enthalten sind, werden mir nach dem Import nur 0 und 3 angeboten. OK, da hier die Zählweise mit 0 beginnt, müsste 3 die Map 4 sein, wodurch ich genau die benötigte angeboten bekomme.
Diese ausgewählt kann ich anscheinend damit arbeiten. Es lässt sich zumindest eine Vorschau erzeugen. Um es operativ zu testen, müsste ich ihm bei dem Regen erst einmal das schwimmen beibringen, sieht aber erst einmal alles gut aus.
Bis ich einen Neustart von CaSSAndRA benötige. Es startet nicht durch. Irgendetwas fehlt in der gespeicherten Perimeterdatei. Hieran stürzt CaSSAndRA immer ab. Lösche ich diese, startet CaSSAndRA und ich kann den Perimeter neu importieren und damit arbeiten.
Ich habe einmal die Fehlermeldung und die perimeter.json angehängt.

Noch 2 Fragen zu den Mapparametern:
1. Verstehe ich es richtig, dass man mit "Distance to Border" die Anzahl der Mähbahnen einstellt, die er erst einmal außenrum mähen würde und anschließend als Abstand zum Rand beim Wenden beim Bahnenmähen einhalten würde?
2. Was wird anders gemacht, wenn man "Mow Cut Edge" Yes oder No wählt?
 

Anhänge

  • Startabbruch.Txt
    2 KB · Aufrufe: 5
  • perimeter.Txt
    576 Bytes · Aufrufe: 2
Welche Version der Shapely Libary ist installiert? 1.8.4?
1. Verstehe ich es richtig, dass man mit "Distance to Border" die Anzahl der Mähbahnen einstellt, die er erst einmal außenrum mähen würde und anschließend als Abstand zum Rand beim Wenden beim Bahnenmähen einhalten würde?
Genau
2. Was wird anders gemacht, wenn man "Mow Cut Edge" Yes oder No wählt?
Dann würde der Roboter den Abstand einhalten ohne die äußeren Linien zu mähen

Aber verzweifle nicht dran, die werden aus dem Frontend bis zur Berechnung nicht durchgeroutet. Noch nicht eingebaut
Bis ich einen Neustart von CaSSAndRA benötige. Es startet nicht durch.
was machst du genau, ich habe noch nicht verstanden, was du genau machen willst
 
Ja, es ist Shapely 1.8.4.

Was ich machen will? Ganz einfach: Nur den Pi herunterfahren und ausschalten und dann irgendwann mal wieder einschalten.

Problem ist halt nur, dass CaSSAndRA nicht wieder hoch kommt, wenn ich einmal meinen Perimeter importiert und ausgewählt habe.

Passiert ist es zwar als ich mow angle auf 134 und distance to border auf 2 geändert und dann den Neustart per App ausgelöst habe. Es ist aber unabhängig davon, ob ich mow abgle auf 134 oder 0 habe und auch davon ob ich distance to boarder auf 1 lasse oder 2 wähle. Der Start ist davon abhängig, ob die importierte perimeter.json vorhanden ist oder ob ich diese lösche.
 
Ich habe leider jetzt keinen Zugang zu meiner Entwicklungsumgebung, aber auf dem Papier scheint es so dass ich den fehler gefunden habe. Und zwar bin ich der Meinung, dass ich ihn schon längst korrigiert habe, aber anscheinend war das in irgendeinem Nebenzweig den ich schon längst gelöscht habe.

Jedenfalls durch deine Beobachtung hast du zwei Fehler entdekt, einmal in der Berechnung und einmal in der logischen Abfolge. Gegen logischen Fehler kann ich jetzt nichts unternehmen, aber den Berechnungsfehler solltest du beheben können in dem du in:
/src/backend/map/map.py
Die Zeilen 52 und 53 durch die hier ersetzst:
Code:
mask_coordsx.append(((bounds[0], bounds[1]-10),(bounds[0], bounds[3]+10)))
mask_coordsy.append(((bounds[0]-10, bounds[1]),(bounds[2]+10, bounds[1])))
sowie die Zeilen 59 und 60 durch die hier ersetzst:
Code:
mask_coordsx.append(((offsx, bounds[1]-10),(offsx, bounds[3]+10)))
mask_coordsy.append(((bounds[0]-10, offsy),(bounds[2]+10, offsy)))

Alles ungetestet und auf dem Papier :)

P.S.: Deine Beobachtungen sind sehr wertvoll! Das macht den Code besser. Vielen Dank
 
Hallo zusammen,

die Installation von CaSSAndRA wird schon zur Herausforderung, wenn man sich mit der Python-Umgebung nicht auskennt.
Ausgangsbasis ist bei mir ein Raspberry Pi Zero 2 W mit einem frisch installierten Raspbian Bullseye.

Code:
pip install -r /home/ardumower/CaSSAndRA/requirements.txt

... scheitert im ersten Lauf:

Code:
Collecting pandas==2.0.1
  Downloading pandas-2.0.1.tar.gz (5.3 MB)
     |████████████████████████████████| 5.3 MB 1.6 MB/s
  Installing build dependencies ... done
  Getting requirements to build wheel ... error
  ERROR: Command errored out with exit status 1:
   command: /usr/bin/python3 /tmp/tmpwer13amc_in_process.py get_requires_for_build_wheel /tmp/tmp4ncd6enp
       cwd: /tmp/pip-install-k9v_ulfi/pandas_d695f9094fe84122baf2079bceba82ab
  Complete output (53 lines):
  Traceback (most recent call last):
    File "/tmp/pip-build-env-1q7dn5om/overlay/lib/python3.9/site-packages/numpy/core/__init__.py", line 22, in <module>
      from . import multiarray
    File "/tmp/pip-build-env-1q7dn5om/overlay/lib/python3.9/site-packages/numpy/core/multiarray.py", line 12, in <module>
      from . import overrides
    File "/tmp/pip-build-env-1q7dn5om/overlay/lib/python3.9/site-packages/numpy/core/overrides.py", line 7, in <module>
      from numpy.core._multiarray_umath import (
  ImportError: libcblas.so.3: cannot open shared object file: No such file or directory
 
  During handling of the above exception, another exception occurred:
 
  Traceback (most recent call last):
    File "/tmp/tmpwer13amc_in_process.py", line 280, in <module>
      main()
    File "/tmp/tmpwer13amc_in_process.py", line 263, in main
      json_out['return_val'] = hook(**hook_input['kwargs'])
    File "/tmp/tmpwer13amc_in_process.py", line 114, in get_requires_for_build_wheel
      return hook(config_settings)
    File "/tmp/pip-build-env-1q7dn5om/overlay/lib/python3.9/site-packages/setuptools/build_meta.py", line 341, in get_requires_for_build_wheel
      return self._get_build_requires(config_settings, requirements=['wheel'])
    File "/tmp/pip-build-env-1q7dn5om/overlay/lib/python3.9/site-packages/setuptools/build_meta.py", line 323, in _get_build_requires
      self.run_setup()
    File "/tmp/pip-build-env-1q7dn5om/overlay/lib/python3.9/site-packages/setuptools/build_meta.py", line 487, in run_setup
      super(_BuildMetaLegacyBackend,
    File "/tmp/pip-build-env-1q7dn5om/overlay/lib/python3.9/site-packages/setuptools/build_meta.py", line 338, in run_setup
      exec(code, locals())
    File "<string>", line 18, in <module>
    File "/tmp/pip-build-env-1q7dn5om/overlay/lib/python3.9/site-packages/numpy/__init__.py", line 140, in <module>
      from . import core
    File "/tmp/pip-build-env-1q7dn5om/overlay/lib/python3.9/site-packages/numpy/core/__init__.py", line 48, in <module>
      raise ImportError(msg)
  ImportError:
 
  IMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE!
 
  Importing the numpy C-extensions failed. This error can happen for
  many reasons, often due to issues with your setup or how NumPy was
  installed.
 
  We have compiled some common reasons and troubleshooting tips at:
 
      https://numpy.org/devdocs/user/troubleshooting-importerror.html
 
  Please note and check the following:
 
    * The Python version is: Python3.9 from "/usr/bin/python3"
    * The NumPy version is: "1.19.3"
 
  and make sure that they are the versions you expect.
  Please carefully study the documentation linked above for further help.

Dieses Problem konnte ich scheinbar über die in der Fehlermeldung erwähnten Webseite lösen in dem ich ...

Code:
sudo apt-get install libatlas-base-dev

... ausführe.

Das führt mindestens dazu, dass ich weiter komme bis zum nächsten Fehler:

Code:
Collecting zipp>=0.5
  Downloading https://www.piwheels.org/simple/zipp/zipp-3.15.0-py3-none-any.whl (6.8 kB)
Building wheels for collected packages: numpy, pandas
  Building wheel for numpy (PEP 517) ... error
  ERROR: Command errored out with exit status 1:
   command: /usr/bin/python3 /tmp/tmpana2bvu5_in_process.py build_wheel /tmp/tmp2jqengla
       cwd: /tmp/pip-install-4kqicjda/numpy_c256213c578448b4b5ec42ed5b1e0cbd
  Complete output (1094 lines):
  Running from numpy source directory.
  setup.py:67: DeprecationWarning:
 
    `numpy.distutils` is deprecated since NumPy 1.23.0, as a result
    of the deprecation of `distutils` itself. It will be removed for
    Python >= 3.12. For older Python versions it will remain present.
    It is recommended to use `setuptools < 60.0` for those Python versions.
    For more details, see:
      https://numpy.org/devdocs/reference/distutils_status_migration.html
 
 
    import numpy.distutils.command.sdist
  Processing numpy/random/_bounded_integers.pxd.in
  Processing numpy/random/_bounded_integers.pyx.in
  Processing numpy/random/_sfc64.pyx
  Processing numpy/random/_generator.pyx

.
.
.

  INFO: arm-linux-gnueabihf-gcc: numpy/core/src/common/ufunc_override.c


  INFO: arm-linux-gnueabihf-gcc: numpy/core/src/common/numpyos.c


  INFO: arm-linux-gnueabihf-gcc: numpy/core/src/common/npy_cpu_features.c


  INFO: arm-linux-gnueabihf-gcc: numpy/core/src/common/cblasfuncs.c


  INFO: arm-linux-gnueabihf-gcc: numpy/core/src/common/python_xerbla.c


  error: Command "arm-linux-gnueabihf-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -ffile-prefix-map=/python3.9-3.9.2=. -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -ffile-prefix-map=/python3.9-3.9.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -DNPY_INTERNAL_BUILD=1 -DHAVE_NPY_CONFIG_H=1 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1 -D_LARGEFILE64_SOURCE=1 -DHAVE_CBLAS -DNO_ATLAS_INFO=-1 -Ibuild/src.linux-armv7l-3.9/numpy/core/src/multiarray -Ibuild/src.linux-armv7l-3.9/numpy/core/src/common -Ibuild/src.linux-armv7l-3.9/numpy/core/src/umath -Inumpy/core/include -Ibuild/src.linux-armv7l-3.9/numpy/core/include/numpy -Ibuild/src.linux-armv7l-3.9/numpy/distutils/include -Ibuild/src.linux-armv7l-3.9/numpy/core/src/npysort -Inumpy/core/src/common -Inumpy/core/src -Inumpy/core -Inumpy/core/src/npymath -Inumpy/core/src/multiarray -Inumpy/core/src/umath -Inumpy/core/src/npysort -Inumpy/core/src/_simd -I/usr/include/python3.9 -Ibuild/src.linux-armv7l-3.9/numpy/core/src/common -Ibuild/src.linux-armv7l-3.9/numpy/core/src/npymath -c build/src.linux-armv7l-3.9/numpy/core/src/multiarray/lowlevel_strided_loops.c -o build/temp.linux-armv7l-3.9/build/src.linux-armv7l-3.9/numpy/core/src/multiarray/lowlevel_strided_loops.o -MMD -MF build/temp.linux-armv7l-3.9/build/src.linux-armv7l-3.9/numpy/core/src/multiarray/lowlevel_strided_loops.o.d" failed with exit status 1


  INFO:


  ########### EXT COMPILER OPTIMIZATION ###########


  INFO: Platform      :


    Architecture: unsupported


    Compiler    : gcc

Ich hätte mindestens gedacht, dass ein frisches Raspbian die Grundvoraussetzungen für eine erfolgreiche Installation bietet.
Vielleicht gibt es noch weitere Abhängigkeiten die innerhalb der requirements.txt beschrieben werden müssen?

Hat jemand eine Erklärung dafür? Lief die Installation reibungslos, bei denen die es zum Laufen bekommen haben?

Viele Grüße
Oliver
 
Ich muss zugeben, dass der Raspian bei der Installation auch bei mir die meisten Probleme bereitet hat.
„Don‘t judge Linux on Pi“

Ich habe leider keinen Pi rumliegen zum ausprobieren ohne die Produktivumgebung kaputt zu machen.

Versuche doch den NumPy manuell zu installieren
pip uninstall numpy
apt install python3-numpy
 
Check mal mit
Code:
python3 -V
und
Code:
pip3 -V
ob alles auf Python3.9 ist.
Führe auf jeden Fall mal
Code:
sudo apt update && sudo apt upgrade
aus.
Und dann ein pip3-Update mit
Code:
pip3 install --upgrade pip
Ich habe noch relativ frisch das aktuelle PI OS 64-Bit (Bullseye) inklusiv Desktop auf den Raspberry PI 3 Model B aufgespielt. Beim ersten Start im Desktop-Mode teilte mir PI OS gleich mit, dass Updates anstehen, die ich mal alle hatte durchlaufen lassen.
Danach hatte ich bisher nur VNC installiert und mal alles zur optischen NeuralNetwork Rasenerkennung installiert.
In diesem Zustand lief die Installation der Libraries bei mir problemlos durch.
 
Ich habe noch einmal nachgesehen. Folgendes ist durch die Objekterkennung bei mir mehr drauf:
  1. Update the Python3-Package-Installer (PIP):
    pip3 install --upgrade pip
  2. Install Python OpenCV library:
    pip3 --no-cache-dir install opencv-python
  3. Install Tensorflow Lite:
    python3 -m pip install tflite-runtime
Ich kann mir aber nur vorstellen, dass Punkt 1 etwas ausgemacht haben könnte.

Hast Du denn den Pi über den Raspberry Pi Imager installiert? Hast Du die Full oder Lite Variante installiert? Vielleicht fehlen in der Lite-Variante wesentliche Bestandteile?
 
Oben