Publié le par & dans la catégorie Comment fabriquer un robot, GoRobotics >> Éducation, Tutoriels.

Comment fabriquer un robot : leçon 10

Index des leçons :

La programmation est généralement la dernière étape concernant la fabrication d’un robot. Si vous avez suivi les leçons, vous avez à présent choisi les actionneurs, l’électronique, les capteurs et autres, et vous avez assemblé le robot et, avec de la chance, il ressemble à quelque chose qui correspond à ce que vous aviez initialement décidé de construire. Sans programmation, le robot n’est qu’un presse-papiers coûteux bien que très agréable à regarder.

Il faudrait bien plus d’une leçon pour vous apprendre à programmer un robot donc, à la place, cette leçon vous aidera dans la façon de commencer et sur où (et quoi) apprendre. L’exemple pratique va utiliser « Proccessing », un langage de programmation amateur populaire destiné à être utilisé avec le microcontrôleur Arduino choisi au cours des précédentes leçons. Nous allons également supposer que vous allez programmer un microcontrôleur plutôt qu’un logiciel pour un ordinateur à part entière.

Quel langage choisir ?

Programmer un Robot par syraweb.orgIl existe de nombreux langages de programmation pouvant être utilisés pour programmer des microcontrôleurs ; les plus courants sont :

  • Assembleur : c’est quasiment du langage machine et comme tel c’est très fastidieux à utiliser. Assembleur ne doit être utilisé que lorsque vous avez un besoin de contrôle de niveau d’instruction absolu de votre code.
  • Basic : l’un des premiers langages de programmation largement utilisés, il est encore utilisé par certains microcontrôleurs (Basic Micro, BasicX, Parallax) pour les robots éducatifs.
  • C/C++ : l’un des langues les plus populaires. C fournit une fonctionnalité de niveau haut tout en gardant un bon contrôle de niveau bas.
  • Java : il est plus moderne que C et fournit beaucoup de fonctionnalités de sécurité au détriment du contrôle de niveau bas. Certains fabricants comme Parallax conçoivent des microcontrôleurs spécifiques pour une utilisation avec Java.
  • .NET/C# : langage propriétaire de Microsoft utilisé pour développer des applications dans Visual Studio. Des exemples comprennent Netduino, FEZ Rhino et d’autres).
  • Processing (Arduino) : une variante du C++ qui inclut certaines simplifications afin de rendre la programmation plus facile.
  • Python : l’un des plus populaires langages de script. Il est très simple à apprendre et peut être utilisé pour associer des programmes très rapidement et efficacement.

Dans la leçon 4, vous avez choisi un microcontrôleur basé sur les fonctionnalités dont vous aviez besoin (nombre d’ E/S, communauté d’utilisateur, fonctions spéciales, etc.). Souvent, un microcontrôleur est conçu pour être programmé dans un langage spécifique. Par exemple :

Si vous avez choisi un microcontrôleur amateur d’un fabricant connu ou populaire, il existe probablement une grande documentation disponible afin que vous puissiez apprendre à programmer dans leur langage de programmation choisi. Si vous choisissez plutôt un microcontrôleur d’un petit fabricant, moins connu (par exemple, car il a de nombreuses fonctionnalités que vous pensez être utiles pour votre projet), il est important de savoir en quel langage de programmation le contrôleur est conçu (C dans de nombreux cas) et quels sont les outils de développement disponibles (généralement du fabricant de puces).

Mise en route

Hello World PSPLe premier programme, que vous devrez probablement écrire est « Hello World » (dénommé ainsi pour des raisons historiques). C’est l’un des programmes les plus simples pouvant être réalisé dans un ordinateur, et il est destiné à imprimer une ligne de texte (par exemple « Hello World ») sur l’écran de l’ordinateur ou l’écran LCD. Dans le cas d’un microcontrôleur, un autre programme très basique que vous pouvez concevoir a un effet sur le monde extérieur (plutôt que simplement des calculs internes) est fait basculer une broche d’E/S. Connecter une DEL et une broche d’E/S, puis définir la broche d’E/S sur MARCHE et ARRÊT fera clignoter la DEL. Bien que le simple fait d’allumer une DEL puisse sembler élémentaire, la fonction peut s’intégrer à certains programmes complexes (vous pouvez l’utiliser pour éclairer des DEL en multi-segments, pour afficher du texte et des chiffres, utiliser des relais, des servomoteurs et bien plus).

Étape 1 : Assurez-vous d’avoir tous les composants nécessaires pour programmer le microcontrôleur

Tous les microcontrôleurs ne sont pas livrés avec tout ce dont vous avez besoin pour les programmer, et la plupart des microcontrôleurs ont besoin d’être connectés à un ordinateur via la prise USB. Si votre microcontrôleur n’a pas de connecteur USB ou DB9, vous aurez alors besoin d’un adaptateur USB/série séparé, et de le câbler correctement. Heureusement, de nombreux microcontrôleurs amateurs sont programmables, soit via un port RS-232, soit USB, et comprennent le connecteur USB intégré qui est utilisé non seulement pour la communication dans les deux sens, mais aussi pour alimenter la carte microcontrôleur.

