1. Accueil
  2. Docs
  3. Niryo un
  4. Tutoriels
  5. Commencez avec la pile Niryo One ROS

Commencez avec la pile Niryo One ROS

PHN0eWxlPgouZGlzY2xhaW1lciB7CmJhY2tncm91bmQ6I2U3ZjJmYTsKICAgIGxpbmUtaGVpZ2h0OiAyNHB4OwogICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBib3gtc2hhZG93OiAwIDAgMTBweCByZ2IoMCAwIDAgLyAzMCUpOwogIGZvbnQtZmFtaWx5OiBvcGVuLXNhbnMsIGhlbHZldGljYSwgc2Fucy1zZXJpZjsKfQouZGlzLXRpdGxlIHsKYmFja2dyb3VuZDojNmFiMGRlOwogIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGNvbG9yOiAjZmZmOwogICAgYmFja2dyb3VuZDogIzZhYjBkZTsKICAgIHBhZGRpbmc6IDZweCAxMnB4Owp9Ci5kaXMtdGV4dCB7CiAgICBwYWRkaW5nOiA2cHggMTJweDsKfQouZGlzLXRleHQgYSB7CnRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lICFpbXBvcnRhbnQ7Cn0KPC9zdHlsZT4KPGRpdiBjbGFzcz0iZGlzY2xhaW1lciI+CjxkaXYgY2xhc3M9ImRpcy10aXRsZSI+Tm90ZTwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXMtdGV4dCI+VGhpcyB0dXRvcmlhbCBpcyBkZXNpZ25lZCBmb3IgTmlyeW8gT25lIHVzZXJzLiBJZiB5b3UgYXJlIHVzaW5nIE5lZCwgcGxlYXNlIGZpbmQgdGhlIG5ldyBST1MgZG9jdW1lbnRhdGlvbiA8YSBocmVmPSJodHRwczovL2RvY3MubmlyeW8uY29tL2Rldi9yb3MvaW5kZXguaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPmhlcmU8L2E+LjwvZGl2Pgo8L2Rpdj4=

Si vous lisez ceci, vous êtes probablement sur le point de plonger dans la pile Niryo One ROS.

Ce didacticiel vise à vous aider à démarrer, afin que vous puissiez avoir une vue d'ensemble et savoir par où commencer.

Nous examinerons d'abord l'architecture afin que vous puissiez comprendre ce qui se passe, puis nous verrons comment et où vous pouvez commencer, en fonction de votre niveau de programmation et de ce que vous souhaitez réaliser.

Note : nous ne vous apprendrons pas comment apprendre ROS, c'est un autre sujet 🙂

Les fichiers, où installer, etc.

La plupart de la documentation sur Niryo One et ROS se trouve dans notre projet github. Sur le README principal, vous pouvez voir un aperçu de la pile Niryo One ROS, et vous pouvez naviguer sur le README de chaque package pour obtenir plus de détails sur une partie spécifique de l'application.

Vous pouvez installer la pile et démarrer un mode de simulation avec simulation 3D sur votre système d'exploitation Ubuntu, en suivant les instructions sur le README principal de github.

Vous pouvez également télécharger l'image officielle Raspberry Pi 3B Xubuntu à partir de ici, à l'intérieur duquel vous pouvez trouver la pile complète Niryo One ROS déjà configurée, installée et automatiquement lancée au démarrage.

L'architecture, du contrôle matériel à l'interface utilisateur de haut niveau

niryo un aperçu de la pile ros

Cette image vous donne une idée des différentes couches de l'application. Commençons par le bas (matériel).

La couche matérielle c'est, eh bien, tout ce qui concerne directement le matériel. Une partie de la couche matérielle se trouve à l'intérieur du package niryo_one_rpi (principalement Python). Cette partie est responsable du bouton du haut, de la LED, des GPIO du connecteur du panneau, de la connexion Wi-Fi, des ventilateurs, etc.

L'autre partie est le pilote du moteur, qui est essentiellement une boucle en cours d'exécution fournissant une interface entre ROS et les commandes du moteur. Le pilote gérera à la fois les bus CAN et Dxl pour tous les moteurs du robot et veillera à ce que le niveau supérieur (contrôle) puisse envoyer des commandes aux moteurs et recevoir en retour la position et les erreurs de tous les moteurs.

