Table des matières:

Bras robotique ROS MoveIt Partie 2 : Contrôleur de robot : 6 étapes
Bras robotique ROS MoveIt Partie 2 : Contrôleur de robot : 6 étapes

Vidéo: Bras robotique ROS MoveIt Partie 2 : Contrôleur de robot : 6 étapes

Vidéo: Bras robotique ROS MoveIt Partie 2 : Contrôleur de robot : 6 étapes
Vidéo: Часть 1. Учебное пособие по ROS. Моделирование роботизированной руки с использованием Gazebo, MoveIt и RViz (Kinetic & Melodic). 2024, Juillet
Anonim
Image
Image

github.com/AIWintermuteAI/ros-moveit-arm.git

Dans la partie précédente de l'article, nous avons créé des fichiers URDF et XACRO pour notre bras robotique et lancé RVIZ pour contrôler notre bras robotique dans un environnement simulé.

Cette fois, nous le ferons avec le vrai bras robotique ! Nous allons ajouter le préhenseur, écrire un contrôleur de robot et (facultatif) générer le solveur de cinématique inverse IKfast.

Géronimo !

Étape 1: Ajout de la pince

Ajout de la pince
Ajout de la pince
Ajout de la pince
Ajout de la pince
Ajout de la pince
Ajout de la pince

L'ajout d'une pince était un peu déroutant au début, j'ai donc sauté cette partie dans l'article précédent. Il s'est avéré que ce n'était pas si difficile après tout.

Vous devrez modifier votre fichier URDF pour ajouter des liens et des articulations de préhension.

Le fichier URDF modifié pour mon robot est joint à cette étape. Fondamentalement, cela suit la même logique que la partie bras, je viens d'ajouter trois nouveaux liens (claw_base, claw_r et claw_l) et trois nouvelles articulations (joint5 est fixe, et joint6, joint7 sont des articulations tournantes).

Après avoir modifié votre fichier URDF, vous devrez également mettre à jour le package généré par MoveIt et le fichier xacro à l'aide de l'assistant d'installation MoveIt.

Lancez l'assistant d'installation avec la commande suivante

roslaunch moveit_setup_assistant setup_assistant.launch

Cliquez sur Modifier la configuration MoveIt existante et choisissez le dossier contenant votre package MoveIt.

Ajoutez une nouvelle pince de groupe de planification (avec des liens et des articulations pour la pince) ainsi qu'un effecteur final. Mes paramètres sont dans les captures d'écran ci-dessous. Notez que vous ne choisissez pas le solveur cinématique pour la pince, ce n'est pas nécessaire. Générez le package et écrasez les fichiers.

Courir

faire des chatons

commande dans votre espace de travail catkin.

Bon, maintenant nous avons un bras avec une pince !

Étape 2: Construire le bras

Construire le bras
Construire le bras
Construire le bras
Construire le bras
Construire le bras
Construire le bras
Construire le bras
Construire le bras

Comme je l'ai mentionné précédemment, le modèle 3D du bras est réalisé par Juergenlessner, merci pour ce travail incroyable. Les instructions de montage détaillées peuvent être trouvées si vous suivez le lien.

J'ai dû modifier le système de contrôle cependant. J'utilise Arduino Uno avec Sensor shield pour contrôler les servos. Le blindage du capteur aide beaucoup à simplifier le câblage et facilite également l'alimentation externe des servos. J'utilise un adaptateur d'alimentation 12V 6A câblé via un module abaisseur (6V) à Sensor Shield.

Une note sur les servos. J'utilise des servos MG 996 HR achetés chez Taobao, mais la qualité est vraiment mauvaise. C'est certainement une imitation chinoise bon marché. Celui de l'articulation du coude n'a pas fourni assez de couple et a même commencé à fumer une fois sous une forte charge. J'ai dû remplacer le servo de coude par un MG 946 HR d'un fabricant de meilleure qualité.

Pour faire court, achetez des servos de qualité. Si de la fumée magique sort de vos servos, utilisez de meilleurs servos. 6V est une tension très sûre, ne l'augmentez pas. Cela n'augmentera pas le couple, mais peut endommager les servos.

Câblage des servos comme suit:

socle 2

épaule2 4épaule1 3

coude 6

pince 8

poignet 11

N'hésitez pas à le changer tant que vous vous souvenez également de changer le croquis Arduino.

Une fois que vous avez terminé avec le matériel, examinons la situation dans son ensemble !

Étape 3: Interface MoveIt RobotCommander

Interface MoveIt RobotCommander
Interface MoveIt RobotCommander

Et maintenant? Pourquoi avez-vous besoin de MoveIt et de ROS de toute façon ? Ne pouvez-vous pas simplement contrôler le bras via le code Arduino directement ?

Oui, vous pouvez.

D'accord, maintenant, que diriez-vous d'utiliser l'interface graphique ou le code Python/C++ pour fournir une pose de robot à laquelle accéder ? Arduino peut-il faire ça ?

