Table des matières:
- Étape 1: Installez Raspbian et configurez une adresse IP statique
- Étape 2: Installer et configurer Motion
- Étape 3: Installer Apache et configurer la page de contrôle Web
- Étape 4: Configurer et tester le code
- Étape 5: Assemblage
- Étape 6: démarrer le code Python au démarrage / terminer
Vidéo: Robot Roomba contrôlé par navigateur avec le Raspberry Pi modèle 3 A+ : 6 étapes (avec photos)
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:08
Aperçu
Ce Instructable se concentrera sur la façon de donner à un Roomba mort un nouveau cerveau (Raspberry Pi), des yeux (Webcam) et un moyen de tout contrôler à partir d'un navigateur Web.
Il existe de nombreux hacks Roomba qui permettent le contrôle via l'interface série. Je n'ai pas eu la chance de tomber sur un Roomba doté d'un micrologiciel actuel ou d'une carte mère fonctionnelle. Soit le Roomba est trop vieux, soit le Roomba est mort. J'ai trouvé le Roomba que j'ai utilisé pour ce projet dans une poubelle de friperie locale pour 5 $. Il avait encore une batterie décente, mais une carte mère morte. (J'ai aussi trouvé la webcam dans la même friperie pour environ 5 $). Tout ce que j'utilise du Roomba d'origine, ce sont les moteurs, le châssis et la batterie. Vous n'êtes pas obligé d'utiliser un Roomba pour ce projet. Vous pouvez utiliser différents moteurs, roues et châssis si vous le souhaitez. J'ai juste envie de transformer un morceau de ferraille en quelque chose d'utilisable.
Pour cette construction, j'ai utilisé le Raspberry Pi Model 3 A+ et un contrôleur de moteur Riorand. J'utilise le code du robot contrôlé par navigateur Dexter Industries que j'ai modifié. La version Dexter Industries configure le Pi en tant que serveur Websocket qui vous permet de contrôler leur robot (plateforme brick pi) à partir d'un fichier html client exécutant un autre ordinateur.
J'ai modifié le code en utilisant les broches GPIO et j'ai ajouté un moyen pour le Pi de s'arrêter lorsqu'un bouton est cliqué / lorsque la touche d'échappement est enfoncée dans le navigateur. J'ai également apporté quelques modifications à la page Web de contrôle pour permettre l'affichage d'un flux de mouvement via un iframe, tout en contrôlant le robot dans une seule page. J'ai configuré le Pi avec une adresse IP statique pour héberger le fichier client afin que je puisse me connecter à l'aide de n'importe quel ordinateur ou périphérique sur mon réseau.
Je documente le processus ici dans l'espoir de montrer comment créer un robot de base simple et peu coûteux.
Pièces utilisées
Raspberry Pi 3 A+ (Adafruit Link) 30 $
Contrôleur de pilote de moteur double Riorand H-Bridge (lien Amazon) 22 $
Batterie 12V pour moteurs (lien Amazon) 19 $
Batterie 5V pour Raspberry Pi (Amazon Link) 10 $
Carte Micro SD de 8 Go (Amazon Link) 5 $
Fils de cavalier (lien Amazon) 7 $
Roomba série 500
. Tous ensemble un peu moins de 100 $.
Étape 1: Installez Raspbian et configurez une adresse IP statique
J'ai utilisé Raspbian Stretch Lite. Je n'ai pas vu le besoin du bureau, mais vous pouvez installer la version de bureau si vous préférez.
Je vais supposer que vous savez déjà comment installer Raspbian. Si vous avez besoin d'aide, vous pouvez trouver le guide de la Fondation Raspberry Pi ici.
Une fois que vous avez Raspbian opérationnel, connectez-vous et exécutez le programme raspi-config.
pi@raspberrypi:~ $ sudo raspi-config
Configurez votre connexion WiFi dans raspi-config
Sélectionner
2 options de réseau
Sélectionner
Wifi N2
Sélectionnez un pays, entrez votre SSID et entrez votre mot de passe
Configurer SSH dans raspi-config
Une fois la configuration initiale effectuée, j'ai utilisé SSH pour tout configurer sans tête. (Vous pouvez ignorer cela si vous utilisez un moniteur. Il m'était plus facile d'apporter des modifications au code sans avoir à arrêter le robot et à le brancher sur un moniteur.)
Retour au menu principal de raspi-config
Sélectionner
5 options d'interfaçage
Sélectionner
P2 SSH
Sélectionner
Oui
De retour au menu principal de raspi-config sélectionnez
Vérifiez que vous êtes connecté à votre réseau
pi@raspberrypi:~ $ ifconfig
Vous devriez recevoir une sortie similaire à celle-ci. (Notez l'adresse IP; vous en aurez peut-être besoin plus tard. par exemple 192.168.1.18)
wlan0: drapeaux=4163 mtu 1500
inet 192.168.1.18 masque de réseau 255.255.255.0 diffusion 192.168.1.255 inet6 fe80::c74f:42ec:8cd3:2fda prefixlen 64 scopeid 0x20 ether b8:27:eb:6a:a4:95 txqueuelen 1000 (Ethernet) paquets RX 44396 octets 5847726 (5,5 MiB) Erreurs RX 0 abandonné 0 dépassement 0 trame 0 Paquets TX 30530 octets 39740576 (37,8 MiB) Erreurs TX 0 abandonné 0 dépassement 0 porteuse 0 collisions 0
Vérifiez que vous pouvez accéder à Internet.
pi@raspberrypi:~ $ ping google.com
Vous devriez recevoir une sortie similaire à celle-ci.
PING google.com (216.58.194.110) 56 (84) octets de données.
64 octets de dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq=1 ttl=54 temps=18.2 ms 64 octets de dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq=2 ttl =54 temps=19,4 ms 64 octets de dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq=3 ttl=54 temps=23,6 ms 64 octets de dfw06s48-in-f14.1e100.net (216.58.194.110): icmp_seq=4 ttl=54 time=30.2 ms ^C --- google.com ping statistics --- 4 paquets transmis, 4 reçus, 0% de perte de paquets, temps 3004ms rtt min/avg/max/mdev = 18.209/ 22 901/30,267/4,715 ms
Configurer une IP statique
Pour pouvoir vous connecter de manière cohérente à votre robot en utilisant la même adresse sur votre réseau, vous devrez configurer une adresse IP statique.
Obtenez votre adresse réseau actuelle, par exemple 192.168.1.18
J'utilise l'adresse qui a été automatiquement attribuée par DHCP lorsque le Pi s'est connecté à mon réseau. Vous pouvez changer cela à votre guise tant qu'il correspond à votre réseau et n'entre pas en conflit avec d'autres adresses attribuées.
Ouvrez dhcp.conf dans un éditeur de texte. (j'utilise nano)
pi@raspberrypi:~ $ sudo nano /etc/dhcpcd.conf
Faites défiler jusqu'à #Exemple de configuration IP statique et modifiez les lignes suivantes.
#interface eth0
#static ip_address=192.168.11.13 #static routers=192.168.11.1 #static domain_name_servers=192.168.11.1 8.8.8.8
Modifiez pour correspondre à votre réseau et supprimez le # au début de chaque ligne.
Exemple:
interface wlan0
static ip_address=192.168.1.18 static routers=192.168.1.1 static domain_name_servers=192.168.1.1 8.8.8.8
Sauvegarder et quitter.
Redémarrez et connectez-vous au Pi via SSH
pi@raspberrypi:~ $ sudo reboot
Connectez-vous à partir d'un autre ordinateur en utilisant SSH. Les utilisateurs de Windows peuvent utiliser PuTTY ou le sous-système Windows pour Linux (Windows10).
ian@ordinateur:~$ ssh [email protected]
Entrez votre mot de passe (le mot de passe par défaut est framboise).
Mot de passe de [email protected]:
Vous devriez maintenant être à l'invite de commande de votre Pi.
pi@raspberrypi:~$
Étape 2: Installer et configurer Motion
Motion est un programme utilisé dans de nombreux projets de caméras de sécurité / webcams. Motion a beaucoup de fonctionnalités. Cependant, nous le configurons pour simplement diffuser la vidéo de la webcam vers le port 8081.
Testez votre webcam
Branchez votre webcam et répertoriez les périphériques USB connectés (vous devrez peut-être redémarrer après la connexion).
pi@raspberrypi:~ $ lsusb
Vous devriez obtenir une sortie similaire à celle-ci. Notez le Logitech C210.
Bus 001 Périphérique 002: ID 046d:0819 Logitech, Inc. Webcam C210
Bus 001 Périphérique 001: ID 1d6b:0002 Concentrateur racine Linux Foundation 2.0
Si votre appareil photo ne s'affiche pas, il se peut qu'il ne soit pas compatible ou que vous deviez installer des pilotes supplémentaires.
Installer Motion
Mettre à jour les packages.
pi@raspberrypi:~ $ sudo apt-get update
Installez Motion.
pi@raspberrypi:~ $ sudo apt-get install motion -y
Une fois Motion installé, modifiez le fichier de configuration.
pi@raspberrypi:~ $ sudo nano /etc/motion/motion.conf
Modifiez les lignes suivantes pour qu'elles correspondent ci-dessous.
démon sur
largeur 640 hauteur 480 framerate 100 output_pictures désactivé ffmpeg_output_movies désactivé text_right stream_port 8081 stream_quality 100 stream_localhost désactivé webcontrol_localhost désactivé
Démarrer le démon de mouvement au démarrage
Ouvrez le fichier /etc/default/motion.
pi@raspberrypi:~ $ sudo nano /etc/default/motion
Changer pour
start_motion_daemon=oui
Enregistrez le fichier et quittez
Redémarrer
pi@raspberrypi:~ $ sudo reboot
Une fois que le Pi a redémarré, ouvrez le navigateur et vérifiez que vous avez la vidéo en streaming dans le navigateur sur le port 8081
Exemple:
192.168.1.18:8081
Dépannage du démon de mouvement
J'ai rencontré des problèmes pour démarrer le démon de mouvement au démarrage alors que j'essayais différentes options dans le fichier motion.conf.
Si vous démarrez le mouvement avant le démon de mouvement dans Raspian Stretch, vous rencontrerez probablement des problèmes pour le faire démarrer au démarrage plus tard. L'exécution de "sudo motion" sans configurer le démon pour le faire crée d'abord le répertoire /var/log/motion sans accorder d'autorisation d'écriture à l'utilisateur.
Étape 3: Installer Apache et configurer la page de contrôle Web
Apache est le serveur Web de la page Web de contrôle du robot. Nous allons remplacer le fichier Apache index.html par défaut par un fichier téléchargé depuis github. Vous allez également modifier quelques lignes de code pour afficher le flux vidéo en mouvement et attribuer où envoyer les commandes pour contrôler le robot.
Installer Apache et Git
pi@raspberrypi:~ $ sudo apt-get install apache2 git -y
Une fois apache et git installés, téléchargez les fichiers.
pi@raspberrypi:~ $ git clone
Ouvrez le répertoire roombarobot.
pi@raspberrypi:~ $ cd roombarobot
Remplacez le fichier index.html dans le dossier /var/www/html par le fichier index.html dans le /home/pi/roombarobot
pi@raspberrypi:~/roombarobot $ sudo cp index.html /var/www/html
Modifier le fichier index.html
Ouvrez le fichier index.html avec un éditeur de texte.
pi@raspberrypi:~/roombarobot $ sudo nano /var/www/html/index.html
Repérez ces deux lignes
var hôte = "ws://YOURIPADDRESS:9093/ws";
Remplacez « YOURIPADDRESS » par l'adresse IP statique que vous avez configurée à l'étape 1 et enregistrez le fichier.
Exemple:
var hôte = "ws://192.168.1.18:9093/ws";
Sur un autre ordinateur, ouvrez un navigateur et entrez l'adresse IP de votre Pi. Vous devriez voir la page Web de contrôle avec une boîte sur la gauche, la vidéo en streaming depuis votre webcam et les boutons de contrôle Web sur la droite.
Étape 4: Configurer et tester le code
Ce code est écrit en python et nécessite la bibliothèque tornado. Le code utilise la bibliothèque pour configurer un serveur pour écouter les commandes de la page Web de contrôle via des Websockets sur le port 9093.
Installer PIP et la bibliothèque Tornado
Installer le pépin
pi@raspberrypi:~ $ sudo apt-get install python-pip
Installer la bibliothèque de tornades
pi@raspberrypi:~ $ sudo pip install tornado
Démarrez le programme Roombabot et testez la connexion
Démarrez le programme roombabot.py
pi@raspberrypi:~$ sudo python /home/pi/roombarobot/roombabot.py
Une fois exécuté, vous devriez voir "Prêt" dans le terminal. Ouvrez la page Web de contrôle dans un navigateur et cliquez sur se connecter. Cliquez ensuite sur l'un des boutons directionnels de la page. Vous pouvez également utiliser les touches fléchées de votre clavier.
Vous devriez voir une sortie similaire à celle-ci dans le terminal.
Prêt
connexion ouverte… connexion ouverte… reçue: u 8 Running Forward connexion ouverte… reçue: l 6 Tourner à gauche connexion ouverte… reçue: d 2 Running Reverse connexion ouverte… reçue: r 4 Tourner à droite
Appuyez sur ctrl+c pour arrêter le programme.
Une fois que vous avez terminé de tester l'alimentation du Pi.
pi@raspberrypi:~$ sudo poweroff
Bugs
J'ai remarqué un problème avec le bouton d'arrêt sur la page Web de contrôle. Parfois, le bouton d'arrêt ne fait rien lorsqu'il est cliqué ou touché. Je n'ai pas réussi à comprendre ce qui cause cela, mais il existe une solution de contournement. Si vous souhaitez éteindre le robot et que le bouton d'arrêt ne fonctionne pas, rechargez la page, cliquez/appuyez sur le bouton de connexion, puis cliquez/appuyez sur le bouton d'arrêt. Il devrait s'éteindre.
Étape 5: Assemblage
Comme mentionné précédemment, vous n'êtes pas obligé d'utiliser un Roomba pour ce projet. N'importe quoi avec deux moteurs, deux roues et un cadre fonctionnerait. J'ai démonté le Roomba et tout enlevé sauf les modules de roues et la batterie.
Modules de roue
Les roues et les moteurs du Roomba sont logés ensemble dans un module amovible. Chaque module a un boîtier extérieur bleu contenant le moteur, la boîte de vitesses, la roue, le ressort de suspension et la carte d'interface.
Tableau d'interface
Chaque carte d'interface est reliée à six fils. Il y a deux fils (rouge [+], noir [-]) qui font tourner le moteur, un fil de données pour un capteur à effet Hall, un fil pour le commutateur de chute de roue, un fil 5V et un fil GND pour alimenter le capteur. Vous devrez démonter le module pour accéder à la carte d'interface. J'ai tout retiré au moteur et soudé de nouveaux fils [+] et [-] au moteur (voir photos). C'est à vous de décider si vous souhaitez conserver les capteurs ou non.
Ressorts de suspension
Une fois que vous avez retiré la partie sous vide, le poids du Roomba est rejeté. Si vous ne retirez pas les ressorts, le Roomba sera incliné. À l'origine, je les ai supprimés, mais je les ai ensuite rajoutés lorsque j'ai découvert qu'il avait du mal à rouler sur le tapis. Remettre le ressort a résolu le problème.
Câblage des moteurs au contrôleur de moteur
Les moteurs sont tournés l'un vers l'autre. Cela signifie que pour faire avancer le Roomba, un moteur devra tourner vers l'avant tandis que l'autre tourne vers l'arrière. Je n'y ai pas beaucoup réfléchi jusqu'à ce que j'aie tout câblé. J'ai fini par écrire le code sur la façon dont j'ai initialement câblé les moteurs. Ce fut un heureux accident car chaque fois que le Raspberry Pi s'allume/s'éteint, il y a une tension de sortie vers les broches GPIO. La façon dont j'ai câblé les choses, le Roomba tourne jusqu'à ce que le Raspberry Pi ait démarré (environ trente secondes) et tourne lors de l'arrêt jusqu'à ce que l'alimentation soit coupée. S'il était câblé différemment, il pourrait potentiellement rouler en avant / en arrière, ce qui serait irritant. Je prévois éventuellement de résoudre ce problème avec un simple interrupteur pour le contrôleur de moteur.
Câblage des moteurs et de la batterie au contrôleur de moteur
Alimentation- - - - - - - - - - - - - - - - 12V [+]- - - - - - - - - - - - -Batterie Roomba [+]
Moteur 2- - - - - - - - - - - - - - - Noir- - - - - - - - - - - - - -Moteur gauche [-] Moteur 2- - - - - - - - - - - - - - - Rouge- - - - - - - - - - - - - - -Moteur gauche [+] Moteur 1- - - - - - - - - - - - - - - Noir- - - - - - - - - - - - - -Moteur droit[-] Moteur 1- - - - - - - - - - - - - - - Rouge- - - - - - - - - - - - - - -Moteur droit[+] GND- - - - - - - - - - - - - - - - - 12V [-]- - - - - - - - - - - - -Batterie Roomba [-]
Câblage du contrôleur de moteur au Raspberry Pi
Broches du contrôleur de moteur Couleur du fil (voir photos) Broches Raspberry Pi
GND- - - - - - - - - - - - - - - - - Noir- - - - - - - - - - - - - -GND PWM 2- - - - - - - - - - - - - - - - Bleu - - - - - - - - - - - - - -GPIO 18 DIR 2- - - - - - - - - - - - - - - - Vert- - - - - - - - - - - - - -GPIO 23 PWM 1- - - - - - - - - - - - - - - - Jaune - - - - - - - - - - - - -GPIO 24 DIR 1- - - - - - - - - - - - - - - - Orange - - - - - - - - - - - - -GPIO 25 5V - - - - - - - - - - - - - - - - - Rouge- - - - - - - - - - - - - - -5V
Montage de l'électronique
Il n'y a pas grand chose à faire pour tout assembler. J'ai démonté le roomba de son châssis. Une fois le couvercle retiré, vous pouvez facilement couper les entretoises en plastique existantes et percer des trous pour monter l'électronique. Il existe des ports existants pour faire passer les câbles des moteurs. Si vous utilisez la batterie Roomba d'origine, il y a déjà une découpe pour accéder aux bornes de la batterie.
Piles
J'ai utilisé des batteries séparées pour le Raspberry Pi et le contrôleur de moteur. La batterie du Pi n'est qu'une batterie 5V utilisée pour booster les téléphones portables. Pour le contrôleur de moteur, j'ai utilisé la batterie Roomba d'origine qui l'accompagnait. Les bornes de la batterie ne sont pas étiquetées, il est donc préférable de vérifier la tension avec un voltmètre avant de la câbler au contrôleur de moteur. Pour attacher les fils à la batterie du Roomba, j'ai utilisé quatre aimants néodyme (voir photos). J'ai soudé deux des aimants aux fils et les deux autres j'ai collé aux bornes de la batterie. La soudure démagnétise les aimants. Cependant, le revêtement extérieur peut toujours se fixer aux aimants des bornes et conduire l'électricité. Cela rend la connexion et la déconnexion de la batterie un jeu d'enfant.
Essai
Une fois que vous avez tout assemblé, vérifiez que tout est correctement câblé, placez votre robot sur quelque chose (afin qu'il ne roule pas) et allumez-le.
Connectez-vous et démarrez le programme roombabot.py
pi@raspberrypi:~$ sudo python /home/pi/roombarobot/roombabot.py
Accédez à la page de contrôle Web et testez-le. Si tout est câblé correctement, les roues doivent tourner dans le sens correspondant lorsque les boutons sont cliqués / les touches fléchées sont enfoncées (n'oubliez pas de cliquer sur connecter).
Étape 6: démarrer le code Python au démarrage / terminer
La dernière chose que nous devons faire est de dire à Raspbian de démarrer le programme python au démarrage. Pour ce faire, nous allons créer un script et le programmer pour qu'il s'exécute au redémarrage à l'aide de crontab.
Créer le scénario
Créez un nouveau fichier de script appelé startrobot.sh dans le répertoire utilisateur pi
pi@raspberrypi:~ $ sudo nano startrobot.sh
Copiez les lignes suivantes dans le fichier
#!/bin/sh
#startrobot.sh cd / cd /home/pi/roombarobot sudo python roombabot.py cd /
Enregistrez le fichier et quittez
Rendre le fichier startrobot.sh exécutable
pi@raspberrypi:~$ sudo chmod 755 startrobot.sh
Testez-le (appuyez sur ctrl + c pour arrêter)
pi@raspberrypi:~$ sh startrobot.sh
Modifier le fichier crontab
pi@raspberrypi:~$ sudo crontab -e
Ajoutez la ligne suivante en bas du fichier
# commande m h dom mon dow
@reboot sh /home/pi/startrobot.sh
Sauvegarder et quitter
Le programme roombabot.py devrait maintenant démarrer lorsque le Pi est redémarré ou éteint.
Finir
À ce stade, vous devriez avoir un robot fonctionnel que vous pouvez contrôler à l'aide du navigateur à partir de n'importe quel appareil de votre réseau. J'ai poussé cela un peu plus loin depuis la construction d'origine et j'ai configuré un VPN pour pouvoir accéder au robot lorsque je suis loin de chez moi. J'ai l'intention d'apporter quelques modifications supplémentaires à l'avenir. J'envisage de le rendre autonome et éventuellement de suivre les mouvements tout en pouvant reprendre les commandes quand je le souhaite.
Conseillé:
Ascenseur modèle contrôlé par Arduino : 7 étapes (avec photos)
Ascenseur modèle contrôlé par Arduino : dans ce Instructable, je vais vous montrer comment j'ai construit un ascenseur jouet à deux niveaux, avec des portes coulissantes fonctionnelles et une voiture qui monte et descend à la demande. Le cœur de l'ascenseur est un Arduino Uno (ou dans ce cas un métro Adafruit), avec l'Adafruit Moto
Disposition de chemin de fer modèle automatisé simple - Contrôlé par Arduino : 11 étapes (avec photos)
Disposition de chemin de fer modèle automatisé simple | Contrôlé par Arduino : les microcontrôleurs Arduino sont un excellent ajout au modélisme ferroviaire, en particulier lorsqu'il s'agit d'automatisation. Voici un moyen simple et facile de démarrer avec l'automatisation des chemins de fer miniatures avec Arduino. Alors, sans plus tarder, commençons
Wi-Servo : Servomoteurs Wi-Fi contrôlés par navigateur (avec Arduino + ESP8266) : 5 étapes
Wi-Servo : Servomoteurs contrôlés par navigateur Wi-fi (avec Arduino + ESP8266) : cette instructable montre comment contrôler certains servomoteurs à distance dans un réseau Wi-Fi, à l'aide d'un navigateur Internet ordinaire (Firefox, par exemple). Cela pourrait être utilisé dans plusieurs applications : jouets, robots, drones, caméra panoramique/inclinaison, etc. Les moteurs étaient
Voiture RasbperryPi avec caméra FPV. Contrôle par navigateur Web : 31 étapes (avec images)
Voiture RasbperryPi avec caméra FPV. Contrôle par navigateur Web : nous allons construire une voiture 4x4 - la direction sera similaire à celle d'un tank - pour tourner un côté des roues tournera à une vitesse différente de l'autre. À la voiture sera placé la caméra sur un support spécial où nous pouvons changer la position de la caméra. Le robot sera c
Fauteuil roulant contrôlé par vision par ordinateur avec mannequin : 6 étapes (avec photos)
Fauteuil roulant contrôlé par vision par ordinateur avec mannequin : projet de AJ Sapala, Fanyun Peng, Kuldeep Gohel, Ray LC.Instructable par AJ Sapala, Fanyun Peng, Ray LC.Nous avons créé un fauteuil roulant avec des roues contrôlées par une carte Arduino, qui est à son tour contrôlée par un raspberry pi exécutant openCV via Processing