Robotique ESP32-CAM avec OpenCV : fonctionnement autonome et téléop avec contrôleur XBOX

Robotique ESP32-CAM avec OpenCV : fonctionnement autonome et téléop avec contrôleur XBOX

Dans cet article, nous voulons partager un travail développé par l’un de nos lecteurs qui montre comment utiliser les serveurs de streaming ESP32/ESP32-CAM dans des systèmes robotiques utilisant OpenCV ou OpenCV.js.

ESP32 Robotique ESP32-CAM avec OpenCV : fonctionnement autonome et téléop avec manette XBOX

Ce projet/tutoriel a été créé par Andrew R. Sass (l’un de nos lecteurs/disciples).

Ce billet est juste une introduction à son travail (Andrew Sass). Le travail complet est compilé dans un document PDF avec des descriptions complètes et des explications du code. Vous pouvez également avoir accès à tous les codes utilisés tout au long du journal. Vous pouvez accéder et télécharger tout son travail sur la page GitHub :

Andrew Sass a déjà écrit un tutoriel sur la détection et le suivi des couleurs OpenCV.js sur un serveur de streaming vidéo ESP32-CAM : ESP32-CAM Web Server with OpenCV.js : Color Detection and Tracking.

Introduction

L’ESP32-CAM peut servir de serveur de streaming vidéo pour différents clients. Dans son travail, il couvre l’ESP32-CAM agissant comme un serveur de streaming vidéo pour un client de navigateur et pour une fenêtre de client Python. Ensuite, il montre comment traiter la vidéo en utilisant OpenCV.js ou OpenCV pour obtenir une sortie pour le fonctionnement autonome et manuel de la robotique. De plus, il a également créé une interface utilisateur/contrôle à l’aide d’un contrôleur XBOX.

Serveur de streaming vidéo ESP32-CAM – Client de navigateur

Lorsque l’ESP32-CAM agit comme un serveur de streaming vidéo pour un client de navigateur, nous pouvons utiliser OpenCV.js sur le navigateur pour traiter l’image et renvoyer les résultats au serveur.

Serveur de streaming vidéo ESP32-CAM – Client Python

D’autre part, lorsque l’ESP32-CAM agit comme un serveur de streaming vidéo pour un client Python, nous avons accès à une bibliothèque de logiciels OpenCV plus étendue que celle actuellement disponible dans OpenCV.js, car OpenCV réside dans l’ordinateur portable des utilisateurs. contrairement à l’ESP32.

Cependant, contrairement au système de diffusion en continu du navigateur, la communication de données vers le serveur n’est pas disponible de manière inhérente dans le système de diffusion en continu Python. Étant donné que la communication vers le serveur est essentielle pour tout système robotique complet, une nouvelle méthode pour cela est présentée dans ce travail. Il est certes plus complexe, mais, espérons-le, équilibré par les avantages de la bibliothèque Python OpenCV mentionnée ci-dessus pour les utilisateurs non liés à une application de navigateur.

Description générale des systèmes

Voici une brève description picturale introductive du fonctionnement du système de diffusion en continu du navigateur.

Système de streaming du navigateur

Le serveur de navigation publie son adresse IP et est accessible à l’aide d’un navigateur Web. Après avoir appuyé sur le Piste de couleur sur l’écran Chrome, l’écran vidéo du client est visible ci-dessous.

Système de navigateur OpenCV ESP32-CAM

Le patch d’écran rouge ci-dessus montre des exemples de données de capteur transmises par le serveur ESP32 au client.

Le contrôleur XBOX transmet les données du joystick, du bouton, du déclencheur et du chapeau à l’ESP32. L’ESP32 est le frontal du Robot et envoie/reçoit des données au processeur principal du Robot. Ce mode, dans lequel un opérateur humain contrôle le robot, est appelé le Téléop Mode.

Lorsque le sélecteur de zone de liste situé sous le côté gauche de la vidéo est défini sur NON, la vue de l’image suivante s’affiche.

Opération téléop robotique ESP32-CAM avec manette XBOX

Il s’agit du mode autonome dans lequel le robot est sous le contrôle du programme. Dans ce mode, OpenCV (vision par ordinateur) est utilisé pour guider le robot. La vue en haut à gauche montre l’auteur portant un chapeau rouge. La vue en bas à droite montre un point blanc approximativement dans l’écran central inférieur. Ce point est mobile et sonde la position de l’écran où le programme peut mesurer le contenu RVB de l’image. Dans cet exemple, la sonde à point blanc a d’abord été déplacée vers le chapeau rouge où la mesure a été effectuée, puis ramenée à sa position initiale.

Les curseurs RVB ont été réglés sur la mesure RVB Red Hat. La vue en haut à droite montre l’image binaire correspondant à la gamme de couleurs définie par les curseurs. Le chapeau est la plus grande partie de l’image correspondant aux plages des curseurs. Lorsque le bouton Tracking est enfoncé, un rectangle de contour bleu entoure la plus grande portion de blanc, l’identifiant comme la cible. Les coordonnées du centre de gravité du rectangle bleu sont affichées à l’écran et transmises à l’ESP32 puis au processeur principal du robot pour le guidage autonome (voir image ci-dessous).

Un diagramme décrivant le diagramme du système de diffusion en continu du navigateur robotique est illustré ci-dessous.

Robotique ESP32-CAM avec OpenCV : comment ça marche

Pour une description complète du système, veuillez télécharger le document PDF complet.

Système de streaming Python

Le serveur de streaming ESP32-CAM (décrit dans l’article) publie son adresse IP immédiatement après le téléchargement.

Le programme client python utilise cette adresse IP et affiche la fenêtre python illustrée à gauche dans l’image ci-dessous.

Le programme du contrôleur XBOX (également décrit dans le document) utilise également cette adresse IP dans le port 82/ws pour afficher l’interface utilisateur graphique (GUI) illustrée à droite.

ESP32-CAM Système de diffusion en python OpenCV

La bande blanche affichant les données dans la fenêtre de gauche de la figure ci-dessus et les données blanches en bas de l’interface graphique sont des données échangées par les deux programmes. En d’autres termes, le contrôleur XBOX peut contrôler l’exécution du programme du client et les données du client peuvent être utilisées par le contrôleur XBOX et peuvent être transmises par le contrôleur au serveur ESP32.

Dans la figure ci-dessus, la manette XBOX commande au programme client d’identifier l’objet RED. Le programme client transmet alors la coordonnée centroïde de l’objet RED au contrôleur XBOX. Si l’opérateur humain met le contrôleur en mode autonome, les coordonnées du centroïde sont transmises au serveur, puis au processeur principal du robot à des fins de guidage.

Le diagramme du système de streaming Python est illustré ci-dessous.

Robotique ESP32 ESP32-CAM avec démonstration du contrôleur OpenCV XBOX

Pour une description complète du système, veuillez télécharger le document PDF complet.

Conclusion

Ce n’était qu’une description rapide des systèmes développés et décrits par Andrew Sass dans son article. Vous pouvez accéder à l’ensemble de son travail sur les liens suivants :

Toutes les questions doivent être postées sur sa page Github (Référentiel ESP32 Robot SystemsTutorial) afin que vous puissiez avoir la chance d’obtenir une réponse à votre question par Andrew.

Il avait déjà écrit un autre tutoriel sur la détection et le suivi des couleurs à l’aide d’OpenCV.js que vous pouvez consulter sur le lien suivant :

Nous espérons que vous avez trouvé ce projet utile.

Merci d’avoir lu.