Sorte de. Pour cela, vous devrez écrire un solveur de cinématique inverse qui prendra une pose de robot (coordonnées de translation et de rotation dans l'espace 3D) et la convertira en messages d'angle articulaire pour les servos.

Même si vous pouvez le faire vous-même, c'est un sacré travail à faire. Ainsi, MoveIt et ROS fournissent une interface agréable pour le solveur IK (cinématique inverse) pour faire tout le levage trigonométrique lourd pour vous.

Réponse courte: Oui, vous pouvez créer un simple bras robotique qui exécutera un croquis Arduino codé en dur pour passer d'une pose à une autre. Mais si vous souhaitez rendre votre robot plus intelligent et ajouter des capacités de vision par ordinateur, MoveIt et ROS sont la voie à suivre.

J'ai fait un schéma très simplifié expliquant le fonctionnement du framework MoveIt. Dans notre cas, cela va être encore plus simple, puisque nous n'avons pas de retour de nos servos et que nous allons utiliser le sujet /joint_states pour fournir au contrôleur de robot les angles des servos. Il ne nous manque qu'un seul composant qui est le contrôleur du robot.

Qu'est-ce qu'on attend? Écrivons quelques contrôleurs de robot, donc notre robot serait… vous savez, plus contrôlable.

Étape 4: Code Arduino pour le contrôleur de robot

Code Arduino pour contrôleur de robot
Code Arduino pour contrôleur de robot
Code Arduino pour contrôleur de robot
Code Arduino pour contrôleur de robot
Code Arduino pour contrôleur de robot
Code Arduino pour contrôleur de robot

Dans notre cas, Arduino Uno exécutant un nœud ROS avec rosserial sera le contrôleur du robot. Le sketch code Arduino est attaché à cette étape et également disponible sur GitHub.

Le nœud ROS s'exécutant sur Arduino Uno s'abonne essentiellement au sujet /JointState publié sur l'ordinateur exécutant MoveIt, puis convertit les angles d'articulation du tableau de radians en degrés et les transmet aux servos à l'aide de la bibliothèque Servo.h standard.

Cette solution est un peu bidon et pas comme on le fait avec des robots industriels. Idéalement, vous êtes censé publier la trajectoire de mouvement sur le sujet /FollowJointState, puis recevoir les commentaires sur le sujet /JointState. Mais dans notre bras, les servos de loisir ne peuvent pas fournir de retour, nous allons donc nous abonner directement au sujet /JointState, publié par le nœud FakeRobotController. Fondamentalement, nous supposerons que tous les angles que nous avons passés aux servos sont exécutés idéalement.

Pour plus d'informations sur le fonctionnement du rosserial vous pouvez consulter les tutoriels suivants

wiki.ros.org/rosserial_arduino/Tutoriels

Après avoir téléchargé le croquis sur Arduino Uno, vous devrez le connecter avec le câble série à l'ordinateur exécutant votre installation ROS.

Pour faire apparaître l'ensemble du système, exécutez les commandes suivantes

roslaunch my_arm_xacro demo.launch rviz_tutorial:=true

sudo chmod -R 777 /dev/ttyUSB0

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

Vous pouvez maintenant utiliser des marqueurs interactifs dans RVIZ pour déplacer le bras du robot vers une pose, puis appuyer sur Plan et Exécuter pour qu'il se déplace réellement dans la position.

La magie!

Nous sommes maintenant prêts à écrire du code Python pour notre test de rampe. Enfin, presque…

Étape 5: (Facultatif) Génération du plug-in IKfast

Par défaut, MoveIt suggère d'utiliser le solveur cinématique KDL, qui ne fonctionne pas vraiment avec moins de 6 bras DOF. Si vous suivez ce didacticiel de près, vous remarquerez que le modèle de bras dans RVIZ ne peut pas prendre certaines poses qui devraient être prises en charge par la configuration du bras.

La solution recommandée consiste à créer un solveur cinématique personnalisé à l'aide d'OpenRave. Ce n'est pas si difficile, mais vous devrez le construire et ses dépendances à partir de la source ou utiliser le conteneur docker, selon votre préférence.

La procédure est très bien documentée dans ce tutoriel. Il est confirmé qu'il fonctionne sur une machine virtuelle exécutant Ubuntu 16.04 et ROS Kinetic.

J'ai utilisé la commande suivante pour générer le solveur

openrave.py --database inversekinematics --robot=arm.xml --iktype=translation3d --iktests=1000

puis couru

rosrun moveit_kinematics create_ikfast_moveit_plugin.py test_robot arm my_arm_xacro ikfast0x10000004a. Translation3D.0_1_2_f3.cpp

pour générer le plug-in MoveIt IKfast.

L'ensemble de la procédure prend un peu de temps, mais pas très difficile si vous suivez attentivement le tutoriel. Si vous avez des questions sur cette partie, merci de me contacter en commentaire ou en MP.

Étape 6: le test de rampe

Le test de la rampe !
Le test de la rampe !
Le test de la rampe !
Le test de la rampe !

Nous sommes maintenant prêts à essayer le test de rampe, que nous exécuterons à l'aide de l'API Python ROS MoveIt.

Le code Python est attaché à cette étape et également disponible sur le référentiel github. Si vous n'avez pas de rampe ou si vous voulez essayer un autre test, vous devrez changer les poses du robot dans le code. Pour cela, exécutez d'abord

écho rostopique /rviz_moveit_motion_planning_display/robot_interaction_interactive_marker_topic/feedback

dans le terminal lorsque vous exécutez déjà RVIZ et MoveIt. Déplacez ensuite le robot avec des marqueurs interactifs vers la position souhaitée. Les valeurs de position et d'orientation seront affichées dans le terminal. Copiez-les simplement dans le code Python.

Pour exécuter le test de rampe

rosrun my_arm_xacro pick/pick_2.py

avec RVIZ et le nœud rosserial déjà en cours d'exécution.

Restez à l'écoute pour la troisième partie de l'article, où j'utiliserai une caméra stéréo pour la détection d'objets et exécuterai un pipeline de sélection et de placement pour des objets simples !

Conseillé: