Table des matières:

Construisez votre propre robot Turtlebot ! : 7 étapes
Construisez votre propre robot Turtlebot ! : 7 étapes

Vidéo: Construisez votre propre robot Turtlebot ! : 7 étapes

Vidéo: Construisez votre propre robot Turtlebot ! : 7 étapes
Vidéo: Часть 7: Сборка бота для собаки: набор обучающих игрушек для робота на солнечной батарее 14 в 1/Соберите своего собственного робота 2024, Novembre
Anonim
Construisez votre propre robot Turtlebot !
Construisez votre propre robot Turtlebot !
Construisez votre propre robot Turtlebot !
Construisez votre propre robot Turtlebot !
Construisez votre propre robot Turtlebot !
Construisez votre propre robot Turtlebot !

ÉDITER:

De plus amples informations relatives au logiciel et au contrôle sont disponibles sur ce lien:

hackaday.io/project/167074-build-your-own-turtlebot-3-backbone

Le lien direct vers le code est:

github.com/MattMgn/foxbot_core

Pourquoi ce projet ?

Turtlebot 3 est la plate-forme idéale pour approfondir l'électronique, la robotique et même l'IA ! Je vous propose de construire votre propre Turtlebot étape par étape avec des composants abordables sans sacrifier les fonctionnalités et les performances. Avec une idée en tête: garder le meilleur du robot initial, sa modularité, sa simplicité et le grand nombre de packages pour la navigation autonome et l'IA de la communauté open source.

Ce projet est l'occasion pour les débutants d'acquérir des notions d'électronique, de mécanique et d'informatique, et pour les plus expérimentés de se doter d'une plateforme performante pour tester et développer des algorithmes d'intelligence artificielle.

Que découvrirez-vous dans ce projet ?

Vous êtes sur le point de découvrir quelles pièces mécaniques et électroniques essentielles doivent être conservées du bot d'origine pour garantir une compatibilité totale.

L'ensemble du processus de construction sera détaillé: allant de l'impression de pièces 3D, l'assemblage et les différents composants, la soudure et l'intégration de l'électronique jusqu'à la compilation du code sur Arduino. Cette instructable se terminera sur un exemple de « hello world » pour vous familiariser avec ROS. Si quelque chose ne vous semble pas clair, n'hésitez pas à poser des questions !

Fournitures

Électronique:

1 x ordinateur monocarte pour exécuter ROS, pourrait être un Raspberry Pi ou un Jetson Nano par exemple

1 x Arduino DUE, vous pouvez également utiliser un UNO ou un MEGA

1 x carte Proto qui s'adapte au brochage Arduino DUE disponible ici

2 moteurs 12V DC avec encodeurs (option 100 RPM)

1 x pilote de moteur L298N

2 régulateurs 5V

1 x Batterie (batterie LiPo 3S/4S par exemple)

2 interrupteurs marche/arrêt

2 LED

2 résistances 470kOhm

Connecteurs JST 3 x 4 broches

1 x câble USB (au moins un entre le SBC et l'Arduino)

Capteurs:

1 x capteur de courant (facultatif)

1 x 9 degrés de liberté IMU (facultatif)

1 x LIDAR (facultatif)

Châssis:

16 x plaques modulaires Turtlebot (qui peuvent également être imprimées en 3D)

2 x roues diamètre 65 mm (option largeur 6 mm)

4 x entretoises en nylon 30 mm (facultatif)

20 x inserts M3 (en option)

Autres:

Fils

Vis et inserts M2.5 et M3

Imprimante 3D ou quelqu'un qui peut imprimer les pièces pour vous

Une perceuse à main avec un ensemble de forets comme celui-ci

Étape 1: Description

La description
La description
La description
La description

Ce robot est un simple entraînement différentiel qui utilise 2 roues montées directement sur leur moteur et une roulette qui est placée à l'arrière pour empêcher le robot de tomber. Le robot est divisé en deux couches:

la couche inférieure: avec le groupe de propulsion (batterie, contrôleur de moteur et moteurs), et l'électronique « bas niveau »: microcontrôleur Arduino, régulateur de tension, commutateurs…

la couche supérieure: avec l'électronique « de haut niveau », à savoir l'ordinateur à carte unique et le LIDAR

Ces couches sont liées par des pièces imprimées et des vis pour assurer la robustesse de la structure.

Schéma électronique

Le schéma peut sembler un peu brouillon. C'est un dessin schématique et il ne représente pas tous les fils, connecteurs et la proto-carte mais il peut être lu comme suit:

Une batterie 3S Litihum Ion Polymer d'une capacité de 3000mAh alimente le premier circuit, elle alimente à la fois la carte contrôleur de moteur (L298N) et un premier régulateur 5V pour les encodeurs de moteur et Arduino. Ce circuit est activé via un interrupteur avec une LED qui indique son état ON/OFF.

La même batterie alimente un deuxième circuit, la tension d'entrée est convertie en 5V pour alimenter l'ordinateur monocarte. Ici aussi, le circuit est activé via un interrupteur et une LED.

Des capteurs supplémentaires comme un LIDAR ou une caméra peuvent ensuite être ajoutés directement sur le Raspberry Pi via USB ou le port CSI.

Design mécanique

Le châssis du robot est composé de 16 pièces identiques qui forment 2 couches carrées (largeur 28cm). Les nombreux trous permettent de monter des pièces supplémentaires là où vous en avez besoin et offrent une conception modulaire complète. Pour ce projet, j'ai décidé d'obtenir les plaques originales TurtleBot3 mais vous pouvez également les imprimer en 3D car leur conception est open source.

Étape 2: Assemblage du bloc moteur

Assemblage du bloc moteur
Assemblage du bloc moteur
Assemblage du bloc moteur
Assemblage du bloc moteur
Assemblage du bloc moteur
Assemblage du bloc moteur

Préparation moteur

La première étape consiste à ajouter du ruban en mousse de 1 mm d'épaisseur autour de chaque moteur pour éviter les vibrations et le bruit lorsque le moteur tourne.

Pièces imprimées

Le support du moteur se compose de deux parties qui saisissent le moteur comme un étau. 4 vis réalisées pour serrer le moteur dans le support.

Chaque support est composé de plusieurs trous qui accueillent des inserts M3 à monter sur la structure. Il y a plus de trous que nécessaire, les trous supplémentaires pourraient éventuellement être utilisés pour monter une pièce supplémentaire.

Paramètres de l'imprimante 3D: toutes les pièces sont imprimées avec les paramètres suivants

  • buse de 0,4 mm de diamètre
  • 15% de remplissage de matériau
  • couche de 0,2 mm de hauteur

Roue

Les roues choisies sont recouvertes de caoutchouc pour maximiser l'adhérence et assurer des conditions de roulement sans glissement. Une vis de serrage maintient la roue montée sur l'arbre moteur. Le diamètre de la roue doit être suffisamment grand pour franchir les marches mineures et les irrégularités du sol (ces roues ont un diamètre de 65 mm).

Fixation

Lorsque vous avez terminé avec un bloc moteur, répétez les opérations précédentes puis fixez-les simplement dans la couche avec des vis M3.

Étape 3: Commutateurs et préparation des câbles

Commutateurs et préparation des câbles
Commutateurs et préparation des câbles
Commutateurs et préparation des câbles
Commutateurs et préparation des câbles
Commutateurs et préparation des câbles
Commutateurs et préparation des câbles

Préparation du câble moteur

Généralement, le moteur-encodeur est livré avec un câble comprenant d'un côté un connecteur à 6 broches qui relie l'arrière du PCB de l'encodeur, et des fils nus de l'autre côté.

Vous avez la possibilité de les souder directement sur votre proto-carte ou même votre Arduino, mais je vous recommande d'utiliser à la place des embases à broches femelles et des connecteurs JST-XH. Ainsi vous pourrez les brancher/débrancher sur votre proto-board et faciliter votre montage.

Astuces: vous pouvez ajouter une tresse de gaine extensible autour de vos fils et des morceaux de gaine thermorétractable près des connecteurs, vous obtiendrez ainsi un câble "propre".

Interrupteur et LED

Pour activer les deux circuits d'alimentation, préparez 2 câbles LED et interrupteurs: d'abord soudez une résistance de 470kOhm sur l'une des broches LED, puis soudez la LED sur l'une des broches interrupteur. Ici aussi, vous pouvez utiliser un morceau de tube thermorétractable pour cacher la résistance à l'intérieur. Attention à bien souder la LED dans le bon sens ! Répétez cette opération pour obtenir deux câbles interrupteur/led.

Assemblée

Assemblez les câbles précédemment réalisés sur la pièce imprimée en 3D correspondante. Utilisez un écrou pour maintenir l'interrupteur, les LED ne nécessitent pas de colle, juste assez de force pour l'insérer dans le trou.

Étape 4: Câblage des cartes électroniques

Câblage de cartes électroniques
Câblage de cartes électroniques
Câblage de cartes électroniques
Câblage de cartes électroniques
Câblage de cartes électroniques
Câblage de cartes électroniques

Disposition des planches

Une carte proto adaptée à la disposition de la carte Arduino est utilisée pour réduire le nombre de fils. Sur le dessus de la proto-carte, le L298N est empilé avec un en-tête femelle Dupont (les Dupont sont des en-têtes « de type Arduino »).

Préparation L298N

À l'origine, la carte L298N n'est pas livrée avec l'en-tête Dupont mâle correspondant, vous devez ajouter une rangée de 9 broches sous la carte. Vous devez réaliser 9 trous avec un foret de 1mm de diamètre en parallèle des trous existants comme vous pouvez le voir sur la photo. Reliez ensuite les broches correspondantes des 2 rangées avec des matériaux de soudure et des fils courts.

Brochage L298N

Le L298N est composé de 2 canaux permettant le contrôle de la vitesse et de la direction:

direction via 2 sorties numériques, appelées IN1, IN2 pour le premier canal, et IN3 et IN4 pour le second

vitesse à travers 1 sorties numériques, appelées ENA pour le premier canal et ENB pour le second

J'ai choisi le brochage suivant avec l'Arduino:

moteur gauche: IN1 sur la broche 3, IN2 sur la broche 4, ENA sur la broche 2

moteur droit: IN3 sur la broche 5, IN4 sur la broche 6, ENB sur la broche 7

Régulateur 5V

Même si le l298N est normalement capable de fournir du 5V, j'ajoute quand même un petit régulateur. Il alimente l'Arduino via le port VIN et les 2 encodeurs sur les moteurs. Vous pouvez sauter cette étape en utilisant directement le régulateur L298N 5V intégré.

Connecteurs JST et brochage de l'encodeur

Utilisez des adaptateurs de connecteur JST-XH femelle 4 broches, chaque connecteur est alors relié à:

  • 5V du régulateur
  • un sol
  • deux ports d'entrée numérique (par exemple: 34 et 38 pour l'encodeur droit et 26 et 30 pour le gauche)

