Das Buch
Wenn euch noch etwas auffällt das jetzt nicht mehr fuktioniert dann meldet euch bitte damit ich das Problem und hoffentlich dann auch zeitnahe die Lösung hier für alle veröffentlichen kann.
2. Auflage 2019 |
1. Auflage 2016 |
Der Hintergrund zu diesem Update
Mit der Weiterenticklung des Betriebssystems Raspbian OS und auch der Weiterentwicklung von Bibliotheken wie der libcamera Bibliothek für die Kamera haben sich diese Änderungen ergeben. Ich habe die Anpassungen und Lösungen hier so gut wie möglich beschrieben und auch immer die Seitenzahl für jede Anpassungen hier angegeben.
Die Raspbian Version die genutzt wurde um diese Anpassungen zu beschreiben ist die Version 12 BOOKWORM.
PRETTY_NAME=”Debian GNU/Linux 12 (bookworm)”
NAME=”Debian GNU/Linux”
VERSION_ID=”12″
VERSION=”12 (bookworm)”
VERSION_CODENAME=bookworm
ID=debian
Hinweis: Ein Leser hat die Erfahrungen gemacht, dass es zu Problemem kam wenn er Pi-Imager verwendet hat um seine micro SD-Karte zu erstellen. Dann konnte er die
libjpeg9-dev
Bibliothek nicht installieren. Daher verwendet bitte Win32 Disk Imager für das schreiben des Images auf die mirco SD-Karte wie ich dies in beiden Büchern beschrieben habe.
Mit dem folgenden Befehl könnt ihr die Version von eurer Installation abfragen.
Befehl: cat /etc/os-release
Da es die Nachfrage gab nach dem Download Link für das von mir verwendete Image möchte ich diesen hier ergänzen.
Vorbereitung der Installation
Bevor es jetzt los geht aktualisiert wie im Buch beschrieben eure installation zunächst einmal. Dazu führt ihr die folgenden Befehle aus.
Befehl: sudo apt-get update -y
Befehl: sudo apt-get upgrade -y
Installationsanleitung als Video
Hier gibt es das passende Video das euch hilft die Software auf eurem Roboter-Auto zu installieren.
Änderung 1 – Python 3
Wichtig ist, dass jetzt statt Python 2,7 die Python Version 3.x zum Einsatz kommen muss. Der Hintergrund hier ist z. B. die Bibliothek readchar mit der die Tastatureingaben eingelesen werden. Das hat zur Folge das die Beispielprogramme ebenfalls aktualisiert werden mussten. Diese stehen ab jetzt hier in der aktualisierten Fassung zum Download bereit:
Hinweis: Aufgrund eines Problems mit dem live Stream in dem Web-Programm für die Steuerung des Roboter-Autos ist die Veröffentlichung noch nicht erfolgt (Dezember 2023).
Änderung 2 – readchar installieren
Buch 2016: Seite 128
Buch 2019: Seite 133
Die readchar Bibliothek steht nur noch für Python 3 zur Verfügung und daher muss diese auch für Python 3 installiert werden. Damit das auch sicher gelingt muss PIP
für Python 3 installiert sein. Bei den aktuellen Raspbian Versionen ist das bereits gegeben. Dennoch kann es nicht schaden den notwendigen Befehl dafür hier aufzuführen. Wenn PIP
für Python 3 schon vorhanden ist kann man auch nichts kaputt machen wenn man den Befehl trotzdem ausführt. Dann wird halt einfach nichts installiert.
Pip für Python3 isntallieren
Befehl: sudo apt-get install python3-pip
readchar für Python3 isntallieren
Jetzt nach dem PIP für Python 3 installiert ist kann readchar
für Python3 installieren werden. Denn readchar benötigen wir später um die Tastatureingaben für die Steuerung des Roboter-Autos einlesen zu können.
Befehl: python3 -m pip install --break-system-packages readchar
Änderung 3 – Kamera Bild anzeigen
Buch 2016: Seite 161
Buch 2019: Seite 161
Wenn ihr jetzt die Kamera soweit angeschlossen habt und Bookworm auf dem aktuellen Stand ist dann haben Stand Januar 2024 die folgenden Befehle bei mir funktioniert um ein erstes Bild bzw. Video-Stream der Kamera anzeigen zu lassen. Allerdings steht hier in der Dokumentation bereits das diese Befehle sich von ihren Namen her also dem Aufruf ändern werden.
Dokumentation: https://www.raspberrypi.com/documentation/computers/camera_software.html
Der folgende Befehl zeigt ein erstes Bild der Kamera.
Befehl: libcamera-hello
Dieser Befehl speichert ein Bild in das aktuelle Verzeichnis ab in dem ich euch im Terminalfenster aktuell befindet.
Befehl: libcamera-jpeg -o image.jpg
Dieser Befehl speichert ein 15 Sekunden langes Video in das aktuelle Verzeichnis ab in dem ich euch im Terminalfenster aktuell befindet.
Befehl:
libcamera-vid -t 15000 -o video.h264
Änderung 4 – MJPG-Streamer
Buch 2016: Seite 129
Buch 2019: Seite 134
Bei der Installation und der Konfiguration des mjpg-streamers hat sich eine Änderung ergeben die notwendig wurde nach dem sich die Kameraunterstützung unter Raspian OS geändert hat. Der nachfolgende Abschnitt erklärt wie der mjpg-streamer installiert wird.
Der Video-Streaming-Server mjpg-streamer übernimmt die Aufgabe, das Video aus dem Roboter-Auto über das WLAN zu übertragen. Damit das funktioniert, müssen Sie einige Bibliotheken installieren und konfigurieren. Diese zusätzlichen Bibliotheken unterstützen den Video-Streaming-Server dabei, die Bildinformationen so aufzubereiten, dass sich diese als Live-Stream übertragen lassen.
Die libjpeg9-dev-Bibliothek installieren
Die libjpeg9-dev
-Bibliothek ist eine frei erhältliche Software der Independent JPEG Group . Im Wesentlichen stellt diese Bibliothek einen JPEG-Codec zur Verfügung, mit dem Bilder in einer unterschiedlich starken Komprimierung erzeugt werden. Dieses Paket ist eine weitere Voraussetzung dafür, dass später der mjpg-streamer das Video ohne Ruckeln über das WLAN des Roboter-Autos übertragen kann. Sie installieren die Bibliothek folgendermaßen:
Befehl: sudo apt-get install libjpeg9-dev
Zusätzliche Bibliotheken installieren
Bevor der mjpg-streamer kompiliert und installiert werden kann, müssen Sie kleinere Vorbereitungen treffen, die ich nachfolgend erklären werde. Dazu gehören die Installation des plattformunabhängigen Programmierwerkzeuges CMake
und das Entpacken des zuvor heruntergeladenen Zip-Archivs. CMake erzeugt die notwendigen Skriptdateien, damit Sie den mjpg-streamer
kompilieren können. Mit dem folgenden Befehl installieren Sie CMake auf Ihrem Raspberry Pi:
Befehl: sudo apt-get install cmake
Damit der mjpg-streamer
kompiliert warden kann warden noch die GNU Kompiler Kollektion gcc benötigt. Zusätzlich wird noch der GNU C++ Kompiler ( g++ )benötigt um die notwendigen in C geschriebenen Programme kompellieren zu können.
Befehl: sudo apt-get install gcc g++
Da für das Streaming über die libcamera Bibliothek zugegriffen wird muss diese noch als Entwicklerversion installiert werden. Diese ist initial nicht installiert. Dazu bitte den folgenden Befehl ausführen.
Befehl: sudo apt-get install libcamera-dev
Den mjpg-streamer herunterladen
Da die Version des mjpg-streamers, die wir für das Roboter Auto verwenden werden vom Autor leicht angepasst wurde um die Installation so einfach wie möglich zu machen, muss noch eine ZIP-Datei von der Webseite des Autors herunter geladen werden. Das Programm mjpg-streamer soll später in den Ordner mjpg-streamer-rapi-libcamera unter dem Pfad /opt installiert werden. Dazu müssen Sie in den Ordner /opt im Terminal-Fenster wechseln.
Befehl: cd /opt
Nach dem Sie in den Ordner /opt
gewechselt sind führen Sie den folgenden Befehl im Ordner /opt
aus um die mjpg-streamer-rapi-libcamera.zip
ZIP-Datei herunter zu laden.
Befehl: sudo wget https://custom-build-robots.com/mjpg-streamer-rapi-libcamera.zip
Mit dem folgenden Befehl entpacken Sie die mjpg-streamer-bullseye.zip
Datei die im Ordner /opt
herunter geladen wurde.
Befehl: sudo unzip mjpg-streamer-rapi-libcamera.zip
Jetzt sind alle Vorraussetzung geschaffen das es losgehen kann mit der Installation des mjpg-streamers-rapi-libcamera
.
Den mjpg-streamer installieren
Wechseln Sie jetzt in den mjpg-streamer
Ordner /opt/mjpg-streamer-rapi-libcamera/mjpg-streamer-experimental
mit dem folgenden Befehl.
Befehl: cd /opt/mjpg-streamer-rapi-libcamera/mjpg-streamer-experimental
Anschließend führen sie den make-Befehl aus um die Installation der Software vorzubereiten.
Befehl: sudo make
Nachdem Sie mit dem make-
Befehl die notwendigen Installationsskripte erstellt haben, installieren Sie mit dem folgenden Befehl den mjpg-streamer
auf Ihrem Raspberry Pi für das libcamera Kameramodul:
Befehl: sudo make install
Die Installation dauert ein paar Minuten und es erscheinen einige Zeilen im Terminalfenster.
Video Live-Stream starten
Jetzt ist alles installiert und soweit konfigurtiert. Möchten Sie den mjpg-streamer
jetzt starten dann klappt das mit dem folgenden Befehl. Diesen führen Sie im Terminal-Fenster im ordner des mjpg.streamers aus.
Befehl: sh start.sh
Jetzt öffnen Sie einen Browser und öffnen die folgenden URL. Bitte tragen sie die IP Adresse ein über die ihr Raspberry Pi im eigenen Netzwerk erreichbar ist.
Befehl: http://<IP-Adresse>:8080/stream.html
Hier ein Beispiel wie bei mir der Aufruf mit eingesetzter IP Adresse aussieht.
Befehl: http://<IP-Adresse>:8080/stream.html
Änderung 5 – Flask Web-Framework installieren
Buch 2016: (In dieser Auflage wurde Flask nicht verwendet)
Buch 2019: Seite 134
Der Befehl für die Installation von Flask hat sich leicht verändert. Bei der Raspbian OS Version Bookworm aus Dezember 2023 ist Flask bereits installiert und muss daher nicht mehr extra installiert werden. Der Befehl um Flask dennoch zu installieren lautet wie folgt:
Befehl: sudo apt-get install python3-flask
Änderung 6 – Das Start-Skript für den mjpg-streamer
Buch 2016: Seite 178
Buch 2019: Seite 188
Das Start-Skript das den mjpg-streamer automatisch startet hat sich ebenfalls geändert mit der Einführung von libcamera. Daher verwendet jetzt bitte das Start-Skript aus der folgenden ZIP-Datei mjpg-streamer.zip.
Download: mjpg-streamer.zip
Hinweis: Achtet bitte darauf, dass der Pfad zum mjpg-streamer richtig gesetzt ist. Dieser kommt an zwei Stellen vor und lautet hier wie folgt /opt/mjpg-streamer-rapi-libcamera/mjpg-streamer-experimental/
. Dann kommt noch ein weiterer Pfad vor der ebenfalls 2x vorkommt in dem eine Log-Datei geschrieben wird, die die Ausgaben speichert die der mjpg-streamer erzeugt wenn er gestartet wird. Hier ist mein user mit dem Namen robot
hinterlegt. Die Zeile sieht wie folgt aus /home/robot/mjpg-streamer.log
und statt robot
müsst ihr euren User-Namen dort im Pfad hinterlegen.
Hinweis weitere Updates:
Wenn ihr Probleme feststellt bzw. ich weitere Anpassungen erkenne die notwendig sind dann werde ich diese hier veröffentlichen.
Zu readchar: der pip-Befehl brachte bei mir eine längere Fehlermeldung:
error: externally-managed-environment
× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
python3-xyz, where xyz is the package you are trying to
install.
etc….
(Raspi 3, Bookworm)
Ich habe daraufhin von der Seite https://pypi.org/project/readchar/ den Sourcecode heruntergeladen und über den dort enthaltenen setup.py installiert.
Hallo Peter,
vielen Dank für Deinen Hinweis.
Ich habe den Installationsbefehl angepasst und dieser sieht jetzt wie folgt aus:
Befehl:
python3 -m pip install --break-system-packages readchar
Viele Grüße,
Maker
Webinterface:
Folgende Fehlermeldung beim Start:
root@PBU-RAS-13:/home/robot# python RobotControlWeb.py
Traceback (most recent call last):
File “/home/robot/RobotControlWeb.py”, line 22, in
import webiopi
File “/usr/local/lib/python3.11/dist-packages/WebIOPi-0.7.1-py3.11-linux-aarch64.egg/webiopi/__init__.py”, line 20, in
from webiopi.utils.thread import runLoop
File “/usr/local/lib/python3.11/dist-packages/WebIOPi-0.7.1-py3.11-linux-aarch64.egg/webiopi/utils/thread.py”, line 36
def runLoop(func=None, async=False):
^^^^^
Letztere Zeile kommt schon bei der Installation des Webinterfaces.
Ferner folgende Warnungen bei der Installation:
Found Python 3.11.2…
Trying to install python-dev using apt-get
Paketlisten werden gelesen… Fertig
Abhängigkeitsbaum wird aufgebaut… Fertig
Statusinformationen werden eingelesen… Fertig
Paket python-setuptools ist nicht verfügbar, wird aber von einem anderen Paket
referenziert. Das kann heißen, dass das Paket fehlt, dass es abgelöst
wurde oder nur aus einer anderen Quelle verfügbar ist.
Paket python-dev ist nicht verfügbar, wird aber von einem anderen Paket
referenziert. Das kann heißen, dass das Paket fehlt, dass es abgelöst
wurde oder nur aus einer anderen Quelle verfügbar ist.
Doch die folgenden Pakete ersetzen es:
python-dev-is-python3
E: Für Paket »python-dev« existiert kein Installationskandidat.
E: Für Paket »python-setuptools« existiert kein Installationskandidat.
Ich habe Raspi 3 mit Bookworm, Python 3.11.2
Muss man eventuell sources.list ergänzen?
Hallo Peter,
vielen Dank für den Hinweis. Den Fehler hatte ich selber noch nicht und versuche herauszufinden wie eine Lösung aussehen könnte.
Viele Grüße,
Maker
Hatte mir das 2016er Buch ausgeliehen aus der Bücherei zum Ausprobieren. Habe mir inzwischen das 2019er Buch beschafft. In den neuen Programmen kommt dieser Importbefehl nicht mehr vor. Das Webinterface funktioniert also. Allerdings scheint es mit Bookworm noch andere Probleme zu geben. Die Kamera funktioniert zwar tadellos mit der mjpg-streamer Demoseite. In Kombination mit dem Webinterface erscheint das Video allerdings bildschirmfüllend. Auch gibt es bei Bookworm anscheinend die Befehle raspistill und raspivid nicht mehr (S. 161). Details später.
Noch im Nachgang zu vorher:
das funktioniert überhaupt nicht (Buch S. 164)
./mjpg_streamer -i “./input_uvc.so -d /dev/video0 -r 800×640 -f 25” -o “./output_http.so -w ./www”
Es kommt schon beim Start eine längliche Meldung:
root@PBU-RAS-13:/opt/mjpg-streamer# sh start.sh
MJPG Streamer Version.: 2.0
i: Using V4L2 device.: /dev/video0
i: Desired Resolution: 800 x 640
i: Frames Per Second.: 25
i: Format…………: JPEG
i: TV-Norm………..: DEFAULT
i: Could not obtain the requested pixelformat: MJPG , driver gave us: YUYV
… will try to handle this by checking against supported formats.
… Falling back to YUV mode (consider using -yuv option). Note that this requires much more CPU power
Unable to query that the FPS change is supported
: Inappropriate ioctl for device
UVCIOC_CTRL_ADD – Error at Pan (relative): Inappropriate ioctl for device (25)
UVCIOC_CTRL_ADD – Error at Tilt (relative): Inappropriate ioctl for device (25)
UVCIOC_CTRL_ADD – Error at Pan Reset: Inappropriate ioctl for device (25)
UVCIOC_CTRL_ADD – Error at Tilt Reset: Inappropriate ioctl for device (25) …..etc
Das funktioniert statt dessen:
./mjpg_streamer -i “input_libcamera.so -r 320×240 -f 25” -o “./output_http.so -w ./www”
Allerdings füllt dann im Webinterface das Video den ganzen Bildschirm aus. In der Demoseite ist das Bild korrekt.
Ich habe es leider nicht geschafft im Webinterface die Größe des Videos anzupassen.
Sobald ich das Webinterface starte bringt der mjpg-streamer periodisch folgende Meldungen:
[2:23:02.034162060] [3493] INFO Camera camera.cpp:1183 configuring streams: (0) 2592×1944-BGR888
[2:23:02.035514926] [3490] INFO RPI vc4.cpp:608 Sensor: /base/soc/i2c0mux/i2c@1/ov5647@36 – Selected sensor format: 2592×1944-SGBRG10_1X10 – Selected unicam format: 2592×1944-pGAA
Configuring still capture…
Stream configuration adjusted
Still capture setup complete
[2:23:02.612591924] [3493] INFO Camera camera.cpp:1183 configuring streams: (0) 320×240-BGR888
[2:23:02.614548229] [3490] INFO RPI vc4.cpp:608 Sensor: /base/soc/i2c0mux/i2c@1/ov5647@36 – Selected sensor format: 640×480-SGBRG10_1X10 – Selected unicam format: 640×480-pGAA
d.h. irgendetwas setzt meine Videogröße auf 2592×1944 und das kommt nur wenn das Webinterface läuft.
Für Hilfe wäre ich dankbar.
Hallo Peter,
ich habe diesen Beitrag geschreiben da sich seit 2019 das Betriebssystem Raspbian OS weiter entwickelt hat und sich im Bereich der Kamera einiges geändert hat bzw. immer noch ändert.
Daher funktioniert der Aufruf
./mjpg_streamer -i “./input_uvc.so -d /dev/video0 -r 800×640 -f 25” -o “./output_http.so -w ./www
” leider nicht mehr. Aktuell funktioniert libcamera zusammen mit dem mjpg-streamer so wie Du es hier im Kommentar geschrieben hast.Mehr zur Unterstützung der Kamera steht auf der Seite die Du über den folgenden Link aufrufen kannst. Wobei diese offizielle Dokumentation meiner Erfahrung nach auch schon wieder veraltet ist bzw. zum neuesten Raspbian OS Bookworm aus Dezember 2023 nicht passt. Die hier beschreibenen Befehle wurden z. B. bei mir unter Bookworm gar nicht erst gefunden!
https://www.raspberrypi.com/documentation/computers/camera_software.html
Es ist wohl auch so, dass die Entwicklung des Betriebssystems, der Softwaremodule sowie der Hardware nicht immer zu einem Stichtag einen Stand haben das alles zusammen funktioniert.
So habe ich schon zum neuesten Raspberry Pi 5 gelesen das die Kamera mit der Bibliothek libcamera Probleme macht. So ist es natürlich schon immer schwer gewesen alles stabil für viele Jahre zu beschreiben. Daher habe ich selber noch gar keinen Raspberry Pi 5 und warte hier erst einmal etwas ab.
Das wohl aktuell der Parameter für die Auflösung bei der libcamera Bibliothek nicht funktioniert könnte daran liegen das dieser Parameter gar nicht mehr übergeben werden kann. Das werde ich mir einmal anschauen und hoffe eine Lösung zu finden. Denn ein max Auflösung als Bild anzuzeigen ist keine gute Lösung auch nicht von der Übertragungszeit her betrachtet. Oft braucht man bei einem live Bild die maximale Auflösung ja gar nicht.
Ich werde noch die Befehle die bei mir aktuell unter Bookworm zum Anzeigen eines ersten Bildes etc. funktioniert haben in der Anleitung hier ergänzen.
Viele Grüße,
Maker
Hallo Maker,
bin wieder etwas weitergekommen. Ausgehend von der Erkenntnis, dass Du eigentlich kein Video erzeugst, sondern eine Folge von jpg-Einzelbildern, ergibt sich aus der Hilfe für input_libcamera.so, dass für die Auflösung nicht der Parameter r zu verwenden ist, sondern s.
Die Zeile muss also lauten:
./mjpg_streamer -i “input_libcamera.so -s 640×480 -f 25” -o “./output_http.so -w ./www”.
Damit wird auch das Webinterface korrekt angezeigt. Allerdings habe ich die Erfahrung gemacht, dass sich bei der angegebenen Framerate von 25 der Streamer sich nach kurzer Zeit verabschiedet mit Segmentation fault. Ich nehme an, dass mein Raspberry 3 damit überlastet ist. Ich habe daher auf 5 reduziert.
Zu bemerken wäre noch, dass der Streamer weiterhin periodische Meldungen produziert, sobald man mit der Auflösung von der Kameraaufösung abweicht (in diesem Fall SainSmart 5MP).
Grüße
Hallo Peter,
ich habe heute Morgen mit dem Aufruf in der start.sh das ein oder andere ausprobiert. Mit dem folgenen Aufruf hat es mir sehr gut funktioniert. Es sind dann auch nicht mehr die Meldung durch das Terminal-Fenster gelaufen.
./mjpg_streamer -i "input_libcamera.so -r 640x480 -f 25 -b 4 -s 640x480" -o "./output_http.so -w ./www"
Hier einmal ein Auszug der möglichen Parameter die verwendet werden können:
Hallo Peter,
ich habe es jetzt ausprobiert ob das Web-Interface wieder funktioniert. Mit dem Aufruf
./mjpg_streamer -i "input_libcamera.so -r 640x480 -f 25 -b 4 -s 640x480" -o "./output_http.so -w ./www"
in der start-sh Datei wird das Bild der Kamera im Web-Interface auch wieder ordentlich klein angezeigt. Somit ist dieses Problem jetzt meiner erfahrung nach auch behoben. Ich würde mich freuen wenn Du dazu kurz Feedback geben könntest.Viele Grüße,
Maker
Hallo Maker,
Webinterface funktioniert jetzt gut. Ich habe in den letzten Tagen erst die Mechanik zusammengebaut. Bisher war es eher noch Trockenübung. Ich bin jetzt durch mit Teil 1.
Habe die Erfahrung gemacht, dass die gelben Motoren aus dem New 4WD Robot Smart Car Kits ein hohes Losbrechmoment haben, so dass sie sich sehr schwer manövrieren lassen. Das Gerät startet z.T. erst bei 0,35 und schießt dann richtig gehend los. Ist ja kein Wunder bei dem Preis. Ich habe den Motoren eine Kennlinie verpasst, d.h. sobald ich mit der Geschwindigkeit über 0 (oder unter 0) bin, bekommen die schon 0,2 und dann ansteigend bis 1 (Gerade y=0,2+0,8x). Es ist etwas besser aber optimal ist das nicht. Gibt es Alternativen?
Ausgehend von der Annahme, dass ich das Ding auch mal im Freien fahren will, speziell wenn das GPS montiert ist, habe ich den Raspberry mit Routerfunktion versehen, so dass ich das Roboterauto ohne extra WLAN steuern kann, siehe https://www.elektronik-kompendium.de/sites/raspberry-pi/2002171.htm. Das hat den Vorteil, dass ich das Gerät überall mit der gleichen Adresse 192.168.1.1:8181 ansprechen kann. Funktioniert ganz gut mit dem Laptop oder PC. Allerdings zeigt mein Androidtablett nicht das Bild vom MJPG-Streamer. Habe noch nicht herausgefunden, an was das liegt. Sind wohl die Spinnereien von Android.
Hallo Peter,
das freut mich sehr das bei Dir jetzt das Web-Interface auch wieder richtig funktioniert. Ich bin ja schon länger am Überlegen es einmal komplett neu zu entwickeln. Mal sehen ob ich dazu die Zeit finden werde. Aber wenn es jetzt wieder gut funktioniert reicht es wohl um den Einsteig zu finden erst einmal.
Vielen Dank für Dein Feedback hier und viele Grüße,
Maker
Hallo Maker,
mein Auto läuft jetzt doch perfekt. Folgendes: Wie erwähnt habe ich eine Kennlinie eingeführt:
Code:
def kennlinie(speed):
# Anfangswert der Geschwindigkeit
vanf=0.24
# Hier wird die Geschwindigkeit umgerechnet. Es wird berücksichtigt,
# dass die Motoren erst bei einem Schwellenwert anfangen zu drehen.
# Positiver Wert von speed.
if speed > 0.03:
steps=(1-vanf)*speed+vanf
#print(“Geschwindigkeit: “,speed)
#print(“Steps: “, steps)
return(steps)
# Negativer Wert von Speed
elif speed < -0.03:
steps=(-1+vanf)*(-speed)-vanf
#print("Geschwindigkeit: ", speed)
#print("Steps: ", steps)
return(steps)
# Tote Zone
else:
return(0)
Aufruf (gilt entsprechend auch für alle anderen Buttons):
# Uebergabe der Geschwindigkeit an die Funktion der H-Bruecke
HBridge.setMotorLeft(kennlinie(speedleft))
HBridge.setMotorRight(kennlinie(speedright))
Außerdem habe ich die Schrittweite auf 0,05 reduziert.
Die wichtigste Maßnahme:
Ich habe die PWM-Frequenz auf 25Hz reduziert.
Der Gedanke dahinter:
Induktiver Widerstand des Motors X=2Pi * f * L. Motortstrom im Anlauf wird im wesentlichen bestimmt durch X bei den hohen Frequenzen. Je höher X, desto kleiner der Motorstrom. Beim Gleichstrommotor gilt Moment proportial Strom. Daraus folgt, je kleiner die Frequenz desto höher das Drehmoment.
Damit lässt das Auto sich auch in meinem kleinen Büro präzise fahren.
Hallo Peter,
vielen Dank für Deinen tollen Kommentar und der Idee mit der Kennlinie für eine deutlich besser Steuerung der Motoren. Das muss ich mir genauer anschauen zumal ich aktuell plane einen größeren Roboter zu bauen mit deutlich stärkeren Motoren.
Toll auch das Du gleich das Programm mitgeliefert hast so das es alle hier nutzen können.
Viele Grüße,
Maker
Hallo Maker,
nachdem ich vor einigen Wochen mit dem Thema Video angefangen habe, möchte ich noch einige Bemerkungen dazu machen.
Ich bin jetzt auf dem Raspberry 5 und bin mit dem Buch durch außer dem GPS und dem Tiltkit. Ich habe den Mjpeg-Streamer auf dem Raspberry 5 nicht zum Laufen gekriegt. Nach vielen Versuchen und Abstürzen auch mit anderer Software bin ich hier fündig geworden:
https://github.com/raspberrypi/picamera2/blob/main/examples/mjpeg_server.py
Das ist ein smarter kleiner Videostreamer. Man braucht eigentlich nur den Port anpassen und die Videogröße und das Modul wie im Kommentar angegeben zu installieren. Wichtig ist, dass man einen anderen Port festlegt wie für den Roboter. Dann kann man das Video direkt in den HTML-Code einbinden, z.B. mit einem iframe.
Codeschnipsel hierzu:
var hostadr=location.host;
var videoid=document.getElementById(“video”);
hostadr=”http://”+ hostadr;
videoid.setAttribute(“src”, hostadr + “:5000”);
Man kann die Videosource natürlich auch direkt eintragen. Dann sollte man aber nicht die IP-Adresse verwenden sondern den Hostnamen. Das Programm läuft sehr stabil, bringt aber auf dem Raspberry 5 eine CPU-Auslastung von rund 20% ständig, was für ein Einzelprogramm ganz ordentlich ist. Wenn der Raspi auf Batterie läuft kommt es bei hoher Auslastung, wenn z.B. das Webinterface läuft und ich gleichzeitig mit 2 Terminals arbeite zu Abstürzen. Dies dürfte aber am USB-Spannungswandler liegen, der m.E. für den 5er etwas zu schwach ist. Am entsprechenden Netzteil und im Normalbetrieb habe ich das nicht beobachtet.
Das ursprüngliche Script für das Video wird damit natürlich hinfällig.