== Ziel ==
Ein kleiner Robot Roboter auf Basis eines Raspberry Pi soll selbstständig Aruco codes Arucocodes finden und anfahren können.
== Konzept ==
Ein Python Script benutzt die OpenCV Library um Arucos im Bild mit Position Positionen und Entfernung zu erkennen.
Der Videostream und die Position mit Entfernung werden von dem Script zur Verfügung gestellt.
Ein Node-Red Flow Nimmt nimmt die Position auf und gibt Steurbefehle über Steuerbefehle an einen ItsyBitsy M3, der damit ein MotorShield steuert.
Angeschlossen aber nicht benutzt ist ein BNO055, der Sensordaten Liefert liefert um z.B. die Positionsbestimmung zu verbessern.
Hier eine Übersicht
[[Datei:Arucomover_konzept.jpg ]]
Hier ein Schaltplan dazu.
[[Datei:Arucomover diagram.jpg |x200px]]
Es soll aber trotzdem möglich sein, daß ein Benutzer eingreift,dafür die Mit dem Dashboard UI aus Node-Red herausist es möglich, dass der Benutzer steuern kann.
[[Datei:Arucomoverui.png |x300px]]
== setup Setup ==Aller Der Code und auch ein Setup können im aus https://github.com/hackffm/arucomover gefunden geladen werden.Es wird davon ausgegangen, daß das ganze Das Ganze läuft auf einem Debian basiertem Linux läuft.Also Ubuntu oder Raspian. Im Setup Folder gibt es Skripte, die das Allermeiste vorbereiten sollten. <br>Das in der Skript arucodetection verwendete .py verwendet Shared Memory ist ! <br>erst Erst ab Python 3.8 ist Shared Memory verfügbar. Auf einem RaspberryPi3 ist 3.7 default. Dahergibt es im Setup Folder ein entsprechendes Skript das Hilfskript setup_python3_9.sh für den Pi3. <br> Vor der Ausführungder Setups muss das Swapfile auf eine Raspberry vergrößert werden.
<code>
</code>
Ein gutes Netzteil vorrausgesetzt, läuft daß das dann einige Zeit. Die übrigen Setup
Skripte können, mit der richtigen Python Version dann ausgeführt werden.
Der Schritt 2_setup_folders.sh installiert auch alle python requierementsPython Requierements.Das kann auf eine einem PI 3 mehrere Stunden dauern, da diverse Kompilierungen im Hintergrund laufen !
== Arucodetetcion ==
ist ein Pythoncode, der von dieser Seite [[OpenCV_mit_Python]] inspiriert ist und in zwei Prozessen läuft. :Web und Arucodetecion.Damit der WebProzess Webprozess die Arcuo Position Arcuoposition über einen Websocket liefern kann, sindbeide über eine Managed Queue verbunden. Der Video Stream Videostream wird in ein Shared Memory
geschrieben und vom Webprozess geholt. Dies ist erst ab Python 3.8 möglich !
Es wird davon ausgegangen, daß ein Default für den Kameraanschluss ist "Camera Device 0 vorhanden ist". Sollte eine
Kalibrierung für eine bessere Erkennung notwendig sein, kann ein entsprechendes
Config File camera.json mit create_camera_config.py erstellt werden. Dies muss dann in den
vom Setup erstellten /USERHOME/arucodetection Folder kopiert werden.
Dort liegt auch eine config.json mit der sich die CameraKamera, Auflösung, Debug usw. einstellen läßt.Das los Log landet in ~/arucdetection/log.Es wird immer von einem Default ist DICT_6X6_50 Aruco Code ausgegangen und für den Arucocode! Dies kann zur Zeit nur in der camera.py umgestellt werden.
Um zu testen ob alles funktioniert, stellt arucodetection.py eine entsprechende Webseite zur verfügungVerfügung, die Websocket und Video Stream Videostream abfragt.
Die Webseite ist auf 127.0.0.1:9080 zu finden
== itsyBitsyM4==
die Die verwendeten libraries müssen im lib Folder vorhanden sein und eventuell nachinstalliert werden.
Z.B. adafruit_bno055. Diese müssen zur CircuitPython Version des M4 passen.
code.py ist der Ausgeführte ausgeführte Code. Der I2C Test ist in diesen eingebaut. Alle Verfügbaren Kommands verfügbaren Kommandos könnenmit ? abgefragt werden. Will man nur I2C testen, kann man auch code.py umbenennen. Dann wird automatisch main.pyaufgerufen, daß dass in einer Endlosschleife die angeschlossenen I2C Devices abfragt.
== Node-Red ==
Entweder durch die Setup Skripte oder so sollte ein Node.js 14x vorhanden sein.Wenn das Skript 2_setup_folders.sh nicht ausgeführt wurde muss selbst dafür gesorgt werden, daßdassdas Package.json File in ~/nodered/ abgelegt wurde und alle Package Depencies darin müssen installiert wurden.
node_red_start.sh startetführt Folgendes aus:
<code>
</code>
Das Settings File starte startet NodeRed auf Port 9010<br>Der Editor kann dann auf => http:;//127.0.0.1:9010 und<br>Die UI auf kann dann auf => http:;//127.0.0.1:9010/ui gefunden werden.<br>
<br>
Der Flow ist in zwei Tabs aufgeteilt.<br>