Le javascript est désactivé sur votre navigateur
 
Prononcer /'po.bot/
Accueil du siteNos robotsRobots du clubHitec Mavin (2008)
  publication inférieure à 7 jours
  publié < 7j sous cette rubrique
     
À propos de l'article
    Publié le 20 août 2008
    par Julien H.

    Mis à jour le 13 mai 2009
Choisir votre langue :

Premier exemple : Ma-vin évitement d’obstacles

Nous allons présenter ici un cas complet, tout en image, permettant de réaliser un éviteur d’obstacle très très minimaliste.

 Le cahier des charges

On souhaite avancer en ligne droite, mais si on rencontre un obstacle à droite ou à gauche, on tourne dans la direction opposée puis on continue en ligne droite.

Attention, le robot ne reprendra pas sa trajectoire d’origine ! Il avancera de nouveau en ligne droite dès que l’obstacle ne sera plus visible (soit qu’on l’ait contourné, soit qu’il soit disparu par lui-même).

L’utilisation d’un tel programme convient très bien pour un robot en mode ’animal fou’ contrôlé par vos mains : dès qu’il vous détectera, il se frottera contre vous jusqu’à vous contourner.

 Le "matériel" utilisé

Le programme que nous allons réalisé utilise les blocs graphiques du logiciel Ma-vin. Les copies d’écran présentent la version 2.0 beta 2 de juillet 2008, au cas où cela changerait d’ici que vous passiez sur cette page.

On va utiliser uniquement les briques suivantes :

  • START : bloc obligatoire en début de programme
  • END : bloc obligatoire en fin de programme
  • REPEAT : bloc permettant de revenir à une étape précédente, bouclant ainsi un nombre défini ou infini de fois (voir images ci-dessous pour son paramétrage)
  • PHOTO : bloc de type "input" interprétant la lecture des capteurs infra-rouge
  • MOTOR : bloc de type "output" modifiant la commande des moteurs

 Didacticiel de programmation graphique

Démarrer le logiciel

On démarre le logiciel, tout va bien pour l’instant, si l’installation s’est bien déroulée bien entendu.

Vue par défaut du logiciel

Par défaut, un nouveau programme est déjà ouvert contenant uniquement la brique START.

Premiers blocs

La partie gauche de l’écran affiche par défaut 4 briques de commande logique, mais d’autres onglets permettent d’accéder aux autres briques : entrées, sorties, blocs personnalisés.

La première étape est d’ajouter une brique END. Cliquez sur ce bloc dans la partie gauche (le réservoir de blocs), gardez le bouton appuyé et faites glisser vers la partie principale (le programme)

Relier deux blocs ensemble

Puis sélectionnez par clic droit la sortie de la brique START.

En maintenant le bouton droit de la souris appuyé, on "tire" le connecteur vers la brique cible.

Choisir le bloc cible

En approchant par-dessus la brique cible (ici, bloc END), les points de connexion s’affichent, et on relâche le bouton droit au-dessus d’une entrée de la brique END.

Liaison établie

La flèche noire qui symbolisait la future connexion disparait et laisse place à un trait rosé définitif.

Bien entendu, nous ne voulons pas d’un programme qui ne fait que START et END, donc il va falloir supprimer cette connexion !

Sélection des briques

Pour cela, il faut sélectionner le groupe de blocs en traçant un cadre avec le bouton gauche de la souris appuyé. Un cadre vert se dessine.

Quand on relâche le bouton gauche de la souris, les deux blocs sont encadrés de vert, ce qui indique leur sélection.

Pour supprimer des blocs ou des connexions, on dispose de deux icônes "poubelles" selon la suppression.

Ici, on veut supprimer les connexions donc poubelle de droite.

Hop, les briques sont restées en place mais notre connexion créée quelques pas plus haut n’existe plus, on peut reprendre la création de notre programme éviteur d’obstacles.

 Construire le programme

Ajouter toutes les briques nécessaires

