Youba : release du back-end pour robot Youpi

 8 août 2011  Bricolage  26 commentaires

Youba Logo

Une bonne nouvelle pour ceux qui attendaient désespérément un outil pour contrôler leur robot Youpi : je me suis botté le cul ces derniers jours, j’ai pu terminer la réalisation de mon back-end, le tester avec le robot, et même apprécier le résultat en générant un scénario de mouvements pour le robot en quelques secondes !

Le nom de cette merveille : Youba (pour YOUpi BAck-end), un petit programme de 500 lignes écrit en Python. Pour rappel, ce programme a été réalisé dans le contexte suivant :

  • Indépendance du front-end : le programme se contente d’attente ses ordres sur un port TCP. Les instructions en questions peuvent être envoyées par n’importe quel front-end (un terminal, un script, une page web, un programme analysant les commandes d’un joystick, tout ce que vous voulez).
  • Bufferisation : les ordres peuvent être envoyés en temps réel ou à l’avance.
  • Portabilité : au moins dans la mesure du possible. 99% du code est indépendant de la plate forme. Les 1% restants concernent l’envoi de données sur le port parallèle, que je n’ai pas su réaliser de manière totalement portable à l’heure actuelle. Les systèmes Linux et Windows sont supportés.
Le workbench pour tester le back-end Youba

Mon plan de travail : un PC, le robot, le câble de connexion adéquat, et un objet à saisir.

Le plan de travail qui m’a permis de valider mes tests se présente comme ceci : un PC avec une distrib Linux (Linux Mint dans ce cas), le robot, le câble de connexion parallèle fabriqué lors des étapes précédentes, et le tube en plastique d’un médicament générique quelconque préalablement lesté avec des contrepoids de touches de piano (j’ai pris ce que j’avais sous la main). Sur le PC, deux terminaux sont ouverts : à gauche le programme Youba qui écoute sur son socket et à droite le terminal d’envoi des instructions par netcat.

Les résultats des tests ont été au delà de mes espérances :

  • Fonctionnellement, le back-end rempli correctement son rôle, enquille les ordres et envoie leur traduction au robot.
  • Le mouvement sur plusieurs axes en simultané est possible. Cela peut paraitre anodin mais ce n’était pas forcément évident à concevoir.
  • Les mouvements sur chaque axe sont réalisés à une vitesse plutôt raisonnable. J’avais peur que le robot soit trop lent à réagir après avoir constaté des problèmes de mise en sommeil trop longue lors des essais avec mon programme Robotest. J’ai quand même réussi à minorer ce problème en revoyant complètement la gestion des intervalles d’envoi d’octets sur le port parallèle.
  • La précision sur les axes est au rendez-vous, et la pince dispose de suffisamment de pression pour tenir des objets cylindriques.

Et enfin, l’utilisation du back-end, grâce à la commande « I!! » qui affiche l’état des compteurs de demi-pas, permet de « cartographier » les déplacements sur chaque axe de manière très précise et d’utiliser ces informations pour scripter des scénarios très rapidement, dès qu’on connait un minimum la syntaxe attendue. J’ai réalisé le mien en moins de 5 minutes, c’est celui que j’utilise dans mon terminal de droite. Voici le script utilisé pour ordonner au robot de chopper mon tube cylindrique et de le déposer quelques centimètres plus loin :

#!/bin/bash
function sendyoupi {
echo "$1" | nc localhost 12080
}

# Positionner le bras au-dessus du tube
sendyoupi 'C!W!0,R,H,750,1|1,L,H,999,1|2,R,H,4332,1|3,L,H,7334,1|5,R,H,2000,1'
# Serrer la pince
sendyoupi 'A!W!5,L,D,80,1'
# Lever le bras
sendyoupi 'A!W!1,R,D,30,1'
# Tourner la base de 60°
sendyoupi 'A!W!0,L,D,60,1'
# Baisser le bras
sendyoupi 'A!W!1,L,D,30,1'
# Desserrer la pince
sendyoupi 'A!W!5,R,D,80,1'
# Revenir en position de départ
sendyoupi 'A!W!A,I,S,1,1'

Et le résultat du script en images :

Image de prévisualisation YouTube

Attention, quelques conseils pour ceux qui souhaitent utiliser Youba :

Avant tout, il y a un fichier README.txt à la racine du projet. Si je me suis cassé la tête à l’écrire, c’est qu’il contient des tas d’informations intéressantes à respecter pour que tout puisse fonctionner. Donc, lisez-le. Vérifiez en particulier que le port parallèle est activé dans le BIOS, de préférence en mode EPP, que son driver est bien chargé par le système d’exploitation, et que vous avez correctement configuré son n° d’I/O dans le fichier de configuration. Si le robot ne répond pas aux ordres donnés, lancez Robotest (disponible en page de téléchargements) pour vous assurer que la partie matérielle fonctionne à minima. D’autre part, je n’ai pas eu l’occasion de tester l’intégralité du programme avec Windows (les 50% des 1% qui ne sont pas portables), j’ai bon espoir que cela fonctionne mais on ne sait jamais. Enfin, je rappelle que je ne réponds en général pas aux questions par mail car je préfère qu’elles soient abordées en commentaires afin que tous les intéressés puissent avoir accès aux réponses.

Voila, il est maintenant temps de dévoiler où il est possible de télécharger Youba : c’est sur la page de téléchargements !

Une dernière chose : je serai content de savoir si vous utilisez ce back-end, ce que vous en pensez, quel front-end vous utilisez, et surtout si vous avez de bonnes idées quand à l’utilisation du robot Youpi.

