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.
Caractéristiques
Les moteurs gauche et droit tournent d'avant en arrière et de gauche à droite
5 Bras de robot équipé d'un servo
Une petite caméra d'un diamètre de 8 mm est montée sur la pointe du bras du robot.
2 capteur Primesense PS1080 (caméra RGB-D) qui oscille avec un servo
Pièce matérielle contrôlée par Arduino MEGA 2560
Equipé d'un petit PC (Windows 10) avec processeur Intel Atom, le serveur HTTP fonctionne
Contrôle à distance des robots via le protocole HTTP
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.
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.
socket ()
ou ʻaccept () `).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.
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.