Contrôler Ned avec une carte Arduino

Contrôler Ned avec une carte Arduino

Note

Ce tutoriel est fonctionnel à partir de :
La version v3.0.0 de la ned_ros_stack
La version v3.0.0 de Niryo Studio

Ce tutoriel est conçu pour Ned. Si vous utilisez un Niryo One, cliquez-ici.

Note

La version Ned2 de ce tutoriel est en cours de développement et sera disponible prochainement.

Il existe de nombreuses manières de contrôler Ned. Dans ce tutoriel, nous allons apprendre comment utiliser une carte Arduino pour contrôler le robot.

Le concept

Utiliser une carte Arduino avec un Ned (ou plus) permet de créer des applications complexes. Par exemple, vous pouvez facilement créer une petite chaîne d’assemblage avec deux robots et une carte Arduino.

Commençons avec un Ned et une carte Arduino.

Le concept est simple : la carte Arduino est le maître qui contrôle les actions effectuées par le robot. Elle reçoit la data provenant des capteurs ou d’entrées utilisateur, et envoie les commandes au robot à travers les broches digitales. Pour lancer une commande sur le robot, la carte Arduino va envoyer un signal digital qui attendra une réponse (un autre signal digital provenant d’une autre broche) pour savoir si Ned a terminé l’exécution.

Chaque robot est un esclave. Il a un ensemble de commandes prédéfinies et attend un signal digital de la carte Arduino. Lorsqu’il reçoit un signal, une commande donnée est enclenchée, et lorsquelle est achevée, Ned envoie un signal à la carte Arduino pour l’informer que la commande a été exécutée.

Installation électrique

Important

Avant d’allumer quoique ce soit, assurez-vous que Ned et la carte Arduino ont la terre en commun (câble noir).

Vous pouvez à présent connecter jusqu’à 6 câbles sur les 6 broches digitales à l’arrière du robot. Sur la carte Arduino, connectez les câbles sur les broches digitales. Vous aurez ensuite à définir pour chaque broche s’il s’agit d’une entrée ou d’une sortie (utiliser des couleurs appropriées permet d’éviter toute erreure future).

Dans cet exemple, nous utilisons 4 câbles :

  • Deux câbles pour envoyer des commandes depuis la carte Arduino vers Ned (Arduino : OUTPUT, robot : INPUT),

  • Un autre pour renvoyer les confirmations d’exécution depuis le robot jusque la carte (Arduino : INPUT, robot : OUTPUT).

  • Et le dernier pour raccorder la terre de la carte Arduino à celle de Ned.

Il sera nécessaire de bien se rappeler des choix effectués à cette étape lorsque vous créerez votre code. Dans cet exemple, nous utilisons une Arduino Mega 2560 et avons effectué les connexions de la manière suivante :

  • Broche digitale 54 (Arduino) –> Broche 1A (Ned)

  • Broche digitale 55 (Arduino) –> Broche 1B (Ned)

  • Broche digitale 56 (Arduino) <– Broche 1C (Ned)

  • GND/Terre (Arduino) – GND/Terre (Ned)

Note

« Broche digitale X (Arduino) –> Broche Y (Ned) » signifie que la broche X de la carte Arduino est définie comme une sortie, et que la broche Y du robot est définie comme une entrée.

Vous pouvez également ajouter deux boutons alimentés en 5V, avec des résistances de rappel de 10kOhm, afin que l’utilisateur soit capable de choisir d’effectuer l’action « pick » ou « place ». Dans ce cas, la connexion de chaque bouton à une broche digitale de la carte Arduino s’effectue ainsi :

  • Broche digitale 57 (Arduino) <– Bouton 1

  • Broche digitale 58 (Arduino) <– Bouton 2

Dans ce cas, il sera nécéssaire de modifier le code fourni en exemple (se référer à la partie concernant le code Arduino).