I2C supplémentaire

Comme vous l'avez peut-être remarqué, il y a un connecteur JST 4 broches supplémentaire sur la carte proto. Il est utilisé pour connecter un périphérique I2C comme un IMU, vous pouvez faire de même et même ajouter votre propre port.

Étape 5: Groupe moteur et Arduino sur la couche inférieure

Groupe moteur et Arduino sur la couche inférieure
Groupe moteur et Arduino sur la couche inférieure
Groupe moteur et Arduino sur la couche inférieure
Groupe moteur et Arduino sur la couche inférieure
Groupe moteur et Arduino sur la couche inférieure
Groupe moteur et Arduino sur la couche inférieure

Fixation des blocs moteur

Une fois la couche inférieure assemblée avec les 8 plaques du Turtlebot, il suffit d'utiliser 4 vis M3 directement dans les inserts pour maintenir les blocs moteurs. Ensuite, vous pouvez brancher les fils d'alimentation du moteur aux sorties L298N et les câbles précédemment fabriqués aux connecteurs JST de la carte proto.

Distribution d'énergie

La distribution de puissance est simplement réalisée avec un bornier barrière. D'un côté de la barrière, un câble avec une prise femelle XT60 est vissé pour se connecter à la batterie LiPo. De l'autre côté, nos deux câbles LED/interrupteur préalablement soudés sont vissés. Ainsi, chaque circuit (Moteur et Arduino) pourrait être activé avec son propre interrupteur et la LED verte correspondante.

Gestion des câbles

Rapidement vous allez devoir faire face à beaucoup de câbles ! Pour réduire l'aspect désordonné, vous pouvez utiliser la 'table' préalablement imprimée en 3D. Sur la table, maintenez vos cartes électroniques avec du ruban adhésif double face, et sous la table laissez passer les fils librement.

Entretien de la batterie

Pour éviter l'éjection de la batterie lors de la conduite de votre robot, vous pouvez simplement utiliser un élastique pour cheveux.

Roulette

Pas vraiment une roulette mais une simple demi-sphère fixée avec 4 vis sur la couche inférieure. Il suffit d'assurer la stabilité du robot.

Étape 6: Ordinateur monocarte et capteurs sur la couche supérieure

Ordinateur monocarte et capteurs sur la couche supérieure
Ordinateur monocarte et capteurs sur la couche supérieure
Ordinateur monocarte et capteurs sur la couche supérieure
Ordinateur monocarte et capteurs sur la couche supérieure
Ordinateur monocarte et capteurs sur la couche supérieure
Ordinateur monocarte et capteurs sur la couche supérieure

