Inhaltsverzeichnis:
- Schritt 1: Raspbian installieren und eine statische IP-Adresse einrichten
- Schritt 2: Motion installieren und konfigurieren
- Schritt 3: Apache installieren und Web Control-Seite einrichten
- Schritt 4: Einrichten und Testen des Codes
- Schritt 5: Montage
- Schritt 6: Starten des Python-Codes beim Booten / Fertigstellen
Video: Browsergesteuerter Roomba-Roboter mit dem Raspberry Pi Model 3 A+ - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:19
Überblick
Dieses Instructable konzentriert sich darauf, wie man einem toten Roomba ein neues Gehirn (Raspberry Pi), Augen (Webcam) und eine Möglichkeit gibt, alles von einem Webbrowser aus zu steuern.
Es gibt viele Roomba-Hacks, die eine Steuerung über die serielle Schnittstelle ermöglichen. Ich hatte nicht das Glück, auf einen Roomba zu stoßen, der über eine aktuelle Firmware oder ein funktionierendes Motherboard verfügt. Entweder ist der Roomba zu alt oder der Roomba ist tot. Ich fand den Roomba, den ich für dieses Projekt verwendet habe, in einem lokalen Secondhand-Laden für 5 US-Dollar. Es hatte immer noch einen anständigen Akku, aber ein totes Motherboard. (Ich habe auch die Webcam im selben Secondhand-Laden für etwa 5 US-Dollar gefunden). Alles, was ich vom ursprünglichen Roomba verwende, sind die Motoren, das Chassis und der Akku. Sie müssen für dieses Projekt keinen Roomba verwenden. Sie können verschiedene Motoren, Räder und Chassis verwenden, wenn Sie möchten. Ich habe einfach Lust, ein Stück Müll in etwas Brauchbares zu verwandeln.
Für diesen Build habe ich das Raspberry Pi Model 3 A+ und einen Riorand-Motorcontroller verwendet. Ich verwende Code vom Browser-gesteuerten Roboter von Dexter Industries, den ich geändert habe. Die Dexter Industries-Version richtet den Pi als Websocket-Server ein, mit dem Sie ihren Roboter (Brick-Pi-Plattform) von einer Client-HTML-Datei aus steuern können, auf der ein anderer Computer läuft.
Ich habe den Code mit den GPIO-Pins geändert und eine Möglichkeit hinzugefügt, dass der Pi heruntergefahren wird, wenn auf eine Schaltfläche geklickt wird / wenn die Escape-Taste im Browser gedrückt wird. Ich habe auch einige Änderungen an der Steuerungswebseite vorgenommen, um die Anzeige eines Bewegungsstreams durch einen iframe zu ermöglichen, während der Roboter auf einer einzigen Seite gesteuert wird. Ich habe den Pi mit einer statischen IP eingerichtet, um die Client-Datei zu hosten, damit ich mit jedem Computer oder Gerät in meinem Netzwerk eine Verbindung herstellen kann.
Ich dokumentiere den Prozess hier in der Hoffnung, zu zeigen, wie man einen einfachen, kostengünstigen Basisroboter baut.
Verwendete Teile
Raspberry Pi 3 A+ (Adafruit Link) $30
Riorand Dual Motor Driver Controller H-Brücke (Amazon Link) $ 22
12V Batterie für Motoren (Amazon Link) $19
5V Batterie für den Raspberry Pi (Amazon Link) $10
8 GB Micro-SD-Karte (Amazon Link) $ 5
Überbrückungsdrähte (Amazon Link) $7
Roomba 500-Serie
. Alles zusammen knapp 100 Dollar.
Schritt 1: Raspbian installieren und eine statische IP-Adresse einrichten
Ich habe Raspbian Stretch Lite verwendet. Ich habe keine Notwendigkeit für den Desktop gesehen, aber Sie können die Desktop-Version installieren, wenn Sie es vorziehen.
Ich gehe davon aus, dass Sie bereits wissen, wie man Raspbian installiert. Wenn Sie Hilfe benötigen, finden Sie hier den Leitfaden der Raspberry Pi Foundation.
Sobald Raspbian läuft, melden Sie sich an und führen Sie das Programm raspi-config aus.
pi@raspberrypi:~ $ sudo raspi-config
Richten Sie Ihre WLAN-Verbindung in raspi-config ein
Auswählen
2 Netzwerkoptionen
Auswählen
N2 WLAN
Wählen Sie ein Land aus, geben Sie Ihre SSID ein und geben Sie Ihre Passphrase ein
SSH in raspi-config einrichten
Nachdem ich die anfängliche Konfiguration vorgenommen hatte, habe ich SSH verwendet, um alles kopflos einzurichten. (Sie könnten dies überspringen, wenn Sie einen Monitor verwenden. Es war für mich einfacher, Änderungen am Code vorzunehmen, ohne den Roboter anhalten und an einen Monitor anschließen zu müssen.)
Zurück zum raspi-config Hauptmenü
Auswählen
5 Schnittstellenoptionen
Auswählen
P2 SSH
Auswählen
Jawohl
Zurück im raspi-config Hauptmenü auswählen
Stellen Sie sicher, dass Sie mit Ihrem Netzwerk verbunden sind
pi@raspberrypi:~ $ ifconfig
Sie sollten eine ähnliche Ausgabe erhalten. (Notieren Sie sich die IP-Adresse; Sie benötigen sie möglicherweise später. z. B. 192.168.1.18)
wlan0: flags=4163 mtu 1500
inet 192.168.1.18 Netzmaske 255.255.255.0 Broadcast 192.168.1.255 inet6 fe80::c74f:42ec:8cd3:2fda prefixlen 64 scopeid 0x20 Ether b8:27:eb:6a:a4:95 txqueuelen 1000 (Ethernet) RX-Pakete 44396 (Bytes 5847726 5,5 MiB) RX-Fehler 0 fallengelassen 0 Überläufe 0 Frame 0 TX-Pakete 30530 Bytes 39740576 (37,8 MiB) TX-Fehler 0 fallengelassen 0 Überläufe 0 Träger 0 Kollisionen 0
Stellen Sie sicher, dass Sie das Internet erreichen können.
pi@raspberrypi:~ $ ping google.com
Sie sollten eine ähnliche Ausgabe erhalten.
PING google.com (216.58.194.110) 56(84) Datenbytes.
64 Bytes von dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq=1 ttl=54 time=18.2 ms 64 Bytes von dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq=2 ttl =54 Zeit = 19,4 ms 64 Byte von dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq=3 ttl=54 Zeit = 23,6 ms 64 Byte von dfw06s48-in-f14.1e100.net (216.58.194.110.)): icmp_seq=4 ttl=54 time=30,2 ms ^C --- google.com Ping-Statistik --- 4 Pakete übertragen, 4 empfangen, 0% Paketverlust, Zeit 3004ms rtt min/avg/max/mdev = 18.209/ 22,901/30,267/4,715 ms
Einrichten einer statischen IP
Um eine konsistente Verbindung zu Ihrem Roboter mit derselben Adresse in Ihrem Netzwerk herstellen zu können, sollten Sie eine statische IP einrichten.
Rufen Sie Ihre aktuelle Netzwerkadresse ab, z. B. 192.168.1.18
Ich verwende die Adresse, die automatisch von DHCP zugewiesen wurde, als der Pi mit meinem Netzwerk verbunden war. Sie können dies beliebig ändern, solange es mit Ihrem Netzwerk übereinstimmt und nicht mit anderen zugewiesenen Adressen in Konflikt steht.
Öffnen Sie dhcp.conf in einem Texteditor. (Ich benutze Nano)
pi@raspberrypi:~ $ sudo nano /etc/dhcpcd.conf
Scrollen Sie nach unten zu #Beispiel für statische IP-Konfiguration und ändern Sie die folgenden Zeilen.
#schnittstelle eth0
#statische IP-Adresse=192.168.11.13 #statische Router=192.168.11.1 #statische Domänenname_Server=192.168.11.1 8.8.8.8
Ändern Sie es entsprechend Ihrem Netzwerk und entfernen Sie das # am Anfang jeder Zeile.
Beispiel:
Schnittstelle wlan0
statische IP-Adresse=192.168.1.18 statische Router=192.168.1.1 statische Domänenname_Server=192.168.1.1 8.8.8.8
Speichern und schließen.
Neustart und Verbindung zum Pi über SSH
pi@raspberrypi:~ $ sudo reboot
Verbinden Sie sich von einem anderen Computer mit SSH. Windows-Benutzer können PuTTY oder das Windows-Subsystem für Linux (Windows10) verwenden.
ian@computer:~$ ssh [email protected]
Geben Sie Ihr Passwort ein (die Standardeinstellung ist Himbeere).
[email protected] Passwort:
Sie sollten sich jetzt an der Eingabeaufforderung Ihres Pi befinden.
pi@raspberrypi:~$
Schritt 2: Motion installieren und konfigurieren
Motion ist ein Programm, das in vielen Überwachungskamera- / Webcam-Projekten verwendet wird. Motion hat viele Funktionen. Wir richten es jedoch so ein, dass Videos einfach von der Webcam an Port 8081 gestreamt werden.
Testen Sie Ihre Webcam
Schließen Sie Ihre Webcam an und listen Sie die angeschlossenen USB-Geräte auf (Sie müssen möglicherweise nach dem Anschließen neu starten).
pi@raspberrypi:~ $ lsusb
Sie sollten eine ähnliche Ausgabe erhalten. Beachten Sie den Logitech C210.
Bus 001 Gerät 002: ID 046d:0819 Logitech, Inc. Webcam C210
Bus 001 Gerät 001: ID 1d6b:0002 Linux Foundation 2.0 Root Hub
Wenn Ihre Kamera nicht angezeigt wird, ist sie möglicherweise nicht kompatibel oder Sie müssen möglicherweise zusätzliche Treiber installieren.
Motion installieren
Pakete aktualisieren.
pi@raspberrypi:~ $ sudo apt-get update
Motion installieren.
pi@raspberrypi:~ $ sudo apt-get install motion -y
Sobald Motion installiert ist, bearbeiten Sie die Konfigurationsdatei.
pi@raspberrypi:~ $ sudo nano /etc/motion/motion.conf
Ändern Sie die folgenden Zeilen so, dass sie unten übereinstimmen.
Dämon an
width 640 height 480 Framerate 100 output_pictures off ffmpeg_output_movies off text_right stream_port 8081 stream_quality 100 stream_localhost off webcontrol_localhost off
Starten Sie den Motion Daemon beim Booten
Öffnen Sie die Datei /etc/default/motion.
pi@raspberrypi:~ $ sudo nano /etc/default/motion
Ändern
start_motion_daemon=ja
Datei speichern und beenden
Neustart
pi@raspberrypi:~ $ sudo reboot
Nachdem der Pi neu gestartet wurde, öffnen Sie den Browser und überprüfen Sie, ob Sie Videostreaming in den Browser auf Port 8081. haben
Beispiel:
192.168.1.18:8081
Fehlerbehebung beim Motion Daemon
Ich hatte Probleme, den Motion-Daemon beim Booten zu starten, während ich verschiedene Optionen in der Datei motion.conf ausprobierte.
Wenn Sie Motion vor dem Motion-Daemon in Raspian Stretch starten, werden Sie wahrscheinlich Probleme haben, ihn später beim Booten zu starten. Wenn Sie "sudo motion" ausführen, ohne den Daemon dafür zu konfigurieren, wird zuerst das Verzeichnis /var/log/motion erstellt, ohne dem Benutzer Schreibrechte zu erteilen.
Schritt 3: Apache installieren und Web Control-Seite einrichten
Apache ist der Webserver für die Steuerungswebseite des Roboters. Wir werden die standardmäßige Apache-Datei index.html durch eine von github heruntergeladene Datei ersetzen. Sie ändern auch einige Codezeilen, um den Bewegungsvideostream anzuzeigen und zuzuweisen, wohin die Befehle zur Steuerung des Roboters gesendet werden sollen.
Apache und Git. installieren
pi@raspberrypi:~ $ sudo apt-get install apache2 git -y
Sobald Apache und Git installiert sind, laden Sie die Dateien herunter.
pi@raspberrypi:~ $ git clone
Öffnen Sie das roombarobot-Verzeichnis.
pi@raspberrypi:~ $ cd roombarobot
Ersetzen Sie die Datei index.html im Ordner /var/www/html durch die Datei index.html im Ordner /home/pi/roombarobot
pi@raspberrypi:~/roombarobot $ sudo cp index.html /var/www/html
Bearbeiten Sie die Datei index.html
Öffnen Sie die Datei index.html mit einem Texteditor.
pi@raspberrypi:~/roombarobot $ sudo nano /var/www/html/index.html
Suchen Sie diese beiden Zeilen
var host = "ws://IHREIPADRESSE:9093/ws";
Ändern Sie "YOURIPADDRESS" in die statische IP-Adresse, die Sie in Schritt 1 eingerichtet haben, und speichern Sie die Datei.
Beispiel:
var host = "ws://192.168.1.18:9093/ws";
Öffnen Sie auf einem anderen Computer einen Browser und geben Sie die IP-Adresse Ihres Pi ein. Sie sollten die Kontrollwebseite mit einem Kästchen auf der linken Seite sehen, das Video von Ihrer Webcam streamt, und die Webkontrollschaltflächen auf der rechten Seite.
Schritt 4: Einrichten und Testen des Codes
Dieser Code ist in Python geschrieben und erfordert die Tornado-Bibliothek. Der Code verwendet die Bibliothek, um einen Server einzurichten, der über Websockets auf Port 9093 auf Befehle von der Steuerungswebseite lauscht.
Installieren Sie PIP und die Tornado-Bibliothek
pip installieren
pi@raspberrypi:~ $ sudo apt-get install python-pip
Tornado-Bibliothek installieren
pi@raspberrypi:~ $ sudo pip install tornado
Starten Sie das Roombabot-Programm und testen Sie die Verbindung
Starten Sie das roombabot.py-Programm
pi@raspberrypi:~$ sudo python /home/pi/roombarobot/roombabot.py
Nach dem Ausführen sollte im Terminal "Bereit" angezeigt werden. Öffnen Sie die Steuerungswebseite in einem Browser und klicken Sie auf Verbinden. Klicken Sie dann auf eine der Richtungsschaltflächen auf der Seite. Sie können auch die Pfeiltasten auf Ihrer Tastatur verwenden.
Sie sollten eine ähnliche Ausgabe im Terminal sehen.
Bereit
Verbindung geöffnet… Verbindung geöffnet… empfangen: u 8 Laufen Vorwärtsverbindung geöffnet… empfangen: l 6 Linksabbiegen Verbindung geöffnet… empfangen: d 2 Laufen Rückwärtsverbindung geöffnet… empfangen: r 4 Rechtsabbiegen
Drücken Sie Strg+C, um das Programm zu stoppen.
Sobald Sie mit dem Testen fertig sind, schalten Sie den Pi aus.
pi@raspberrypi:~$ sudo poweroff
Fehler
Ich habe ein Problem mit der Schaltfläche zum Herunterfahren auf der Steuerungswebseite festgestellt. Manchmal tut die Schaltfläche zum Herunterfahren nichts, wenn sie angeklickt oder angetippt wird. Ich konnte nicht herausfinden, woran das liegt, aber es gibt einen Workaround. Wenn Sie den Roboter ausschalten möchten und die Schaltfläche zum Herunterfahren nicht funktioniert, laden Sie die Seite neu, klicken / tippen Sie auf die Schaltfläche Verbinden und klicken / tippen Sie dann auf die Schaltfläche zum Herunterfahren. Es sollte sich ausschalten.
Schritt 5: Montage
Wie bereits erwähnt, müssen Sie für dieses Projekt keinen Roomba verwenden. Alles mit zwei Motoren, zwei Rädern und einem Rahmen würde funktionieren. Ich habe den Roomba auseinander genommen und alles außer den Radmodulen und dem Akku entfernt.
Radmodule
Die Räder und Motoren des Roomba sind zusammen in einem abnehmbaren Modul untergebracht. Jedes Modul hat ein blaues Außengehäuse, das Motor, Getriebe, Rad, Aufhängungsfeder und Schnittstellenplatine enthält.
Schnittstellenkarte
Zu jeder Schnittstellenplatine laufen sechs Drähte. Es gibt zwei Drähte (Rot[+], Schwarz[-]), die den Motor drehen, ein Datendraht für einen Hall-Effekt-Sensor, ein Draht für den Radfallschalter, ein 5V-Draht und ein GND-Draht zur Stromversorgung des Sensors. Sie müssen das Modul zerlegen, um auf die Schnittstellenplatine zugreifen zu können. Ich habe alles wieder am Motor entfernt und neue [+] und [-] Drähte an den Motor gelötet (siehe Fotos). Es liegt an Ihnen, ob Sie die Sensoren erhalten möchten oder nicht.
Fahrwerksfedern
Sobald Sie den Vakuumteil entfernen, wird das Gewicht des Roomba abgeworfen. Wenn Sie die Federn nicht entfernen, sitzt der Roomba schräg. Ich habe diese ursprünglich entfernt, aber dann wieder hinzugefügt, als ich feststellte, dass es Schwierigkeiten hatte, über den Teppich zu rollen. Das Zurücksetzen der Feder hat das Problem behoben.
Verkabelung der Motoren mit der Motorsteuerung
Die Motoren sind voneinander weg. Das heißt, um den Roomba vorwärts zu fahren, muss sich ein Motor vorwärts drehen, während der andere rückwärts dreht. Ich habe nicht viel darüber nachgedacht, bis ich alles verkabelt habe. Am Ende habe ich nur den Code geschrieben, wie ich die Motoren ursprünglich verdrahtet habe. Dies war ein glücklicher Zufall, denn jedes Mal, wenn der Raspberry Pi ein- und ausgeschaltet wird, wird eine Spannung an die GPIO-Pins ausgegeben. So wie ich die Dinge verkabelt habe, dreht sich der Roomba, bis der Raspberry Pi hochgefahren ist (etwa dreißig Sekunden) und dreht sich beim Herunterfahren, bis die Stromversorgung unterbrochen wird. Bei einer anderen Verkabelung würde es möglicherweise vorwärts / rückwärts rollen, was irritierend wäre. Ich plane, dies schließlich mit einem einfachen Schalter für die Motorsteuerung zu beheben.
Anschließen der Motoren und des Akkus an die Motorsteuerung
Stromversorgung- - - - - - - - - - - - - - - - 12V [+]- - - - - - - - - - - - -Roomba Batterie [+]
Motor 2- - - - - - - - - - - - - - - Schwarz- - - - - - - - - - - - - -Linker Motor [-] Motor 2- - - - - - - - - - - - - - - Rot- - - - - - - - - - - - - - -Linker Motor [+] Motor 1- - - - - - - - - - - - - - - Schwarz- - - - - - - - - - - - - -Rechter Motor[-] Motor 1- - - - - - - - - - - - - - Rot- - - - - - - - - - - - - - -Rechter Motor[+] GND- - - - - - - - - - - - - - - - - 12V [-]- - - - - - - - - - - - -Roomba Batterie [-]
Verkabelung des Motorcontrollers mit dem Raspberry Pi
Motorcontroller Pins Drahtfarbe (siehe Fotos) Raspberry Pi Pins
GND- - - - - - - - - - - - - - - - - Schwarz- - - - - - - - - - - - - -GND PWM 2- - - - - - - - - - - - - - - Blau - - - - - - - - - - - - - -GPIO 18 DIR 2- - - - - - - - - - - - - - - Grün- - - - - - - - - - - - -GPIO 23 PWM 1- - - - - - - - - - - - - - - Gelb - - - - - - - - - - - - -GPIO 24 DIR 1- - - - - - - - - - - - - - - - Orange - - - - - - - - - - - - -GPIO 25 5V - - - - - - - - - - - - - - - - Rot- - - - - - - - - - - - - - -5V
Montage der Elektronik
Es gibt nicht viel, um alles zusammenzustellen. Ich habe den Roomba vom Chassis abgenommen. Bei abgenommener Abdeckung können Sie die vorhandenen Kunststoff-Abstandshalter einfach abklipsen und Löcher bohren, um die Elektronik zu montieren. Es gibt vorhandene Anschlüsse zum Verlegen von Kabeln von den Motoren. Wenn Sie den serienmäßigen Roomba-Akku verwenden, ist bereits eine Aussparung für den Zugang zu den Akkupolen vorhanden.
Batterien
Ich habe separate Batterien für den Raspberry Pi und den Motorcontroller verwendet. Der Akku des Pi ist nur ein 5-V-Akku, der zum Aufladen von Mobiltelefonen verwendet wird. Für die Motorsteuerung habe ich den mitgelieferten Original Roomba-Akku verwendet. Die Batteriepole sind nicht beschriftet, daher ist es am besten, die Spannung mit einem Voltmeter zu überprüfen, bevor Sie sie an die Motorsteuerung anschließen. Um die Drähte am Roomba-Akku zu befestigen, habe ich vier Neodym-Magnete verwendet (siehe Fotos). Ich lötete zwei der Magnete an die Drähte und die anderen beiden klebte ich an die Batteriepole. Durch Löten werden die Magnete entmagnetisiert. Die Beschichtung auf der Außenseite kann sich jedoch immer noch an den Magneten an den Anschlüssen festsetzen und Strom leiten. So wird das An- und Abklemmen der Batterie zum Kinderspiel.
Testen
Wenn Sie alles zusammen haben, überprüfen Sie, ob Sie alles richtig verkabelt haben, stützen Sie Ihren Roboter auf etwas (damit er nicht wegrollt) und schalten Sie ihn ein.
Melden Sie sich an und starten Sie das roombabot.py-Programm
pi@raspberrypi:~$ sudo python /home/pi/roombarobot/roombabot.py
Rufen Sie die Webkontrollseite auf und testen Sie sie. Wenn alles richtig verkabelt ist, sollten sich die Räder beim Anklicken der Buttons / der Pfeiltasten in die entsprechende Richtung drehen (Verbinden nicht vergessen).
Schritt 6: Starten des Python-Codes beim Booten / Fertigstellen
Als letztes müssen wir Raspbian anweisen, das Python-Programm beim Booten zu starten. Um dies zu tun, werden wir ein Skript erstellen und es so planen, dass es beim Neustart mit crontab ausgeführt wird.
Erstellen Sie das Skript
Erstellen Sie eine neue Skriptdatei namens startrobot.sh im pi-Benutzerverzeichnis
pi@raspberrypi:~ $ sudo nano startrobot.sh
Kopieren Sie die folgenden Zeilen in die Datei
#!/bin/sh
#startrobot.sh cd / cd /home/pi/roombarobot sudo python roombabot.py cd /
Datei speichern und beenden
Machen Sie die Datei startrobot.sh ausführbar
pi@raspberrypi:~$ sudo chmod 755 startrobot.sh
Testen Sie es (Drücken Sie Strg + c, um zu stoppen)
pi@raspberrypi:~$ sh startrobot.sh
Bearbeiten Sie die crontab-Datei
pi@raspberrypi:~$ sudo crontab -e
Fügen Sie die folgende Zeile am Ende der Datei hinzu
# m h dom mon dow Befehl
@reboot sh /home/pi/startrobot.sh
Speichern und schließen
Das Programm roombabot.py sollte jetzt starten, wenn der Pi neu gestartet oder aus- und wieder eingeschaltet wird.
Beenden
An dieser Stelle sollten Sie einen funktionsfähigen Roboter haben, den Sie mit dem Browser von jedem Gerät in Ihrem Netzwerk aus steuern können. Ich habe dies seit dem ursprünglichen Build ein wenig weitergeführt und ein VPN eingerichtet, um auf den Roboter zugreifen zu können, wenn ich nicht zu Hause bin. Ich beabsichtige, in Zukunft einige zusätzliche Änderungen vorzunehmen. Ich plane, es autonom zu machen und möglicherweise Bewegungen zu folgen, während ich immer noch die Kontrolle übernehmen kann, wenn ich möchte.