Dans notre cas, plutôt que d’utiliser des boutons, nous allons utiliser des entrées tapées sur le clavier de l’ordinateur connecté au port série de la carte Arduino.

Programmer Ned avec Niryo Blocks (Niryo Studio) et l’IDE Arduino

Le code Arduino

Préparation de l’IDE Arduino

Pour programmer une carte Arduino, il est nécessaire d’installer l’IDE Arduino. Pour ce faire, vous pouvez suivre le tutoriel officiel qui vous aidera pour cette étape en quelques minutes.

Une fois que l’IDE Arduino est installé, connectez la carte Arduino à votre ordinateur, ouvrez l’IDE, et chargez le code Arduino utilisé pour cet exemple. Ouvrez le fichier dans l’IDE et acceptez de créer un dossier portant le nom du fichier pour le placer dedans.

Il est nécessaire de spécifier le type de carte Arduino que vous utilisez. Dans Outils, sélectionnez la référence de votre carte. La référence du processeur devrait alors être automatiquement mise à jour.

Choisir le type de board

Sous Windows :

Il faut maintenant s’assurer que le port indiqué pour la carte est correct. Il est possible de le faire en déconnectant la carte Arduino. Dans le menu Outils, la référence du port à utiliser disparaîtra.

Sous Linux :

La carte Arduino devrait être connectée au port série /dev/ttyACM0 (le 0 pouvant être un autre chiffre). Si vous obtenez une erreur à propos de l’ouverture du port, cela signifie qu’il est nécessaire de définir les permissions pour celui-ci. Ouvrez un terminal et entrez :

ls -l /dev/ttyACM*

Vous obtiendrez alors un retour de ce type :

crw-rw---- 1 root dialout 166, 0 mars  17 10:21 /dev/ttyACM0

Vous devez à présent ajouter votre compte utilisateur au groupe propriétaire du fichier « dialout » :

sudo usermod -a -G dialout <username>

En remplaçant <username> par votre identifiant utilisateur.

Note

Si vous ne connaissez pas votre identifiant, entrez la commande suivante dans un terminal :

whoami

Votre identifiant devrait alors apparaître.

Ensuite, si une erreur concernant une permission refusée apparaît, cela signifie qu’il faut définir les permissions sur lecture et écriture avec la commande suivante :

sudo chmod a+rw /dev/ttyACM0

Chargement et lancement du code

Vous pouvez à présent cliquer sur le bouton fléché du haut pour transférer le code sur la carte Arduino :

Envoyer le code sur Arduino

Le code devrait à présent fonctionner sur la carte. Si vous rencontrez des erreurs à cette étape, vérifier le port et le type de carte utilisée devrait les résoudre.

Explication du code Arduino

Note

Les lignes de code commentées correspondent à une utilisation du programme avec des boutons au lieu du clavier pour déclencher des fonctions Blockly (pick and place). Pour utiliser des boutons, il faut simplement les décommenter.

Dans le code, nous définissons en premier lieu la broche numérique que nous allons utiliser sur la carte. Ici, comme détaillé précédemment, nous utilisons deux sorties et une entrée. Les broches sont à modifier selon la carte que vous utilisez.

