Club robotique de Sophia-Antipolis

Accueil > POBOTpedia > Programmation > Découvrir > Open Source et Logiciel Libre > Logiciels open source pour la robotique > Découverte de Pure Data

Découverte de Pure Data

samedi 20 mars 2010, par Julien H.

Il existe un univers parallèle à la robotique qui utilise des techniques similaires : l’art multimédia. Parfois on se rencontre, soit parce que les moteurs et les systèmes embarqués montent sur scène, soit parce que nous-mêmes allons chercher dans le savoir-faire et les pratiques de la scène.

C’était le cas d’Arduino, qui avait séduit beaucoup d’artistes et de hackers (ceux qui ont besoin d’être rapides et efficaces) avant d’être reconnu par les électroniciens plus classiques (ceux qui ont besoin de comprendre le fonctionnement du microcontrôleur pour l’utiliser correctement). Idem pour Processing. Depuis notre réunion d’hier, c’est également le cas de Pure Data dont on va parler ici.

Introduction

Rien d’exceptionnel : ce n’est pas le premier langage graphique que nous manipulons. On avait commencé avec les Lego RCX, mais c’était vraiment pour les plus jeunes. Puis avec les Lego NXT, ça devenait déjà plus costaud (l’influence de Labview) mais on était vite retourné vers un langage classique (RobotC, Brixcc). Ensuite les robots de nos courses hebdomadaires, les Ma-vin, qui ont permis d’ouvrir nos épreuves des Jeux de Sophia. Mais là encore, l’apprentissage du C permet d’aller beaucoup plus loin et plus vite.

Alors... Pure Data, une révélation ou une porte d’entrée vers un nouveau public ? Dans tous les cas, ça justifie de s’y intéresser et de manipuler un peu.

L’environnement Pure Data
la console à gauche, et deux patchs avec le "code" et l’interface utilisateur mélangés.

En résumé

Il existe différents sites qui vous présenteront Pure Data :
 le site officiel Pure Data
 l’encyclopédie PdPedia en français
 des tutoriaux par Interface-Z

Ce qu’il faut en retenir :
 aucune ligne de programmation
 des boites reliées entre elles qui contiennent des valeurs ou des commandes
 des entrées (souris, micro, webcam, port série, ...)
 des sorties (écran, son, image, port série, ...)
 et c’est gratuit et open source, j’ai failli oublier de le dire

Donc pour faire un "programme" qui n’en est pas vraiment un, on dessine des chemins entre boites de valeurs et boites de commande, en allant des entrées vers les sorties. Il n’y a pas de code source, le fichier s’appelle un "patch" et n’est pas compilé : il est directement exécutable, tout en restant modifiable.

Pas d’IHM, on intervient directement sur le patch (en passant parfois d’un mode édition à un mode exécution) qui peut servir d’interface graphique riche (on peut cacher les fils en utilisant une boite de commande "pd xxx" qui permettra d’ouvrir une nouvelle fenêtre pour "xxx" où on détaillera son fonctionnement).

Les boites sont reliées par des points de connexion en haut et en bas. Ces points de connexion sont des entrées (en haut) ou des sorties (en bas). Quand on utilise une sous-fenêtre (avec la commande "pd xxx" décrite ci-dessus), ces points de connexion sont représentés par des boites appelées "inlet" pour les entrées et "outlet" pour les sorties.

On retrouve donc une approche fortement orientée objet (chouette). En plus, ces liens n’ont pas à suivre un cheminement linéaire, le programme est donc fortement parallèle (re-chouette).

Et le hardware ?

Ce qui m’intéresse dans Pd, c’est le prototypage rapide, le partage d’idées lors de nos ateliers, et l’accès à la robotique pour des non-programmeurs. Et pour notre plus grand plaisir, les microcontrôleurs s’interfacent facilement grâce à la liaison série, à commencer par Arduino.

Cette petite carte à base d’AVR peut effectivement être configurée pour communiquer avec Pure Data via un firmware appelé Firmata qui convertit les consignes reçues du logiciel en modifications des entrées/sorties, en sachant gérer les bibliothèques et les périphériques matériels : PWM, servo, I2C, ...

Voici un premier programme. J’ai repris le patch "arduino.pd" et j’en ai créé un autre à côté. L’utilisation d’une boite "arduino" va automatiquement ajouter le fichier (comme un #include C ou un import Java) et me permettre d’utiliser la communication série avec Firmata. On communique avec par les points de connection (un seul inlet, un seul outlet). Pour plus de lisibilité, vous voyez qu’on peut utiliser des messages grâce aux boites de commande "send" ou "s" et "receive" ou "r". Un peu comme une liaison Xbee qui évite d’utiliser un câble :)

Ce patch va recevoir de la carte Arduino une commande (le "r" dans le groupe du bas à droite) et la filtrer (la boite "route" va filtrer la suite de mots envoyée par l’outlet de la boite arduino sur le mot "digital" puis une seconde "route" va filtrer le mot "2" qui est la patte utilisée (interruption externe 0 reliée à un bouton.. ou un odomètre) pour ce test. L’outlet de gauche veut dire que le filtre laisse passer le reste du groupe de mots, et l’outlet de droite redonne l’entrée si jamais le filtre ne passe pas.

Ensuite, j’affiche ce qui reste après la route grâce à la commande print, ce qui va donner 0 (front descendant) ou 1 (front montant). En parallèle (j’adore écrire ce mot !) on peut prendre cette même valeur (deux connexions au même outlet) et l’ajouter dans une boite de commande "+" (j’ai juste écrit + dans une boite vide) qui a 2 inlets... il suffit alors de prendre l’outlet de la boite de valeur et le faire rentrer dans le second inlet du + pour avoir une incrémentation.

Le dernier point n’est pas anodin : comment se fait-il qu’il n’y ait pas de boucle infinie, la nouvelle valeur rerentrant dans la boite d’addition ? Tout simplement parce que Pure Data gère les événements (on appelle ça un "bang") que ce soit une action de l’utilisateur, comme un clic sur une boite de signal, telle "open 38" ou "close" ou "devices" qui permettent de démarrer la liaison série, etc.. ou un événement de l’environnement (réception par l’Arduino, boite de commande, ...).

Autre exemple : servomoteurs

Piloter des servomoteurs avec Pure Data, une Arduino et Firmata, c’est un jeu d’enfant :

 déclaration "pin mode" pour indiquer qu’on veut utiliser le mode servo
 un slider pour choisir la vitesse
 un changement de pin mode pour arrêter le moteur

Résultat : 30 secondes, sans compilation, sans envoi dans l’Arduino, sans interface.

Un message, un commentaire ?

modération a priori

Attention, votre message n’apparaîtra qu’après avoir été relu et approuvé.

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.