J'ai déjà écrit plus tôt sur l'installation de rosserial_arduino pour l'interaction du microcontrôleur Arduino avec la plate-forme robotique ROS dans un article précédent. rosserial_arduino est un package de la pile rosserial conçu pour la plate-forme ROS et «transforme» la carte Arduino en un nœud ROS autonome avec lequel d'autres composants du système peuvent interagir. Lors de l'utilisation d'Arduino pour des projets robotiques, il y a une limitation importante: Arduino ne peut pas être utilisé comme un nœud informatique à part entière qui peut gérer toutes les opérations nécessaires au fonctionnement normal du robot. Par exemple, vous ne pouvez pas exécuter de scripts OpenCV dessus pour des tâches de vision par ordinateur. Dans cet article, je veux parler de mon expérience de l'installation d'un système ROS et de la connexion d'un Arduino à un micro-ordinateur Raspberry Pi à l'aide du package rosserial_arduino déjà familier.
Motivation
Après avoir découvert la plate-forme rosserial_arduino, j'avais une question: puis-je utiliser Arduino en conjonction avec un micro-ordinateur plus puissant de manière à rendre le robot plus indépendant de l'ordinateur portable.Ensuite, j'ai eu l'idée d'essayer ROS sur un micro-ordinateur Raspberry Pi. Le Raspberry Pi est un mini-ordinateur autonome sur la carte. Il a une puce CPU, une puce graphique, un slot pour carte SD, une entrée Ethernet, plusieurs interfaces USB et une sortie vidéo HDMI pour connecter un moniteur. Vous pouvez connecter une souris, un clavier et un disque dur externe aux entrées USB.La combinaison du Raspberry Pi et de l'Arduino est très prometteuse et a été utilisée à plusieurs reprises dans des projets robotiques.Raspberry Pi vous permet également de connecter une caméra (webcam ou caméra spéciale RPi Board). Un simple robot à roues sur une carte Arduino Uno modifiée est tombé entre mes mains il y a un an. Tout à l'heure, entre mes mains était le Raspberry Pi Model B.
Installation du système d'exploitation sur le Raspberry Pi
Vous devez d'abord installer la distribution Linux sur la "framboise". La façon la plus simple de le faire est d'utiliser le gestionnaire d'installation de NOOBS OS. La procédure à suivre peut être lue dans ce manuel sur le portail officiel Raspberry Pi .J'ai choisi d'installer Raspbian, une distribution Debian modifiée spécialement conçue pour Raspberry.Remarque: lors de la connexion d'un moniteur, il y a souvent des problèmes d'affichage d'une image, en particulier, cela se produit avec des moniteurs plus anciens qui n'ont pas d'entrée HDMI. Ici, le fichier config.txt vient à notre aide - le fichier de configuration Raspberry pour les paramètres du moniteur. Dans certains cas, il est déjà dans l'archive d'images système (Raspbian), dans le cas de NOOBS, il doit être créé à la racine de la carte SD.Insérez les lignes suivantes dans le fichier:
hdmi_safe=1
hdmi_force_hotplug=1
config_hdmi_boost=4
Dans ce cas, les lignes importantes sont:hdmi_safe=1
…
hdmi_force_hotplug=1
…
config_hdmi_boost=4
Dans mon cas, ces paramètres ont permis d'obtenir l'image correcte sur un moniteur avec une entrée VGA.Configurer l'accès à distance au Raspberry Pi
Vous pouvez vous connecter à la carte Raspberry Pi via le réseau via SSH. Pour ce faire, le Raspberry Pi doit être connecté au réseau soit via un câble Ethernet (il y a une entrée spéciale sur la carte pour cela) soit via un adaptateur Wi-Fi connecté à un port USB. Lorsque vous connectez un câble Ethernet, Raspberry reçoit automatiquement une adresse IP sur le réseau et devient immédiatement disponible.Si vous utilisez un adaptateur, vous devez effectuer un certain nombre de procédures simples.J'ai utilisé l'adaptateur Wi-Fi TPLINK suivant:
connectez l'adaptateur au port USB et vérifiez si le périphérique du système est détecté par la commande$ iwconfig
Nous analysons maintenant l'espace pour rechercher les réseaux sans fil disponibles:$ sudo iwlist wlan0 scan
Le champ ESSID dans la sortie de la commande indique le nom du point d'accès.Connectez-vous maintenant au point d'accès pour le chiffrement WPA à l'aide de l'utilitaire wpa_supplicant.En utilisant l'utilitaire wpa_passphrase, qui fait partie du package wpa_supplicant, nous générons un mot de passe basé sur la clé d'accès:$ wpa_passphrase <hotspot_name> <hotspot_access_key>
où hotspot_name et hotspot_access_key sont le nom du point d'accès et de la clé d'accès, respectivement.L'utilitaire renvoie la chaîne psk générée.Ensuite, le bloc réseau entier, contenant le ssid du réseau et la ligne psk, est inséré à la fin du fichier de configuration /etc/wpa_supplicant/wpa_supplicant.conf et enregistré. Enfin, nous redémarrons notre Raspberry Pi et vérifions la connexion réseau.Pour vous connecter via SSH dans le terminal de l'ordinateur, vous devez exécuter la commande:$ ssh pi@<raspi_ip>
où <raspi_ip> est l'adresse IP de framboise, qui peut être reconnue par la commande ifconfig exécutée directement dans le terminal de framboise.Pour vous connecter via SSH avec la possibilité d'exécuter des applications graphiques, utilisez la commande:$ ssh -X pi@<raspi_ip>
Vous pouvez vous connecter au «Malinka» en mode Bureau à distance à l'aide du programme Virtual Network Computing (VNC). La gestion s'effectue en transmettant les frappes sur les mouvements du clavier et de la souris d'un ordinateur à un autre et en relayant le contenu de l'écran via un réseau informatique. Le système VNC est indépendant de la plate-forme.Tout d'abord, installez le serveur VNC sur le Raspberry Pi à l'aide de la commande dans le terminal:$ sudo apt-get install tightvncserver
Une fois l'installation terminée, exécutez la commande:$ vncserver :1 -geometry 1280x800 -depth 16
Cette commande démarre le serveur VNC. Dans ce cas, cela signifie qu'une X-session virtuelle est en cours d'exécution (présentation virtuelle du bureau Raspberry Pi). Maintenant, après avoir démarré le client VNC et vous y être connecté, vous serez connecté à ce bureau virtuel.Paramètre: 1 définit le numéro de port sur lequel le processus VNC s'exécutera. Le paramètre de géométrie définit la résolution (dans ce cas, la taille) du bureau virtuel. Le paramètre de profondeur détermine la profondeur de couleur de l'affichage du bureau en bits (8, 16 et 24, la valeur par défaut est 16).Au premier démarrage, le serveur VNC vous demandera de saisir un mot de passe, qui vous sera demandé lors de la connexion au bureau distant.Installez maintenant le client VNC sur un ordinateur de bureau:$ sudo apt-get install xtightvncviewer
Nous sommes prêts à nous connecter au bureau à distance «Malinka»:$ vncviewer <raspi_ip>:1
et entrez le mot de passe.Une fenêtre s'ouvre avec une image de bureau similaire à celle-ci:
il convient de noter que chaque fois que vous redémarrez une framboise, le serveur VNC doit être redémarré.Connectez Arduino à Raspberry Pi
L'Arduino peut être connecté au Raspberry Pi aussi facilement qu'à un ordinateur ordinaire. Pour commencer, installez l'IDE Arduino sur le Raspberry Pi:$ sudo apt-get update
$ sudo apt-get install arduino
Lancez la commande Arduino IDE:$ arduino
L'Arduino IDE se connecte au Raspberry Pi via son câble de programmation USB. Une telle connexion nécessite que la console série soit déconnectée. Par défaut, le Raspberry Pi configure le port série (GPIO14-GPIO15) pour fournir des informations de démarrage. Il vous permet également de vous connecter à votre Raspberry Pi via un appareil connecté. Pour pouvoir programmer Arduino, vous devez désactiver cette option par défaut.Pour désactiver l'autorisation, modifiez le fichier système inittab:$ sudo nano /etc/inittab
Trouvez la ligne:T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
commentez-le:
Après cela, enregistrez et fermez le fichier.Lors du démarrage, le Raspberry Pi envoie des messages de débogage au port série. Cela peut être utile dans certains cas, mais nous devons maintenant désactiver cette fonctionnalité. Pour ce faire, modifiez le fichier système cmdline.txt:$ sudo nano /boot/cmdline.txt
Trouvez la ligne:dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
et supprimez le bloc de paramètres de la console pour obtenir une ligne comme celle-ci:dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
Enregistrez et fermez le fichier.Pour que les modifications soient appliquées par le système, vous devez redémarrer le Raspberry Pi:$ sudo reboot
Vous pouvez maintenant connecter la carte Arduino au port USB du Raspberry Pi, configurer l'IDE Arduino pour votre modèle de carte Arduino et y télécharger l'esquisse.Définition de ROS et de rosserial_arduino
J'ai choisi d'installer ROS Indigo. Les instructions d'installation de ROS Indigo sont décrites en détail sur la page officielle .Je recommande d'installer l'option d'installation ROS-Comm. D'après ma propre expérience, je peux dire que l'installation de l'option Bureau peut prendre très longtemps de l'ordre de midi.Après avoir installé ROS et résolu toutes les dépendances avec l'utilitaire rosdep, nous compilons simplement catkin_workspace:$ catkin_make
$ catkin_make install
Exécution de croquis rosserial_arduino sur Raspberry Pi
Maintenant, nous avons installé rosserial_arduino et nous pouvons l'exécuter:$ roslaunch rosserial_python serial_node.py /de/ttyACM0
Lors du démarrage du serveur rosserial, une erreur peut se produire: aucun module nommé diagnostic_msgs.msg.Pour résoudre le problème, vous devez télécharger à partir du référentiel ROS officiel la source des messages ROS - common_msgs qui ne sont pas dans l'installation, et le charger dans le dossier du package rosserial dans le dossier de l'espace de travail, puis compiler ROS:$ catkin_make install
Commentaire! Lors du chargement de croquis dans l'IDE Arduino, une erreur «erreur fatale: chaîne: aucune compilation de fichiers ou de répertoires terminée» peut se produire. Cela signifie que nous avons des types de messages ROS dans ros_lib, mais ils doivent également être compilés dans les types correspondants pour Arduino. Vous devez les compiler de cette façon:$ cd <sketchbook>/libraries
$ rm -rf ros_lib
$ rosrun rosserial_python make_libraries.py .
Vous pouvez maintenant travailler avec rosserial_arduino sur le Raspberry Pi de la même manière que sur un ordinateur ordinaire: créer des nœuds, vous abonner à des sujets, publier sur des sujets, etc.Vous pouvez connecter une caméra RPi Board au Raspberry Pi et utiliser le package cv_bridge ROS (l'interface ROS pour interagir avec OpenCV, la description peut être trouvée ici ) pour effectuer des tâches de vision par ordinateur.Au fait, mon robot est complètement armé:

Conclusion
J'espère que cet article sera une bonne entrée pour commencer à travailler avec ROS sur le Raspberry Pi et vous aurez vos propres idées pour utiliser le Raspberry Pi en conjonction avec Arduino ou d'autres microcontrôleurs de ce type. Je vous souhaite bonne chance dans vos expériences et projets et j'espère que je partagerai bientôt mes nouvelles idées dans les articles suivants!PS: Certaines instructions sont tirées du livre de V. Petin, «Electronics. Micro-ordinateurs Raspberry Pi. Guide pratique. "