Maintenant que vous maitrisez les opérations de base, ajoutez toutes les briques dont nous avons besoin :
- 2 blocs PHOTO (pour détecter à droite et détecter à gauche)
- 3 blocs MOTOR (pour la réaction à droite, la réaction à gauche et le cas par défaut)
- 1 bloc REPEAT

Cela fait beaucoup de monde dans la fenêtre ! Il va falloir réduire la vue pour garder l’ensemble du programme sous les yeux.

La loupe ’-’ va réduire les blocs, dégradant leur lisibilité mais permettant de conserver tout sous la main, ce qui est pratique pour les connexions et la réflexion d’ensemble. Bien entendu, la loupe ’+’ vous permettra ensuite de revenir à une vue plus claire, plus aérée lorsqu’il faudra configurer chacun des blocs.

Créer les connexions

On va ensuite créer les connexions une à une. Ici, faisons une pause pour expliquer le fonctionnement de notre programme selon le cahier des charges énoncé en début d’article.

Tout d’abord, comment fonctionne une brique "input" ? elle a deux entrées et deux sorties.

- Les entrées n’ont pas de rôle particulier, on peut venir de n’importe quel autre bloc de notre programme, que ce soit du début ou d’une boucle, voire même d’une sortie.

- Les sorties sont particulières : la brique "input" donne une réponse à la question posée par son paramétrage. Cette question est fermée : on ne peut y répondre que par oui ou non, vrai ou faux, true or false, T ou F (qui sont les deux lettres associées chacune à une sortie).

Si l’on sort par la sortie T, c’est que la réponse à la question est "oui", alors que si l’on sort par la sortie F, c’est que notre test (notre "question") n’a pas réussi et que la brique répond "non". On va donc faire suivre ces deux sorties d’une réaction différente à chacune de ces deux réponses. Et les deux sorties doivent obligatoirement être reliées au reste du programme.

Reprenons notre cahier des charges : on veut toujours avancer, sauf si on a un obstacle à droite ou un obstacle à gauche. Il y a donc deux questions :

  1. est-ce que j’ai un obstacle à gauche ?
  2. est-ce que j’ai un obstacle à droite ?

Attention, je vous attends au tournant, vous allez me demander pourquoi on n’a pas une seule question "ai-je un obstacle à droite ou à gauche" ? Et bien ce n’est pas possible de poser cette question avec les briques. Et tant mieux car ça évite des noeuds au cerveau. Comme je l’ai dit la réponse est fermée.

Continuons. Ces deux questions vont être posées chacune par une brique PHOTO, avec bien entendu un paramétrage différent.

Mais que devient la première partie du cahier des charges : "on veut toujours avancer" ? Il n’y a pas de brique PHOTO pour elle ? Et bien non, et c’est là que repose toute la logique de cette programmation. Alors soyez rassurez, c’est une logique très commune qu’on retrouve dans tous les programmes informatiques, pas seulement sur le Ma-vin : une boucle continue gère le cas par défaut, et les cas particuliers sont traités par des branches spécifiques en début de boucle (on appelle cela parfois des "interruptions").

S’il n’y a que deux briques PHOTO, il y a par contre trois briques MOTOR, puisque nous avons quand même trois actions différentes :

  • avancer en ligne droite
  • contourner par la gauche quand l’obstacle est à droite
  • contourner par la droite quand l’obstacle est à gauche

Vous l’aurez remarqué, la brique MOTOR peut servir à commander les deux moteurs en même temps. On va donc n’utiliser qu’une brique derrière chacun des trois cas
- question n°1, réponse "vrai"
- question n°2, réponse "vrai" (si la réponse n°1 était fausse)
- dernier cas, par défaut, si aucune des deux questions n’avait de réponse "vrai"

On a donc maintenant notre logique complète, et on peut donc terminer notre programme en faisant une boucle vers le début.

Le cas de la boucle est particulier. On fait une boucle infinie en paramétrant le nombre de tours à 0 (pas logique mais très classique, ne vous en étonnez pas), mais il faut quand même connecter la deuxième sortie sur la brique END, alors qu’on sait bien qu’on n’ira jamais.