Quel ordinateur monocarte choisir ?

Je n'ai pas besoin de vous présenter le fameux Raspberry Pi, son nombre de cas d'utilisation dépasse largement le domaine de la robotique. Mais il existe un challenger beaucoup plus puissant pour le Raspberry Pi que vous pourriez ignorer. En effet le Jetson Nano de Nvidia embarque une puissante carte graphique 128 cœurs en plus de son processeur. Cette carte graphique particulière a été développée pour accélérer les tâches de calcul coûteuses telles que le traitement d'images ou l'inférence de réseau neuronal.

Pour ce projet j'ai choisi le Jetson Nano et vous pouvez trouver la pièce 3D correspondante parmi les fichiers joints, mais si vous souhaitez partir avec le Raspberry Pi il existe de nombreux cas imprimables ici.

Régulateur 5V

Quelle que soit la carte que vous avez décidé d'apporter sur votre robot, vous avez besoin d'un régulateur 5V. Le dernier Raspberry Pi 4 nécessite 1.25A max mais Jetson Nano nécessite jusqu'à 3A en stress donc j'ai opté pour le Pololu 5V 6A pour avoir une réserve de marche pour les futurs composants (capteurs, lumières, steppers…), mais n'importe quel 5V 2A pas cher devrait faire l'affaire le travail. Le Jetson utilise un canon DC de 5,5 mm et le Pi un micro USB, saisissez le câble correspondant et soudez-le à la sortie du régulateur.

Disposition LIDAR

Le LIDAR utilisé ici est le LDS-01, il existe divers autres LIDAR 2D qui pourraient être utilisés comme les LIDAR RPLidar A1/A2/A3, YDLidar X4/G4 ou encore les LIDAR Hokuyo. La seule exigence est qu'il doit être branché via USB et être placé au centre au-dessus de la structure. En effet si le LIDAR n'est pas bien centré, la carte créée par l'algorithme SLAM peut décaler la position estimée des murs et obstacles par rapport à leur position réelle. De plus, si des obstacles du robot traversent le faisceau laser, cela réduira la portée et le champ de vision.

Montage LIDAR

Le LIDAR est monté sur une pièce imprimée en 3D qui suit sa forme, la pièce elle-même est maintenue sur une plaque rectangulaire (en fait en contreplaqué sur la photo mais pourrait également être imprimée en 3D). Ensuite, une pièce adaptatrice permet de fixer l'ensemble sur la plaque supérieure du Turtlebot avec des entretoises en nylon.

Caméra comme capteur supplémentaire ou remplacement LIDAR

Si vous ne voulez pas dépenser trop d'argent dans un LIDAR (qui coûte environ 100$), optez pour une caméra: il existe aussi des algorithmes SLAM qui ne fonctionnent qu'avec une caméra RVB monoculaire. Les deux SBC acceptent les caméras USB ou CSI.

De plus, la caméra vous permettra d'exécuter des scripts de vision par ordinateur et de détection d'objets !

Assemblée

Avant de fermer le robot, faites passer les câbles dans les plus gros trous de la plaque supérieure:

  • le câble correspondant du régulateur 5V à votre SBC
  • le câble USB du port de programmation de l'Arduino DUE (le plus proche du barillet DC) à un port USB de votre SBC

Maintenez ensuite la plaque supérieure en position avec une dizaine de vis. Votre robot est maintenant prêt à être programmé, BIEN FAIT !

Étape 7: Faites bouger les choses

Compiler l'Arduino

Ouvrez votre IDE Arduino préféré et importez le dossier du projet appelé own_turtlebot_core, puis sélectionnez votre carte et le port correspondant, vous pouvez vous référer à cet excellent tutoriel.

Ajuster les paramètres de base

Le projet est composé de deux fichiers, et l'un doit être adapté à votre robot. Ouvrons donc own_turtlebot_config.h, et découvrons quelles lignes nécessitent notre attention:

#define ARDUINO_DUE // ** COMMENTEZ CETTE LIGNE SI VOUS N'UTILISEZ PAS DE DUE **

Doit être utilisé uniquement avec Arduino DUE, sinon commenter la ligne.

#define RATE_CONTROLLER_KP 130.0 // ** AJUSTER CETTE VALEUR **

#define RATE_CONTROLLER_KD 5000000000000.0 // ** REGLER CETTE VALEUR ** #define RATE_CONTROLLER_KI 0.00005 // ** REGLER CETTE VALEUR **