Ensuite nous avons le couche de contrôle. Pour cette couche, nous utilisons le package ros_control avec un joint_trajectory_controller. Ce contrôleur est un contrôleur de position :

  • Reçoit une trajectoire
  • Exécute une boucle de contrôle :
    • Reçoit la position actuelle du conducteur
    • Interpole la trajectoire (spline quintique) pour obtenir la commande de position suivante
    • Envoie la commande de position au conducteur

En plus de cela, le couche de planification de mouvement est chargé de trouver la cinématique inverse et de construire un chemin pour le robot. Nous utilisons le package bien connu ROS Moveit pour cette couche. Le chemin créé est constitué d'une série de points. Pour chaque point, chaque axe reçoit une position, une vitesse et une accélération spécifiques. Ce chemin est envoyé au contrôleur de trajectoire commun pour l'exécution matérielle proprement dite.

La couche suivante est la couche de commandant. Il s'agit d'une interface de haut niveau entre le client (vous ou une autre machine) et les commandes du robot sous-jacentes.

Il prend des commandes telles que « Déplacer les articulations », « Ouvrir la pince ». Pour chaque commande, il fera ce qui suit :

  • Vérifiez qu'une autre commande n'est pas en cours d'exécution
  • Valider les paramètres de commande
  • Appelez la couche de planification de mouvement si un mouvement du robot est requis
  • Envoyer la commande aux couches de contrôle et matérielles

Cette couche est le niveau supérieur pour les fonctionnalités principales de Niryo One ROS. Lorsque vous envoyez une commande au robot, la commande passera par cette couche. Vous pouvez voir le commandant comme une passerelle entre vous et le robot.

Au sommet de cette couche, nous avons enfin le couche externe/utilisateur. Nous avons développé un ensemble d'interfaces de haut niveau entre la couche commandant ROS et l'extérieur. Les 2 principaux objectifs de ces interfaces sont : 1. cacher la complexité de ROS pour les utilisateurs qui souhaitent utiliser des commandes de haut niveau, et 2. Fournir un moyen de contrôler le robot à partir d'un environnement non-ROS (nous y reviendrons plus tard).

Mode de simulation

Vous pouvez décider de lancer la stack complète Niryo One ROS sur le Raspberry Pi avec la commande suivante : roslaunch niryo_one_bringup rpi_setup.launch

Cela lancera tous les packages et fonctionnalités nécessaires au fonctionnement du robot.

Nous vous avons également fourni un moyen d'exécuter un mode simulation du robot. Ceci est expliqué sur le github README, vous devrez exécuter la commande : roslaunch niryo_one_bringup desktop_rviz_simulation.launch

Alors, quelles sont les différences entre le mode simulation et le mode « normal » ?

  • La couche matérielle (+ dépendances pour cette couche) est désactivée. Le niveau inférieur de l'architecture est désormais la boucle de contrôle de la couche de contrôle. Fondamentalement, la commande donnée au robot est répercutée afin que la trajectoire soit parfaitement exécutée.
  • Rviz sera également lancé. Rviz est un autre outil ROS qui vous permet d'avoir une vue 3D du robot. Vous pouvez consulter les nombreuses options sur le panneau de gauche pour voir les différents axes, afficher le tracé d'un axe sur l'écran, etc.

Toutes les autres fonctionnalités (au-dessus de la couche matérielle) sont les mêmes. Cela signifie que vous pouvez tous les deux développer en mode normal ou simulation, et que toutes les commandes de haut niveau (API Python, communications externes, etc.) fonctionneront de la même manière.

Comment débuter en tant que développeur ?

Il existe de nombreuses façons de démarrer, en plongeant directement dans le code des fonctionnalités de base, ou simplement en utilisant les interfaces de niveau supérieur.

Voici une liste (non exhaustive) de ce que vous pouvez faire :

Développer avec l'API Python

L'API Python cache toute la complexité ROS du package Commander.

Vous pouvez programmer le robot sans avoir à utiliser ou apprendre ROS, ce qui peut être très utile, aussi bien pour les débutants (plus facile à démarrer) que pour les utilisateurs avancés (plus rapide à programmer).

Vous pouvez trouver la documentation complète ici.

Utilisez l'interface Blockly sur Niryo One Studio

Bien qu’il ne s’agisse pas d’une « véritable programmation avec du code », cette interface rend très simple et pratique l’écriture de programmes pour le robot, et est également idéale pour enseigner la programmation aux étudiants. Si vous n'avez aucune connaissance en programmation, ceci est fait pour vous. De plus, il peut être utilisé par des utilisateurs avancés, pour les mêmes raisons que pour l'API Python, simplement parce que toutes les fonctions de bloc que vous voyez ici appellent directement l'API Python.

Utiliser le serveur Modbus TCP/IP (pour les ventilateurs Modbus)

Ce serveur peut être utilisé pour communiquer entre un système non-ROS et le programme Niryo One ROS. Vous devrez créer un client Modbus TCP/IP et utiliser les fonctionnalités Modbus pour obtenir des données et envoyer des commandes.

Vous pouvez trouver la documentation complète ici.

Utiliser le serveur TCP

Vous pouvez utiliser ce serveur pour envoyer des commandes ASCII simples au robot. Vous devrez créer un client TCP (langue de votre choix) pour parler au serveur. Très pratique si vous souhaitez communiquer avec Niryo One depuis votre propre application.

La documentation est disponible ici. Nous avons également développé quelques clients TCP prêts à l'emploi pour certains langages de programmation.

Développer avec d'autres langages en utilisant rosbridge_suite

Rosbridge est un package ROS déjà installé et exécuté sur l'image Niryo One Raspberry Pi 3. Ce package vous permet de communiquer entre un système non-ROS et un système ROS, via des websockets.

Vous pouvez consulter la documentation de ce package sur le Wiki ROS. Côté client, vous pouvez trouver plusieurs bibliothèques développées par la communauté (roslibjs pour javascript, rosjava pour java, etc). Ces bibliothèques vous permettent d'utiliser les fonctionnalités de communication de ROS (vous devez donc connaître un peu ROS) sur votre système non-ROS (ex : page web, application android)

Développez directement avec ROS (si vous voulez vous salir les mains)

Vous pouvez également choisir d'utiliser directement les interfaces ROS (sujets, services, actions) pour créer des programmes pour le robot.

Bien sûr, ici, vous devrez savoir programmer avec ROS (ce qui est une autre histoire), mais c'est ce qui se rapproche le plus des fonctionnalités de base de Niryo One ROS.

Le code se trouve dans le dossier ~/catkin_ws/src. Vous pouvez retrouver ici tous les packages développés pour Niryo One.

Notez que si vous développez sur le Raspberry Pi 3B lui-même, vous devrez arrêter le programme du robot avant de compiler (trop de RAM utilisée pour les deux actions, le Raspberry Pi risque de se bloquer).

Aussi assurez-vous de compiler en utilisant catkin_make -j2 -l2 sur le Raspberry Pi 3, vous n'utilisez donc que 2 cœurs sur 4. Ne pas ajouter l'indicateur « -j2 » peut entraîner une erreur de compilation qui n'a rien à voir avec votre code, et l'exécution peut également se bloquer et prendre très longtemps.

Quelques conseils :

  • Pour voir tous les sujets interfaces liés à Niryo One : liste rostopique | grep niryo
  • Pour plus d'infos sur un sujet précis : info rostopic
  • Pour voir tous les services : liste rosservice | grep niryo
  • Pour plus d'informations sur un service spécifique : rosservice info (service_name)
  • Le package Commander expose un serveur d'action nommé « niryo_one/commander/robot_action », avec un message « RobotMoveCommand ». C'est probablement ce que vous recherchez si vous souhaitez envoyer une commande directe au robot à l'aide de ROS.

Développer sur la pile principale Niryo One ROS (utilisateurs avancés)

Si vous souhaitez modifier un comportement sur le robot, ajouter une nouvelle fonctionnalité de base ou exécuter vos propres tests, vous devrez modifier les fichiers dans les packages de la pile Niryo One ROS.

ATTENTION : Modifiez les fichiers à vos propres risques. En particulier pour les éléments liés au matériel, nous ne pouvons être tenus responsables si vous endommagez une partie du robot parce que vous avez modifié vous-même un morceau de code.

Donc, en gros, ce que vous devez faire est de modifier les fichiers souhaités, de compiler (si nécessaire) et de redémarrer le programme robot.

Je ne comprends toujours pas

Eh bien, ce n'est pas un problème ! Peut-être avons-nous oublié quelques points ou avons-nous expliqué quelque chose avec trop de jargon.

Si vous estimez qu'une partie de ce tutoriel n'est pas claire ou complète, veuillez nous envoyer un message à support@niryo.com. Nous pourrons alors mettre à jour cette page avec de meilleures informations.

-

De plus, si vous avez réalisé un joli tutoriel sur Niryo One, n'hésitez pas à le partager avec nous et la communauté Niryo, et nous serons heureux de créer un lien vers celui-ci depuis nos pages de documentation.

Comment pouvons-nous vous aider ?