Note : toujours relier la deuxième sortie. Et ben c’est obligatoire pour respecter la cohérence d’écriture de n’importe quel programme : si jamais le nombre de tours de boucle n’est plus infini, il faut bien que le cas échéant soit programmé.

Le programme terminé

Le programme est désormais dessiné entièrement, avec toutes ses briques et toutes ses connexions, en tout cas celles auxquelles on a pensé :)

Le paramétrage

Chaque brique fait changer la partie basse de l’écran quand elle est sélectionnée, faisant apparaitre des paramètres différents selon sa nature.

Bon, le cas trivial : pas de paramétrage pour une brique START, ni END :

Et le paramétrage pour PHOTO :

On remarque qu’il n’y a que deux critères :
- "Sensor Direction", avec les deux seules valeurs FORWARD ou BACKWARD qui permet de sélectionner la rangée de capteur devant ou dessous le robot Ma-vin
- "Sensor Status", qui pose la ’question’ correspondant aux cases à cocher que vous allez sélectionné.

Ainsi, si on sélectionne uniquement la case ’R’ (pour Right = Droite), la question correspondante sera : "ai-je une détection à droite mais ni devant ni à gauche ?". Relisez 10 fois cette question. Il est bien question de la case cochée, mais aussi des deux cases non cochées !!!! Car il ne s’agit pas de réagir "si on a quelque chose à droite quoi qu’il se passe sur les deux autres", mais bien de tenir compte des 3 capteurs en même temps. Toute la compréhension de la brique PHOTO repose dans cette distinction.

Listing du paramétrage pour l’évitement d’obstacles

Dans notre exemple simple, voici les paramètres à appliquer :