Ces 3 paramètres correspondent aux gains du régulateur de débit utilisés par le PID pour maintenir la vitesse souhaitée. En fonction de la tension de la batterie, de la masse du robot, du diamètre des roues et de l'engrenage mécanique de votre moteur, vous devrez adapter leurs valeurs. Le PID est un contrôleur classique et vous ne serez pas détaillé ici mais ce lien devrait vous donner suffisamment d'entrées pour régler le vôtre.

/* Définir les broches */

// moteur A (droit) octet const motorRightEncoderPinA = 38; // ** MODIFIER AVEC VOTRE PIN NB ** octet const motorRightEncoderPinB = 34; // ** MODIFIER AVEC VOTRE PIN NB ** const byte enMotorRight = 2; // ** MODIFIER AVEC VOTRE PIN NB ** const byte in1MotorRight = 4; // ** MODIFIER AVEC VOTRE PIN NB ** const byte in2MotorRight = 3; // ** MODIFIER AVEC VOTRE PIN NB ** // moteur B (gauche) octet const motorLeftEncoderPinA = 26; // ** MODIFIER AVEC VOTRE PIN NB ** octet const motorLeftEncoderPinB = 30; // ** MODIFIER AVEC VOTRE PIN NB ** const byte enMotorLeft = 7; // ** MODIFIER AVEC VOTRE PIN NB ** octet const in1MotorLeft = 6; // ** MODIFIER AVEC VOTRE PIN NB ** const byte in2MotorLeft = 5; // ** MODIFIER AVEC VOTRE PIN NB **

Ce bloc définit le brochage entre le L298N et l'Arduino, modifiez simplement le numéro de broche pour qu'il corresponde au vôtre. Lorsque vous avez terminé avec le fichier de configuration, compilez et téléchargez le code !

Installer et configurer ROS

Une fois cette étape franchie, les instructions sont exactement les mêmes que celles détaillées sur l'excellent manuel de TurtleBot3, il faut suivre scrupuleusement

Bravo TurtleBot 3 est maintenant à vous et vous pouvez exécuter tous les packages et tutoriels existants avec ROS.

D'accord mais qu'est-ce que ROS ?

ROS signifie Robots Operating System, cela peut sembler assez complexe au premier abord mais ce n'est pas le cas, imaginez simplement un moyen de communication entre le matériel (capteurs et actionneurs) et le logiciel (algorithmes de navigation, de contrôle, de vision par ordinateur…). Par exemple, vous pouvez facilement échanger votre LIDAR actuel avec un autre modèle sans interrompre votre configuration, car chaque LIDAR publie le même message LaserScan. ROS est largement utilisé est la robotique, Exécutez votre premier exemple

L'équivalent 'hello world' pour ROS consiste à téléopérer votre robot via l'ordinateur distant. Ce que vous voulez faire, c'est envoyer des commandes de vitesse pour faire tourner les moteurs, les commandes suivent ce tuyau:

  • un nœud Turtlebot_teleop, s'exécutant sur l'ordinateur distant, publie un sujet "/cmd_vel" incluant un message Twist
  • ce message est transmis via le réseau de messages ROS au SBC
  • un nœud série permet de recevoir le "/cmd_vel" sur l'Arduino
  • l'Arduino lit le message et définit le taux angulaire sur chaque moteur pour correspondre à la vitesse linéaire et angulaire souhaitée du robot

Cette opération est simple et peut être réalisée en exécutant les lignes de commande listées ci-dessus ! Si vous voulez des informations plus détaillées, regardez simplement la vidéo.

[SBC]

rosace

[SBC]

rosrun rosserial_python serial_node.py _port:=/dev/ttyACM0 _baud:=115200

[Ordinateur distant]

exporter TURTLEBOT3_MODEL=${TB3_MODEL}

roslaunch Turtlebot3_teleop Turtlebot3_teleop_key.launch

Pour aller plus loin

Vous devez savoir une dernière chose avant d'essayer tous les exemples officiels, dans le manuel à chaque fois que vous rencontrez cette commande:

roslaunch Turtlebot3_bringup Turtlebot3_robot.launch

vous devez plutôt exécuter cette commande sur votre SBC:

rosrun rosserial_python serial_node.py _port:=/dev/ttyACM0 _baud:=115200

Et si vous avez un LIDAR exécutez la commande associée sur votre SBC, dans mon cas je lance un LDS01 avec la ligne ci-dessous:

roslaunch hls_lfcd_lds_driver hlds_laser.launch

Et c'est tout, vous avez définitivement construit votre propre Turtlebot:) Vous êtes prêt à découvrir les fantastiques capacités de ROS, et à coder des algorithmes de vision et d'apprentissage automatique.

Conseillé: