Robot fonctionnant avec Arduino et python

J'ai fait un tel robot

Je voulais quelque chose pour étudier la vision par ordinateur, alors j'ai fabriqué un robot comme celui-ci. Il est lié à la vidéo YouTube, veuillez donc cliquer sur l'image. Vous pouvez voir comment cela fonctionne.

https://www.youtube.com/watch?v=hIaIxOBjJzQ

Contrôlez ce robot en utilisant python via Wi-Fi. Il s'agit d'une tentative d'acquérir des images de caméra, des images RVB-D, etc., d'analyser les images et de les déplacer.

Détails côté robot

En fabriquant le robot, j'ai démonté et modifié un aspirateur robot comme Rumba comme base et je l'ai utilisé. Il s'agit d'un robot aspirateur à bas prix vendu à Nitori. Si c'est si bon marché, vous pouvez le démonter et le remodeler. En plus de cela, il y a un bras de robot, un Arduino, une caméra RGB-D et un petit PC avec un processeur Intel Atom qui contrôle le matériel installé dans le robot. Arduino utilise MEGA 2560 car il souhaite contrôler un grand nombre de servos. UNO, que je vois souvent, est un peu insuffisant, et je me demande si c'est déchirant compte tenu de l'expansion future. Le petit PC a un numéro de modèle de DG-M01IW, et il a une batterie qui dure 13 heures même si elle est de la taille d'un livre de poche. Intégré. C'est le meilleur match pour ce robot, et j'en ai acheté 2.

Le logiciel côté robot est à peu près divisé en un logiciel de type micrologiciel installé sur Arduino et un logiciel de type serveur qui configure un serveur HTTP installé sur un PC (Windows 10).

Arduino Arduino a également besoin d'alimentation. Cela utilise une batterie 7,2 V disponible dans le commerce pour les contrôleurs radio.

La servocommande qui prend en charge le bras du robot et la caméra RGB-D est la commande PWM par Arduino. Pour le moteur utilisé pour déplacer le robot, un contrôleur de moteur contrôlé par I2C a été fixé à l'extérieur et un circuit a été construit pour contrôler le moteur du robot aspirateur via I2C. Cela permet au robot de se déplacer d'avant en arrière, de gauche à droite et de tourner.

La communication série avec le PC est effectuée par UART. Du côté Arduino, nous avons préparé les protocoles suivants pour le contrôle et l'acquisition d'informations.

En émettant le protocole ci-dessus à partir du PC via le port série, il est possible de contrôler librement le servo et d'acquérir des informations. Par exemple, en transmettant «a0 + 90», le servo # 0 peut être déplacé à un angle de + 90 °, ou par «m + 255 + 255», les moteurs mobiles gauche et droit peuvent être tournés dans le sens avant. Bien sûr, des détails tels que le contrôle de la vitesse des servos sont effectués du côté Arduino.

PC (DG-M01IW) Le PC dispose d'une batterie intégrée, il fonctionne donc sans batterie externe. Le système d'exploitation de base utilise Windows 10 Home préinstallé tel quel. Arduino, caméra RVB-D, caméra à l'extrémité du bras du robot, etc. sont connectés via USB. De plus, comme Bluetooth et Wi-Fi sont naturellement intégrés, le contrôle du réseau basé sur le Wi-Fi n'est possible qu'avec ce PC.

La communication avec Arduino est effectuée à l'aide de la communication série UART. Côté PC, les tâches suivantes sont les tâches principales.

En fonction de l'URL reçue côté serveur HTTP, l'image de la caméra est renvoyée et le servo est contrôlé via Arduino. Par exemple, renvoyez image / jpeg pour une requête GET pour http: // .... / sensor / color, ou pour une requête GET pour http: // .... / arm0? Cmd = ... Déplace le bras du robot en fonction du paramètre cmd.

En bref, c'est le travail du PC d'interpréter la requête reçue par HTTP, d'envoyer une commande à Arduino telle quelle et de renvoyer les informations image / profondeur. Ce PC est suffisamment petit pour être monté sur un robot et est alimenté par batterie, il n'effectue donc pas de calculs qui augmentent autant que possible la charge du processeur. Dans ce domaine, je pense que c'est un travail qui peut être fait même avec Raspberry Pi, mais de manière inattendue, la bande autour de l'USB devient un problème, en particulier pour les caméras RGB-D, Raspberry Pi est une charge lourde.

Le serveur HTTP a été implémenté en C ++ après de nombreux essais et erreurs. La raison en est la suivante.

En fait, si le système d'exploitation est basé sur Linux, je pense qu'il serait plus facile et plus rapide de le faire même s'il était basé sur C / C ++. Surtout autour de HTTP. Cependant, c'était un peu gênant d'installer Linux sur un mini PC équipé d'un processeur Intel Atom (*), j'ai donc abandonné et développé celui-ci sur Windows 10. (Mais grâce à cela, il a peut-être été plus facile d'utiliser Visual Studio pour le débogage, etc.)