Dans la fonction setup(), nous définissons le mode de chaque broche (entrée ou sortie), ainsi que la vitesse de communication (ici 9600 bauds (bits/sec).

Nous définissons ensuite deux fonctions :

  • sent_to_robot(int pin) : définit la broche spécifiée sur HIGH, attend une réponse sur la broche d’entrée, et enfin redéfinit la broche sur LOW.
  • sent_to_robot_home_and_learning_mode() : utile dans le code Blockly pour terminer la boucle while, cette fonction passe les deux sorties sur HIGH.

Enfin, dans la fonction loop() :

  • Nous lisons la chaîne de caractère sur le port série (c’est à dire le texte tapé sur le clavier)

  • Puis, selon la chaîne de caractères reçue, utilisons une des fonctions décrites précédemment.

Pour écrire sur le port série, ouvrez l’IDE Moniteur série dans le menu Outils :

Serial Monitor

Assurez-vous que la vitesse de communication est définie à 9600 bauds. Vous serez capable de voir le résultat de la fonction Serial.println(). Vous pourrez également envoyer des strings vers la carte, ces derniers étant traités par la fonction Serial.readString() »

Chaînes de caractères que vous pouvez envoyer à la carte Arduino pour contrôler Ned :

  • « pick » définit la première sortie sur HIGH. Dans Blockly, cela déclenche alors la fonction « pick », qui va saisir un objet.

  • « place » définit la seconde sortie sur HIGH, déclenchant alors la fonction « place », qui va modifier la position de l’objet en question.

  • « finish » définit les deux sorties sur HIGH, ce qui va, dans Blockly, déclencher les étapes de clôture du programme.

Le code Blockly

Explication du code Blockly

Vous pouvez télécharger le fichier XML utilisé pour créer cette séquence. Il faut simplement importer cette séquence dans le panneau Blockly de Niryo Studio, et lancer celle-ci sur le robot.

Ce code est composé d’un programme principal et de deux fonctions appelées par celui-ci.

Blockly pick and place full program :align: right :width: 600px Explication du code Blockly

Dans cet exemple, il est nécessaire d’utiliser un gripper. On définit les deux fonctions « pick » et « place », la première saisissant un objet sur la gauche de Ned et la seconde le déplaçant à sa droite.

On définit préalablement les broches 1A et 1B en entrées pour recevoir un signal de la carte Arduino, et la broche 1C en sortie pour envoyer un signal en retour lorsque l’action a été effectuée.

Nous utilisons ensuite une boucle lisant continuellement les deux broches d’entrée.

  • Si une broche reçoit un signal HIGH alors que l”autre broche est sur LOW, la commande associée démarrera. Après son exécution, la broche de sortie du robot renvoie un signal HIGH pendant 0,2 secondes (afin que la carte Arduino ait le temps de le traiter) avant de repasser la broche sur LOW.
  • Si les deux broches sont définies sur HIGH, Ned retourne en position de repos, active le mode apprentissage, et la boucle s’achève.

Utilisation du programme

Maintenant que les codes Blockly et Arduino ont été détaillés, voici comment contrôler Ned via le Moniteur série de l’IDE Arduino :

  • Pour commencer, assurez-vous que votre code Arduino est bien sur la carte que vous avez connectée au robot avec Niryo Studio, et que celle-ci est également connectée à votre ordinateur.

  • Uploadez le code Blockly dans Niryo Studio, et lancez-le. Ned se dirigera vers une position puis attendra des instructions.

  • Dans l’IDE Arduino, sur votre ordinateur, ouvrez le Moniteur Série. Ecrivez puis envoyez :

    • pick

    • place

    • finish

Cela déclenchera les conditions dans Blockly et Ned suivra les instructions.

Pour aller plus loin

Ce tutoriel est une bonne base pour démarrer la programmation de Ned avec une carte Arduino. Vous pouvez facilement étendre cette application à plusieurs robots, boutons, capteurs…

La structure des blocs sera similaire, puisqu’il faudra une boucle attendant un signal de la carte Arduino pour exécuter une commande puis envoyer une réponse.

A présent, vous pouvez développer de nombreuses applications grâce à votre imagination (et un peu de travail). Voici quelques idées :

  • Morpion : Robot VS Humain

  • Ligne de production triant les objets dépendamment de leur poids (grâce à une balance connectée à la carte Arduino)

  • Ned comme distributeur de chocolats lorsque l’utilisateur presse un bouton

Si vous créez une application avec Ned, n’hésitez pas à la partager avec la communauté sur les réseaux sociaux ! Utilisez #niryo, nous serions ravis de mettre votre projet en avant.