- PHOTO 1 : forward / R (question "est-ce que j’ai un obstacle à droite et rien ailleurs)

- MOTOR 1 : default / forward / R / vitesse 15

- PHOTO 2 : forward / L (c’est l’inverse)

- MOTOR 2 : default / forward / L / vitesse 15

- MOTOR 3 : default / forward / both / vitesse 5

Comme c’est une boucle continue, la vitesse sera 5 sur les deux moteurs tout le temps, mais montera à 15 sur une roue ou l’autre selon le capteur qui détecte. Dès que l’obstacle disparaitra, la vitesse redesendra à 15. Il faut bien noter que la vitesse de l’autre roue sera restée à 5 pendant ce temps.

- REPEAT : comme expliqué plus haut, 0 pour boucle infinie

 Compilation

Même si vous n’avez pas réellement écrit de programme au sens où on l’entend habituellement (en utilisant un langage formé d’expressions syntaxiques spécifiques et d’une grammaire permettant d’enchainer des expressions mathématiques), vous avez quand même terminé la partie de réalisation de votre programme.

Il va donc falloir maintenant transformer votre diagramme de blocs en un exécutable binaire (composé de 0 et de 1) compréhensible par le microcontrôleur (Atmel AVR ATmega128) contenu dans le robot Ma-vin.

Pour cela, il faut cliquer sur l’icône des "outils" (marteau et tournevis) situé dans la barre de menu.

La première étape de compilation consiste à vérifier que vous avez bien relié les blocs correctement : que les blocs sont tous reliés entre eux, qu’il y a bien un bloc START et un bloc END, que le bloc REPEAT a ses deux sorties connectées, etc..

Une fois ce test logique terminé ("logic check completed"), c’est la compilation proprement dite (vous n’avez rien à faire, elle démarre automatiquement quand vous cliquez sur OK après la première étape).

Les blocs sont convertis en un code en langage C puis transmis à un compilateur C (il s’agit de AVR-GCC, une édition spécique aux microcontrôleurs Atmel basé sur le cross-compilateur GNU, c’est-à-dire un outil libre capable de faire une compilation pour une cible spécifique sur un hôte différent (ici, un PC qui compile pour un AVR), d’où le terme de croisé ("cross").

La compilation peut prendre un certain temps la première fois, mais après cela devrait aller plus vite.

Le bandeau en bas à gauche de la fenêtre du logiciel vous indique l’historique des événements, y compris vos ajouts et suppressions de blocs ou de liens, et bien sûr les étapes de compilation.

Nous verrons dans un prochain article le téléchargement dans le robot et les tests.

 Enregistrement

Pensez à enregistrer régulièrement votre travail. Cliquez sur l’icône disque bleue simple (pareil, nous verrons plus tard - sur demande - les autres enregistrements).

Un répertoire vous est proposé : c’est ici et pas ailleurs qu’il faut enregistrer votre travail.

Si ce n’est pas la première fois que vous enregistrez, il vous faut confirmer l’enregistrement avec le même nom :

Et voilà, vérifiez dans votre arborescence avec l’explorateur de fichiers que le programme a bien été créé :

 Conclusion

Et c’est la fin de notre premier exemple ! Bravo d’avoir lu l’article en entier, et nous espérons sincèrement qu’il vous aura été utile. Si vous avez des questions, n’hésitez pas, nous complèterons cet exemple au fur et à mesure.

Nous organisons des compétitions de robots Ma-vin pour tous ceux qui veulent s’initier. Nous sommes ouverts à toutes les inscriptions, mais aussi à vos dons pour continuer à proposer des évènements publics de plus en plus nombreux et à investir dans du matériel que nous documentons (en français !) par des articles détaillés.

 
Répondre à cet article
Vous avez aimé cet article ? Merci de nous recommander !
Commentaires :
  1. samedi 11 octobre 2008 à 14:23
    Répondre Fil de discussion
    Bonjour , serait il possible d’avoir des exemples de programme complexe pour ma-vin qui ne sont pas facile pour un débutant
  2. Julien
    dimanche 12 octobre 2008 à 11:04
    Répondre Fil de discussion

    Bonjour,

    Je n’ai pas très bien compris. Si c’est pour un débutant, il faut commencer avec des exemples simples.

    Si c’est pour mesurer les possibilités du robot Ma-vin, il existe des exemples de suivi de ligne qui sont déjà suffisamment complexes. Est-ce que cela vous conviendrait ? Nous avons justement un concours de suivi de ligne avec robot Ma-vin donc présenter un programme complexe mais élémentaire de suivi de ligne pourrait être faisable.

    Sinon, dès qu’il y a une réelle complexité algorithmique, on peut programmer le Ma-vin avec le langage C et un environnement de compilation pour AVR que nous allons présenter d’ici peu donc là vous aurez toute la complexité souhaitée :)

  3. dimanche 12 octobre 2008 à 13:24
    Répondre Fil de discussion
    Avis aux amateurs , proposer un programme pour ma-vin pour essayer de ce sortir d’un labyrinthe
  4. lundi 13 octobre 2008 à 18:47
    Répondre Fil de discussion
    Bonjour que me conseillez vous comme livre pas trop compliqué pour apprendre à programmer en langage C pour ma-vin
  5. Julien
    lundi 13 octobre 2008 à 20:26
    Répondre Fil de discussion
    Il y a un manuel en français écrit par Christian Tavernier (une référence dans le domaine) et édité par Dunod (éditions ETSI) que nous avons pour nos adhérents débutants. Ce n’est pas sur le langage C mais ça explique les bases du "microcontrôleur AVR" (titre du livre) qui équipe le robot Ma-vin.

    Page de référence : Livres Dunod
  6. jeudi 16 octobre 2008 à 18:33
    Répondre Fil de discussion
    Bonsoir ,pour apprendre à programmer peut on commencer par le c ++ et surtout quel livre choisir pour un débutant
  7. Julien
    lundi 27 octobre 2008 à 21:27
    Répondre Fil de discussion
    Je ne connais pas de livre sur le C++ car ce langage est plutôt évolué par rapport au C et fait appel à des concepts objets qui n’ont pas d’application sur le type de robot qu’on traite ici.