*: Juste parce que je n'ai pas trouvé de distribution Linux prenant en charge la version 32 bits du démarrage EFI, je ne voulais pas avoir de difficultés ici ... j'ai pensé. Je voulais vraiment inclure Ubuntu.

Logique d'analyse d'image

Jusqu'à ce point, le robot peut être contrôlé complètement sans fil via le réseau Wi-Fi, et le côté qui contrôle le robot par analyse d'image n'est lié à aucun type de système d'exploitation ou langue.

Mon PC principal est Mac Book Air Mid 2012, donc je veux vraiment y aller avec un Mac. Donc, je pense à utiliser numpy, OpenCV 2.x, (+ TensorFlow), etc. basé sur python. Requests est disponible pour les relations HTTP.

Actuellement, c'est comme rechercher un objet rouge et le poursuivre avec la méthode décrite dans Qiita: "Reconnaissons les objets rouges avec python". Je construis la logique. Finalement, je prévois de l'amener au point où je peux le saisir de manière autonome avec le bras du robot.

Je voudrais utiliser pleinement la méthode de regroupement d'images en utilisant les données de profondeur obtenues à partir de la caméra RVB-D et le traitement des groupes de points à l'aide de la bibliothèque de nuages de points. J'ai implémenté diverses logiques de ce type basées sur C ++ / Objective-C, mais je suis impressionné par la puissance destructrice de python + numpy chaque jour. J'aurais aimé être passé à python + numpy plus tôt.

À partir de maintenant, tout en portant la logique implémentée jusqu'à présent sur python, je prévois de les utiliser pour augmenter la profondeur de contrôle du robot. J'aimerais écrire ces articles lorsque j'obtiendrai des résultats.

Recommended Posts

Robot fonctionnant avec Arduino et python
Essayez d'exécuter Google Chrome avec Python et Selenium
Programmation avec Python et Tkinter
Chiffrement et déchiffrement avec Python
Python et matériel - Utilisation de RS232C avec Python -
Essayez d'exécuter Python avec Try Jupyter
python avec pyenv et venv
Fonctionne avec Python et R
Communiquez avec FX-5204PS avec Python et PyUSB
Briller la vie avec Python et OpenCV
Installez Python 2.7.9 et Python 3.4.x avec pip.
Réseau neuronal avec OpenCV 3 et Python 3
Modulation et démodulation AM avec python
Scraping avec Node, Ruby et Python
Grattage avec Python, Selenium et Chromedriver
Grattage avec Python et belle soupe
Encodage et décodage JSON avec python
Introduction à Hadoop et MapReduce avec Python
[GUI en Python] PyQt5-Glisser-déposer-
Lire et écrire NetCDF avec Python
J'ai joué avec PyQt5 et Python3
Lire et écrire du CSV avec Python
Intégration multiple avec Python et Sympy
J'ai essayé d'exécuter prolog avec python 3.8.2.
Coexistence de Python2 et 3 avec CircleCI (1.0)
Jeu Sugoroku et jeu d'addition avec Python
Modulation et démodulation FM avec Python
[Apprentissage automatique] Essayez d'exécuter Spark MLlib avec Python et faites des recommandations
IME On / Off est affiché par LED en coopération avec Python et Arduino
Opérabilité du bras et du robot mobile Dessinez une ellipse avec python
Communiquez entre Elixir et Python avec gRPC
Construction de pipeline de données avec Python et Luigi
Calculer et afficher le poids standard avec python
Surveiller les pannes de Mojo avec Python et Skype
Modulation et démodulation FM avec Python Partie 3
[Automation] Manipulez la souris et le clavier avec Python
Authentification sans mot de passe avec RDS et IAM (Python)
Installation de Python et gestion des packages avec pip
Utilisation de Python et MeCab avec Azure Databricks
POSTER diversement avec Python et recevoir avec Flask
Capturer des images avec Pupil, python et OpenCV
Fractal pour faire et jouer avec Python
Un mémo contenant Python2.7 et Python3 dans CentOS
Utilisez PIL ou Pillow avec Cygwin Python
Créer et décrypter du code César avec python
CentOS 6.4, Python 2.7.3, Apache, mod_wsgi, Django
Lire et écrire des fichiers JSON avec Python
Gérer les "années et mois" en Python
[Débutant] Installation de Python et exécution de programmes (Windows)
J'ai installé et utilisé Numba avec Python3.5
Analyse des tweets avec Python, Mecab et CaboCha
Lier Python et JavaScript avec le notebook Jupyter
Surveillance du trafic avec Kibana, ElasticSearch et Python
Modulation et démodulation FM avec Python Partie 2
Crypter avec Ruby (Rails) et décrypter avec Python
Téléchargez facilement des mp3 / mp4 avec python et youtube-dl!
Faites fonctionner des appareils électroménagers avec Python et IRKit
Nettoyer l'environnement python avec Pythonz et virtualenv
Pratiquer le web scraping avec Python et Selenium