Étape 2 : Connectez le microcontrôleur à l’ordinateur et vérifiez à quel port COM il est connecté. Tous les microcontrôleurs ne seront pas reconnus par l’ordinateur et vous devriez lire le guide « Mise en route » dans le manuel pour savoir exactement ce qu’il faut faire pour que votre ordinateur le reconnaisse et soit en mesure de communiquer avec lui. Vous aurez souvent besoin de télécharger des « pilotes » (spécifiques à chaque système d’exploitation) pour permettre à votre ordinateur de comprendre comment communiquer avec le microcontrôleur et/ou la puce convertisseur USB/série.

Étape 3 : consultez le guide d’utilisation de produit pour obtenir du code exemple et la méthode/protocole de communication

Ne réinventez pas la roue si vous n’avez pas à le faire. La plupart des fabricants offrent un peu de code (ou pseudo-code) expliquant comment faire fonctionner leur produit. Le code exemple peut ne pas être dans le langage de programmation de votre choix, mais ne désespérez pas ; faites une recherche sur Internet pour voir si d’autres personnes ont créé le code nécessaire.

  • Vérifiez dans les manuels produits/ guides de l’utilisateur
  • Voyez dans le forum du fabricant
  • Recherchez sur Internet le produit et du code
  • Lisez le guide pour comprendre comment écrire le code