26 commentaires pour “Youba : release du back-end pour robot Youpi”

  1. bastien

    bonsoir, jolie petit site et beau boulot sur ce robot. Je suis tombé ici en cherchant des infos sur ce robot, il se trouve que j’en récupère un en début de semaine prochaine.

    Je fais moi même de la machine cnc (fraiseuse 4axes et test de début d’imprimante 3d). Je bosse donc pas mal par le port parallèle.

    Je me suis posé une question, peut être connais tu le logiciel EMC2 sous linux, qui contrôle pas mal de truc, je m’en sert pour mes machines, pour contrôler des servos et autres. J’ai vu des personnes contrôlant un bras robot avec; mais celui-ci avait des servos-moteurs et non des moteurs PAP. Mais EMC2 les gèrent tout aussi bien.

    Dans le logiciel on peut rentrer l’adressage des pins sur le port //. et rentrer les paramètres des moteurs. Crois tu que cela marcherai? Mon projet serais d’interpréter du language machines (Gcode, cartésien X,Y et Z) avec le bras. Il faudrait biensur un script pour convertir tout ça.

    Dès que je l’ai je me met sur youfo et youba et je te tiens au courant.

    Ton back-end me plait beaucoup pour d’autres applications, avec kinects, capteurs, simple joystick et autres. Mais voilà je suis pas un expert en programmation, je vais bien sûre me pencher comme il faut dessus mais peut tu m’expliquer, dans les grandes lignes, la communication entre le joystick et le back-end? tout par du python?

    merci pour ton boulot

  2. bastien

    juste le mess pour activer la notifications par mail :$

  3. AlphaK

    Salut. Merci d’apprécier le travail réalisé ;)

    J’ai entendu parler de EMC2, j’ai vu des vidéos notamment de commande de fraiseuse sur DIY Planet http://planet.madeinfr.org/tag/fraiseuse

    D’ailleurs en découvrant cela je m’étais même dit que ça pourrait être sympa de fixer une Dremel sur le Youpi pour usiner des pièces, mais je pense que ça sera vraiment très compliqué de définir un mouvement droit alors que chaque partie du robot se déplace sur un axe rotatif.

    Bref, pour EMC2, je ne connais pas plus que ça et je pense que ça vaut le coup d’investiguer, car avec les coordonnées du port parallèle et le paramétrage des instructions, on peut virtuellement ordonner ce que l’on veut au robot. Cela pourrait peut-être remplacer complètement Youba pour les tâches scriptées.

    Youba a été créé dans le but d’être inter-opérable avec n’importe quel front-end. Le front-end envoie ses instructions par le réseau à Youba dans un langage texte décrit dans la doc de Youba, et le back-end fait le reste, à savoir bufferiser les commandes du front-end, et traduire les commandes texte en données brutes envoyées sur le port parallèle. Donc si tu veux faire communiquer un joystick avec Youba, il faut que tu développes un programme qui « écoute » le joystick, dans n’importe quel langage (sous Linux, Perl ou Python peuvent faire cela très facilement), qui transforme les instructions du joystick en une commande comprise par Youba, et qui envoie cette commande à Youba sur le réseau. Ce n’est pas très compliqué. Bien sûr, le front-end-end et la back-end peuvent être lancés sur la même machine.

    Pour tester facilement des commandes de Youba, indépendamment d’un quelconque front-end, tu peux utiliser nc sous Linux (c.f. les exemples dans la doc de Youba).

    Autre exemple qui pourra t’être utile, comme tu l’as vu j’ai développé dans la foulée mon propre front-end (Youfo) en très peu de temps, c’est du pur javascript/ajax pour pouvoir commander le robot grâce à un navigateur web. Je l’ai mis en download un peu en avant première, n’ayant pas eu le temps de rédiger le billet qui va avec, sur lequel je montre vidéo à l’appui comment s’en servir. Je m’en occuperai la semaine prochaine, mais tu peux bien sûr l’utiliser conjointement avec Youba pour voir comment l’ensemble fonctionne et où se situe la frontière entre les deux applications.

    Bon courage et n’hésite pas à signaler tes avancées sur ce sujet !

  4. bastien

    salut, désolé pour le retard, je remontais dans le nord pour mes études, j’en ai profité pour récupérer le robot, qui semble en bon état pour son âge. juste un ptit bout de pince à refaire, mais dans tout les cas je pense la remplacer assez vite. Aujourd’hui je me fais le cable et je tente de tester tout ça. je te tiens au courant.

    merci pour ton explication

  5. AlphaK

    Pas de soucis, tu peux prendre ton temps :)
    De mon côté je viens de publier le post et la vidéo sur Youfo, en espérant que ça soit utile.

  6. bastien

    salut, bon j’ai avancé, le cable est fait, mais j’ai perdu beaucoup de temps sur un vieux pc portable pour installer linux, mais entre temps mon écran m’a laché.. du coup j’ai branché ça sur mon ordi pour mes cnc, mais c’est un vieux unbuntu, je tente d’installer ce qu’il faut. Mais je patoge un peu. Je voudrais juste tenter déjà de tester les moteurs.

    Donc si je comprend bien je fais, dans le terminal (sous linux):
    cd (le répertoire où se trouve le fichier test)
    puis make? quand je le fais il n’arrive pas à monter l’exécutable..

  7. AlphaK

    Si j’ai bien compris, à ce stade tu es en train d’essayer de compiler robotest.c. Première chose, assure-toi que les packages make, gcc et binutils sont installés sur ton système.
    La compilation se lance effectivement avec make. Si cela ne fonctionne pas, détaille le message d’erreur exact, ou google-le pour avoir des pistes.

  8. bastien

    salut, en fait c’est mes ordi qui sont à la ramasse, je récupère lundi un portable ibm thinkpad pentium 4 pas trop mal avec un port imprimante tant rechercher. J’y mettrais linux et on retest tout ça. ça va être dure d’attendre.. Je vais quand même tenter de bidouiller mon vieux pc pour faire au moins le test, mais il y a tout à reprendre dessus

  9. bastien

    salut, bon j’ai remis un ordi en route, petite question pour clarifier un point, niveau cable, il n’y a qu’une prise à recabler? côté robot, ou les deux? merci

  10. AlphaK

    C’est selon tes possibilités. Recâbler une seule des deux extrémités est suffisant. L’extrémité choisie dépend de la facilité avec laquelle tu peux démonter ou remplacer le capot.
    Au final, la manière importe peu, tant que la broche X en sortie de ton PC est connectée à la broche du même nom sur le Youpi comme cela est décrit page 22 de la documentation du robot.

  11. bastien

    Salut, bon j’ai avancé, j’ai pu récupéré un ordi, un portable IBM thinkpad assez sympas pour tout ça. bon le cablage est prêt, j’ai installé python, youba et youfo communique sans problème. Le driver est bon, le port est actif et accessible. Mais rien ne se passe, je pense que cela viens du fichier setting.py à modifier peut être pour l’adresse?

    je suis pour l’instent sous XP, trop pressé de tout essayer avant de bidouiller l’ordi pour linux. j’ai donc mis input32.dll dans system32/drivers, c’est bon?

    merci, désolé la partie logiciel soys python c’est pas encore mon fort.

  12. AlphaK

    Salut
    Dans settings.py, tu peux laisser SERVER_IP=’0.0.0.0′ pour que Youba écoute sur tous les ports.
    Vérifie surtout que le paramètre PARALLEL_PORT a la bonne valeur (l’adresse de l’I/O de ton port parallèle).
    Je ne suis pas certain que inpout32.dll soit chargé dans drivers. Essaie dans c:\windows\system32, puis c:\windows\system, puis c:\windows.
    A chaque test, redémarre Youba, et regarde si le fichier de log de Youba (par défaut youba.log) remonte des erreurs. S’il n’arrive pas à charger la DLL, il le signale explicitement par une erreur au démarrage.

  13. bastien

    salut, bon j’ai du nouveau, j’ai réussis en touchant les paramètres de mon ordinateur à remettre le port lpt en défaut à l’adresse 0×378. ce qui se passe maintenant, mon robot à des spasmes quand je branche le port parallèles,il tourne sur lui même par a coups. jusqu’à que je lance youba, là tout s’arrête et les moteurs « chantent » normalement. Mais quand j’envoie des ordres au robot rien ne se passe, je vais tenter de bouger inpout32.dll, je pense que c’est lui qui déconne. Sinon je reviserais mon cable demain, avec un autre avec embout clipsé que j’ai retrouvé, l’autre est un cable moulé, il a peut être pas aimé le « démoulage ». Du côté de youba il me confirme toujours l’envoie et la réception des ordes, quelque soit la config. je te tiens au courant

  14. bastien

    bon j’ai pas trop eu le temps aujourd’hui mais je suis quasi que le soucis viens du cable, en démontant l’autre, je retombe sur tes couleurs à toi, sur celui que j’ai déjà bidouillé, le vert n’est pas le même, un vert foncé qui se ballade par là. La confusion viens aussi du fait que j’ai deux prises femelles donc je met un adaptateur. Sur la numérotation de mes broches j’ai donc deux fois le même ordre, 1 et 14 du même côté. sur le site du robot youpi, et sur ton câblage à toi, ya une foi le 1 et 14 à gauche pour le femelle, et à droite pour la mâle. désolé c’est un peu brouillon, bon du coup je vais cabler le femelle comme il faut, et cabler le deuxième comme le mâle, et bien le repérer. j’ai tout bon?

    Pour la partie qui suivra, pour le logiciel emc de cnc, en fait il faudra écrire un script qui envoi les donné d’initialisation du robot au début, et ensuite cela devrais marcher. Si le cable marche, je m’y met et te montre tout ça. Mais ton programme va me permettre de bien m’amuser et de débloquer pas mal de truc

  15. bastien

    bon bon nouvelle, ça bouge! tout les moteurs semblent ok, il y a un peu de jeux à rattraper mais je vois le bout!

    je verrais demain, mais je pense que je dois revoir certain adressage, certain bougent à la place d’autres, (le bras au lieux de la pince sur youfo), c’est toujours mon cablage je pense mais je préfère inverser l’adressage. je vais tenter de bouger la vitesse tout ça.

    merci

  16. AlphaK

    Parfait ! À force de patience et de persévérance, rien d’impossible :)
    Et par la même occasion cela confirme le bon fonctionnement du driver LPT intégré à Youba sous Windows.
    Bon courage pour tes prochains tests !

  17. bastien

    merci surtout à toi! Quel paramètre dois-je changer pour la vitesse? il est encore très lent. je suppose que c’est dans setting.py mais je tâtonne un peu.

    merci à toi

  18. AlphaK

    La vitesse se paramètre au niveau de chaque commande envoyée à Youba. Youfo a été réalisé pour le concept et n’est pas aussi complet au niveau des options que Youba. Mais Youfo ordonne systématiquement à Youba d’utiliser la vitesse maximale.

    Pour être certain d’avoir la vitesse maximale :
    _ Vérifie dans ton BIOS que le port parallèle est en mode ECP, ou au pire EEP (pas SSP).
    _ Essaie de nettoyer et retendre les courroies du robot (cf le manuel officiel), dégrippe les moteurs et les engrenages.
    _ La charge CPU du PC entre également en jeu : plus le CPU est idle, plus il peut envoyer les octets au robot au bon moment.
    _ Enfin, sur la plupart des systèmes d’exploitation usuels, il est impossible d’obtenir des résolutions de sommeil de grande précision quand celles-ci s’approchent de la milliseconde, ce qui correspond à l’ordre de grandeur de l’intervalle de temps requis par le robot entre l’envoi de deux octets. C’est également intimement lié au matériel. Cela veut dire que tu peux obtenir de meilleurs résultats avec un autre OS, ou un autre PC. Les OS temps réel sont susceptibles de donner les résultats optimaux, mais je n’ai pas eu l’occasion de le tester :
    http://fr.wikipedia.org/wiki/Syst%C3%A8me_d%27exploitation_temps_r%C3%A9el

  19. bastien

    salut, je suis pas mal occupe, pour l’instent je demonte tout le robot pour faire un bon entretiens. Je me demandai, que fais tu de ton deuxieme robot? tu veux t’en separer?

  20. bastien

    bonsoir, c’est bon tout marche, le soucis venais juste du port parallèle mal adressé dans linux.. enfin bon c’est beaucoup plus rapide, mais l’envie de tester un noyau temps réelle me titille et je testerai pour voir si une diférence se fait sentir. c’est fou la différence entre window et linux!

    j’ai vu passer le boulot du site du bts, leur projet de joystick, t’a des pistes? il n’y a pas de code ni rien.

    merci

  21. AlphaK

    Salut,
    * Pour le second robot, il ne me sert pas, je pourrai peut-être m’en séparer. Je te tiens au courant dès que j’en sais plus.
    * Impec, si tu testes avec un OS temps réel je serais curieux de connaître ton ressenti.
    * Aucune piste pour le projet joystick du BTS. Mais avec Youba, on peut développer un front-end joystick en moins de 100 lignes avec Perl ou Python :
    http://pygame.org/
    http://search.cpan.org/dist/Linux-Joystick/Joystick.pm

  22. AlphaK

    Salut

    J’ai enquêté un peu pour mon second robot, il ne va pas me servir. Je peux te le vendre si tu es toujours intéressé, mais je dois t’avertir qu’il répondait moins bien que le premier quand je l’avais testé brièvement avec robotest. Il me semble qu’il avait du mal sur 2 axes. Je ne peux pas en dire plus pour le moment (je ne l’ai pas sous la main).

    Tiens moi au courant.

  23. bastien

    salut, j’ai pas mal de boulot ces temps ci, je vais m’y remettre bientôt, pour le joystick et noyaux temps réelle. Pour ton robot je peux être intéressé. tu pense que c’est l’électronique ou les moteurs? donne moi un prix.

    merci

  24. AlphaK

    Aucune idée sur la cause des petits problèmes rencontré sur certains axes avec le second robot, je n’ai jamais pris le temps d’enquêter. Je peux le vendre pour 20€.

  25. bastien

    salut, j’ai eu pas mal de boulot ces temps ci, notamment avec ma fraiseuse, mais je me re-penche sur tout ça bientôt, je te le prend à ce prix là, j’ai deux trois pièce qui déconne sur le mien et ensuite des moteur et une électronique pour remplacement, du coup nouveau protocole. tu est d’où toi? (contact moi direct avec mon mail si tu veux, tu dois l’avoir dans inscription, sinon disturboys@hotmail.com)

    merci

  26. AlphaK

    Une précision par rapport à la question sur le Joystick : je commence à envisager l’idée de faire un front-end minimaliste pour permettre un pilotage par clavier et joystick, juste pour le fun et accessoirement pour montrer à quel point la tâche de réalisation du front-end est facilitée lorsqu’on a déjà Youba en back-end.

    Mais bon, faut être honnête, c’est clairement pas ma grosse priorité du moment. On verra dans un mois ou deux si les choses ont évolué concernant cette partie.

Laisser un commentaire


Bear