Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Nox – Un robot errant dans la maison (ROS)

Nox est un robot sympa (et chronophage) qui utilise SLAM (ROS) avec un Kinect pour naviguer dans son environnement. Nox est un robot à entraînement différentiel construit à l'aide de ROS, Raspberry Pi et Arduino. J'ai commencé le projet en tant que base de robot avec une navigation de base que je pourrais ensuite utiliser pour d'autres choses, comme un aspirateur.

Cependant, j'ai rapidement décidé d'en faire un robot autonome avec un design approprié, car il fait souvent défaut dans les robots de bricolage. Dans son état actuel, le robot peut utiliser le SLAM (gmapping) pour créer une carte de son environnement (en utilisant la perception de profondeur Kinect pour détecter les murs et les obstacles) et se localiser dans la carte. Il peut planifier un chemin vers un objectif donné et y parvenir en évitant les obstacles.

Nox est alimenté par une batterie lithium-ion de 11,1 v et entraîné par deux moteurs. Le panneau avant peut être retiré pour changer la batterie. Un trou oblong et une vis le fixent et permettent de mettre des piles de différentes longueurs. J'ai mis une alarme de batterie avec un écran pour surveiller le niveau.


Les moteurs sont deux moteurs 12v DC (107 tr/min) de Banggood. Ils sont sympas, mais en fait, je n'ai pas besoin que le robot aille aussi vite et j'aurais pu échanger une partie de la vitesse contre des encodeurs plus précis.

Concernant la conception, la contrainte principale était d'avoir quelque chose qui s'intègre bien avec le Kinect, car je construisais le robot autour de lui. J'ai été inspiré par le look triangulaire de beaucoup d'objets de style moderne (et beaucoup par Deus Ex je dois l'admettre). Je voulais vraiment avoir un robot agréable et professionnel car c'est quelque chose qui manque souvent dans les robots de bricolage (mais ne vous inquiétez pas, le câblage est aussi désordonné qu'il devrait l'être). Passer quelques semaines sur le modèle CAO pour peaufiner tout était nécessaire.

Les lumières sur le côté sont recyclées à partir d'un bâton lumineux du Nouvel An que j'ai obtenu gratuitement et servent à indiquer les états du robot. Lorsque l'Arduino n'est pas connecté au maître ROS (ce qui indique que le programme du robot n'a pas encore démarré), les voyants clignotent trois fois de suite très rapidement. Lorsque vous conduisez, les feux ont un clignotement plus « respiration » et la vitesse de clignotement dépend de la vitesse du robot.

Pas de connexion clignotant

Clignote au ralenti

Structure

Comme indiqué ci-dessus, le robot est un robot à entraînement différentiel, les moteurs sont donc placés sur le même axe. La base est en bois avec deux roulettes pour le soutien. Au départ, j'avais prévu d'utiliser une roulette pour éviter l'hyperstatique, mais je n'ai pas pu en trouver une de bonne taille. Le reste de la structure est composé principalement de supports en bois et en métal, faciles à trouver dans n'importe quel magasin de bricolage. Sur la partie arrière des plaques du robot peuvent être empilées pour y mettre les cartes électroniques.


Le carter est fait d'une plaque de plastique noire, découpée et collée à la main (utilisera certainement l'impression 3D la prochaine fois).


Matériel

À l'intérieur, le contrôleur principal est un Raspberry Pi 3B exécutant Ubuntu et ROS. Le Raspberry est accessible depuis un ordinateur extérieur via WiFi et ssh pour donner l'ordre au robot. Le programme ROS effectue le calcul de l'odométrie, la planification de la navigation et la cartographie à l'aide du Kinect. Le Raspberry Pi envoie la commande de vitesse à un Arduino qui contrôle les deux moteurs avec un PID via un Adafruit Motor Shield. Il lit la valeur de l'encodeur, calcule la vitesse de chaque moteur et renvoie la valeur au Raspberry pour le calcul de l'odométrie. Arduino et Raspberry Pi sont connectés par USB et le programme Arduino agit comme un nœud ROS (recherchez rosserial pour plus d'informations).

J'ai utilisé différents types d'Arduino avant de m'installer pour le bon. Au début, j'ai utilisé l'Arduino Uno de base mais je n'avais pas assez de broches d'interruption pour lire les valeurs de l'encodeur (la meilleure méthode pour le faire avec Arduino). La vitesse et la précision étaient limitées car j'ai dû recourir à d'autres astuces de programmation pour que cela fonctionne. J'ai essayé d'utiliser un Arduino Leonardo mais le facteur limitant était la mémoire et j'ai finalement dû passer à un Arduino Mega 2560. Une bénédiction déguisée car il me reste beaucoup de mémoire et de broches pour ajouter de nouvelles fonctions maintenant.

Kinect 360 faisait partie du projet dès le départ, car je voulais faire du SLAM (Simultaneous Localization And Mapping) mais sans dépenser une tonne d'argent sur un lidar. Un kinect est essentiellement une caméra 3D à 25 € (bien sûr, ne vous attendez pas à la même précision qu'un Hokuyo) et, en plus du balayage de profondeur nécessaire pour le SLAM, peut également être utilisé pour la vision par ordinateur, dispose d'un accéléromètre et d'un microphone déployer. Tout cela étant pratique pour les étapes suivantes du projet.

Deux convertisseurs DC sont utilisés pour convertir la tension. Le moteur tourne directement avec la tension de la batterie (plus ou moins 11,1v). La partie commande (y compris Raspberry Pi, Arduino et encodeurs) fonctionne sur 5V converti à partir de la batterie. Le Kinect a besoin d'une tension stabilisée de 12 V et un convertisseur la fournit également à partir de la batterie.

Logiciel

Sur la partie logicielle, j'ai utilisé ROS Kinetic. Le seul nœud que j'ai vraiment écrit est le "nox_controller" qui, comme son nom ne l'implique pas vraiment, est utilisé pour calculer l'odométrie à partir des données Arduino (vitesse du moteur). Le modèle utilisé pour les calculs peut être trouvé dans l'article « On Differential Drive Robot Odmetry with Application to Path Planning » (j'ai en fait fait mes propres formules mais elles sont les mêmes, de toute façon l'article vaut la peine d'être lu). Les matrices de covariance sont données dans l'odométrie mais ne sont pas utilisées actuellement (cependant cela deviendra utile si j'intègre une IMU à l'odométrie).

Dans l'Arduino, le contrôle du moteur se fait via PWM. Un PID est censé gérer chaque vitesse moteur mais comme le rapport PWM/vitesse moteur est très linéaire j'ai obtenu un bon résultat avec une commande directe de la vitesse et désactivé le PID pour l'instant. Ne vous inquiétez pas, la mise en œuvre et l'étalonnage corrects du PID sont en cours.

Lire plus de détails :Nox - Un robot errant dans la maison (ROS)


Processus de fabrication

  1. Comment créer une plate-forme robotique Arduino+Raspberry Pi
  2. Robot utilisant Raspberry Pi &Bridge Shield
  3. Robot boîtier CD Raspberry Pi
  4. ANDY :un robot « humanoïde » polyvalent
  5. Robot d'alarme roulante
  6. Créer un robot Minecraft Creeper
  7. Robot autonome quadrupède JQR
  8. Archimedes :The AI ​​Robot Owl
  9. EMAR Mini – Robot d'assistance d'urgence