Conseils utiles

  1. Créez des parties gérables de code fonctionnel : en créant des segments de code spécifique à chaque produit, vous construisez progressivement une bibliothèque. Développez un système de fichiers sur votre ordinateur pour rechercher facilement le code nécessaire.
  2. Documentez tout dans le code en utilisant des commentaires : tout documenter est nécessaire dans presque toutes les tâches, en particulier en robotique. À mesure que vous devenez de plus en plus calé, vous pouvez ajouter des commentaires aux parties générales du code, alors que vous commencez, vous devriez ajouter un commentaire à (presque) chaque ligne.
  3. Enregistrez différentes versions du code. N’écrasez pas toujours le même fichier : si vous constatez un jour que vos +200 lignes de code ne se compilent pas, vous ne serez pas obligé de tout repasser ligne par ligne ; à la place, vous pouvez revenir à une version précédemment sauvegardée (et opérationnelle) et ajouter/modifier au besoin. Le code ne prend pas beaucoup de place sur un disque dur, de sorte que vous ne devriez pas vous sentir obligé d’économiser quelques copies.
  4. Soulevez le robot de la table ou du sol lors du débogage (ainsi ses roues/pattes/chenilles ne le pousseront pas accidentellement dans le vide), et ayez un interrupteur à pied au cas où le robot tenterait de se détruire. Vous en aurez l’exemple si vous essayez d’envoyer à un servomoteur un signal de 400 us alors qu’il n’accepte qu’un signal de 500 (correspondant à 0 degrés) à 2 500 us (correspondant à 180 degrés). Le servomoteur essayera de se déplacer à un endroit où il ne pourra se déplacer physiquement (-9 degrés) et finalement brûlera.
  5. Si le code fait quelque chose qui ne semble pas fonctionner correctement, après quelques secondes, coupez le courant (il est très peu probable que le problème se « fixe de lui-même » et, en attendant, vous pouvez être en train de détruire une partie de la mécanique.
  6. Les sous-programmes peuvent être un peu difficile à comprendre au début, mais ils simplifient grandement votre code. Si un segment de code est répété de nombreuses fois dans le code, c’est un bon candidat à remplacer par un sous-programme.

Exemple pratique

Arduino UnoNous avons choisi un microcontrôleur Arduino comme « cerveau » de notre robot. Pour commencer, nous pouvons jeter un œil aux Didacticiels : l’Arduino en 5 Minutes. Ces didacticiels vous aideront à utiliser et à comprendre la fonctionnalité de base du langage de programmation Arduino. Une fois que vous avez terminé ces didacticiels, jetez un œil à l’exemple ci-dessous.

Pour le robot que nous fabriquons, nous allons créer un code pour le faire se déplacer (gauche, droite, avant, arrière), déplacer les deux servomoteurs (panoramique/inclinaison) et communiquer avec le capteur de distance. Nous avons choisi Arduino en raison de la grande communauté d’utilisateurs, de l’abondance des exemples de code et de la facilité d’intégration avec d’autres produits.

Capteur de distance IR GP2D120 Sharp Capteur de distance

Heureusement, dans le code Arduino, il existe un exemple pour obtenir des valeurs à partir d’un capteur analogique. Pour cela, nous allons à Fichier -> Exemples -> Analogique -> AnalogInOutSerial (ainsi nous pouvons voir les valeurs)

Panoramique/inclinaison :

Encore une fois, nous avons la chance d’avoir des exemples de code pour faire fonctionner des servomoteurs depuis un Arduino. Fichier -> Exemples ->  Servomoteurs -> Balayage

Panoramique et inclinaison ServocityNotez que les textes après deux barres obliques // sont des commentaires et ne font pas partie du code compilé

#include <Servo.h> // Ceci charge le script d’asservissement, ce qui vous permet d’utiliser les fonctions spécifiques ci-dessous
Servo myservo; // crée l’objet servomoteur pour contrôler un servomoteur
int pos = 0; // variable pour stocker la position du servomoteur
void setup() // nécessaire dans tous les codes Arduino
{
myservo.attach(9); // relie le servomoteur de la broche 9 à l’objet servomoteur
}
void loop() // nécessaire dans tous les codes Arduino
{
for(pos = 0; pos < 180; pos += 1) // la variable ‘pos’ va de 0 à 180° par pas de 1°
{
myservo.write(pos); // dit au servomoteur d’aller à la position dans le retard de variable ‘pos’
delay(15); // attends 15 ms avant que le servomoteur atteigne la position
}
for(pos = 180; pos>=1; pos-=1) // la variable ‘pos’ va de 180 à 0°
{
myservo.write(pos); // dit au servomoteur d’aller à la position dans le retard de variable ‘pos’
delay(15); // attend 15 ms à chaque degré
}
}

Contrôleur de moteur

Contrôleur de moteur série PololuC’est là que ça devient un peu plus difficile, car aucun exemple de code n’est disponible spécifiquement pour l’Arduino. Le contrôleur est connecté à la broche Tx (série) de l’Arduino et attend un « Octet de départ » spécifique avant d’engager toute action. Le manuel indique le protocole de communication requis ; une chaîne avec structure spécifique :

  • 0x80 (octet de départ)
  • 0x00 (spécifique à ce contrôleur de moteur ; s’il reçoit quoi que ce soit d’autre il n’engage pas d’action)
  • N° de moteur et direction (moteur un ou deux et direction expliquée dans le manuel)
  • vitesse du moteur(en hexadécimal de 0 à 127)

Pour ce faire, nous créons un caractère sous forme d’octets dans le caractère :

unsigned char buff[6];

buff[0]=0x80; //octet de départ spécifique au contrôleur de moteur Pololu
buff[1]=0; //octet de type périphérique spécifique à ce contrôleur Pololu
buff[2]=1; //numéro du moteur et octet de direction ; motor one =00,01
buff[3]=127; //vitesse du moteur « 0 à 128 » (ex : 100 est 64 en hexadécimal)

Serial.write(buff);

Par conséquent, lorsque cela est envoyé par la broche série, ce sera envoyé dans le bon ordre.

Associer tout le code fait que le robot va de l’avant et balaye le servomoteur lors de la lecture des valeurs de distance.

Vous pouvez découvrir tout le robot et le manuel utilisateur.

Étiquettes:

19 Réponses à “Comment fabriquer un Robot – Leçon 10 : Programmer votre robot”

  1. Valentin Chansard

    Bonjour a vous j aimerai savoir comment pouvons nous faire pour que notre robot puisse parler ( francais) et nous comprendre et bien sur nous repondre

    • Coleman Benson

      @Valentin Chansard Il n’y a pas trop de modules Français, alors votre meilleure solution serait avec un Raspberry Pi (ordinateur embarquée) et un logiciel compatible avec Linux.

  2. valentin chansard

    Tres bien je vous remercie mes une question en ceux qui concerne le corps la tète les bras comment pouvons nous le faire la précision sur se point nous l on pas été marquer pouvez vous nous aider s il vous plait je vous en remercie d avance

  3. Ing Duckens DUFFAULT

    Que dois je faire pour fabriquer un robot si je connais rien en programmation et rien en robotique?
    Est qu’il n’y a pas d’autre moyen plus efficace de monter un robot de A a Z en achetant uniquement les composantes ? Merci d’avance

  4. Tom

    Bonjour, je voudrais savoir quand on veut faire un robot a deux roues mais debout comment fait on pour qu’il tienne debout sans tomber en avant ou en arrière merci d’avance

  5. mahmoudou babba

    bonjour quel est la meilleurs carte de développement pour un robot robuste

  6. Melissa

    Je dois faire un robot capable de jouer au piano pourriez vous m’indiquer la procédure a suivre (microcontrôleurs a choisir..)

  7. Samuel

    Bonsoir. Pour mon mémoire de fin d’étude d’ingénieur j’aimerais concevoir un mini robot qui implémente la démarche humaine. Pourquoi je avoir une orientation svp?

  8. christ

    bonjour, Je souhaiterai utiliser une Unité Centrale IBM Thinkcentre E50 qui ne me sert à rien afin d’économiser sur le cadre et certains composants et j’aurai voulu savoir quel est le langage de programmation le plus adapté quand on utilise pas de microcontroleur? Merci

    • Coleman Benson

      @christ Un Thinkcentre est un ordinateur normale qui peut rouler beaucoup de languages de programmation – ce n’est pas limitée. Ca vaut pas la peine d’enlever la O/S.

  9. Brayan

    Bonjour,je le trouve très bien votre cours, actuellement je suis sur mon projet de mémoire où il est question de fabriquer un bras mécanique mais je narrive pas à coder les modèles mathématiques ( matrices ) j’aimerais savoir si vous pouvez m’orienter vers un autre cour qui pourra m’aider.
    Cordialement

Laisser une réponse

  • (ne sera pas publié)