Articles taggés avec ‘youpi’

 Youpi, testons les moteurs !

 30 décembre 2009  Bricolage  2 commentaires

J’avais longuement expliqué dans cet article les étapes de fabrication d’un câble parallèle pour relier le robot Youpi à un PC standard.

Aujourd’hui je vais comme promis diffuser les quelques lignes de code permettant de tester l’ensemble des moteurs. Le programme est grandement inspiré de celui que l’on peut trouver sur le site du BTS-IRIS de Niort.

C’est un programme développé à la va-vite en C. Il pourra servir de base pour tous ceux qui comme moi souhaitent vérifier que tous les moteurs sont en bon état de fonctionnement.

Le code

robotest.c :

/*
 Youpi Robot Test program
 ------------------------

 This program has to be run as root
 or with sufficient credentials (suid...)
*/

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/io.h>

// Change this to your parallel port
#define LPT 0x378

// Defines the byte type
typedef unsigned char byte;

/*
 This functions writes a byte to the parallel port
 Do not use any other way to do it as the robot needs to pause
 between each instruction.
*/
void writelpt(byte b) {
	int tempo = 1500;
	outb(b, LPT);
	usleep(tempo);
}

/*
 This is the main function
*/
int main() {

	//Variables
	int i,j;
	int steps = 600;

	//Welcome message
	printf("*** YOUPI ROBOT TEST PROGRAM ***\n");

	//Tries to access parallel port
	if(ioperm(LPT, 1, 1) != 0) {
		perror("ioperm");
		return 1;
	}

	//Initializes the robot
	printf(" * Initialization\n");
	writelpt(0x47);
	writelpt(0x00);

	//Orders earch motor to rotate
	for(j=0; j<6; j++) {
		printf(" * Test of motor %d\n", j);

		//...into one direction
		writelpt(0x80);
		writelpt(0x00);
		for(i=0; i<steps; i++) {
			writelpt(0x40+j);
			writelpt(0x00+j);
		}

		//...into the opposite direction
		writelpt(0xBF);
		writelpt(0x3F);
		for(i=0; i<steps; i++) {
			writelpt(0x40+j);
			writelpt(0x00+j);
		}
	}

	return 0;
}

Et le Makefile qui va avec :

CC=gcc
CFLAGS=-W -Wall -O

all: robotest

robotest: robotest.c
	$(CC) $(CFLAGS) -o $@ $<

clean:
	rm robotest

Quelques explications

Le manuel indique une vitesse de rotation maximale de 40°/s pour tous les moteurs, avec une résolution maximale de 0.03° par 1/2 pas. Chaque 1/2 pas est effectué grâce à l’envoi de 2 instructions par le port parallèle. Pour faire avancer le robot à cette vitesse maximale, il est nécessaire d’espacer chaque instruction d’un temps T en secondes, calculé ci-dessous :

Il faut donc espacer chaque instruction de 1500 µs, ce qui explique les 1500 à la ligne 27 du code. Descendre en dessous de cette limite est susceptible de provoquer des catastrophes inconnues, donc si vous essayez, cela sera à vos risques et périls.

Bugs connus

Avec un sommeil de 1500 µs entre chaque instruction, le programme devrait théoriquement être terminé en approximativement 2+6*(2+600*2)*2*0.0015 = 22 secondes, en négligeant le temps nécessaires aux autres instructions. Hors j’obtiens en moyenne un temps d’exécution à 58 secondes.

Ce phénomène est expliqué en partie par le paragraphe suivant, tiré de la page man 3 de usleep :

La période de sommeil peut être allongée par  la  charge  système, par le temps passé à traiter l’appel de fonction, ou par la granularité des temporisations système.

En résumé, lors de mon test, la vitesse de rotation de chaque moteur n’est pour le moment pas optimale. J’avais fait d’autres essais en réduisant significativement cette temporisation à quelques µs, ou en utilisant nanosleep afin d’avoir une granularité plus fine, mais le temps d’exécution total n’est jamais descendu en dessous de ces 58 secondes. Je ne sais pas encore comment optimiser cette vitesse, cela fait appel à des notions d’architecture système et de programmation temps réel qui me manquent à l’heure actuelle. Dans tous les cas, même si la vitesse est à l’heure actuelle bridée, le programme est néanmoins capable de démontrer le fonctionnement correct de chaque moteur.

Informations complémentaires

J’en profite pour placer un rappel : au lieu de me contacter personnellement pour me demander de l’aide à propos de ce robot, merci d’effectuer cette démarche en laissant un commentaire sur ce site afin que les questions et réponses profitent à tout le monde.

NB : vous pourrez maintenant trouver en un seul clic tous les articles de ce site relatifs au robot Youpi grâce au tag Youpi.

 On a retrouvé le prototype du T-800 !

 30 mai 2009  Bricolage  14 commentaires

Alors qu’il arpentait le bric-à-brac incommensurable de son fournisseur de breloques habituel, dont je tairai le nom, mon père était désappointé. Il n’avait pas encore trouvé de gadget inutile et encombrant à acheter ce jour là.

Soudain il tomba nez à nez (ou plutôt nez à bras) avec deux massives armatures articulées, et terminées par une pince.
_ « Fichtre, se dit-il, ça ne vaut pas une armoire normande ou une borne Jeutel de 150 kg, mais on va faire avec. »
C’est comme ceci que le garage de mes parents se trouva investi par deux bras mécaniques articulés, pour le plus grand bonheur de toute la famille qui aime bien voir débarquer des objets hétéroclites dans la maison.

Le genre d'appareil pas très commun dans les chaumières, sauf peut-être chez le Dr Emmett Brown

Le genre d'appareil pas très commun dans les chaumières, sauf peut-être chez le Dr Emmett Brown

Dès que j’ai découvert ces objets merveilleux dans le garage de mes parents, je n’ai pas pu m’empêcher de me poser mille questions. Est-ce que ça fonctionne encore ? Avec quoi ça s’interface ? Comment le tester ? Qu’est-ce qu’on va pouvoir faire de marrant avec ? Et ainsi une longue quête commença.

Vue sous différents angles

Vue sous différents angles

Les machines sont estampillées « YOUPI – JD PRODUCTIQUE« . Je me mis immédiatement en quête d’informations.

Ma première conclusion fut la suivante : j’avais en face de moi le tout premier prototype du T-800. Ce robot a hérité d’un nom de code à consonance enfantine « Youpi » pour ne pas éveiller les soupçons sur ses capacités meurtrières inégalées. La société JD Productique n’est autre qu’une filiale française de Cyberdyne Systems. Mais cette hypothèse n’a pas tenu très longtemps, car la machine ne présentait aucune trace de BIOS bootant sur le réseau Skynet :p

La ressemblance est frappante. Ou pas.

La ressemblance est frappante. Ou pas.

Mes recherches suivantes, effectuées en n’étant pas sous l’emprise de la drogue, révélèrent que le robot Youpi est un formidable outil vendu principalement à des fins d’apprentissage, possédant 6 moteurs de grande précision, 5 degrés de liberté, et pilotable par le port parallèle. Je passe le détail sur les specs, elles sont disponibles ici.

Je m’attelle donc à tester rapidement le fonctionnement des robots. En vrac, il faut :

  • Nettoyer les composants, dégripper les engrenages et retendre les courroies.
  • Mettre à disposition un PC pour la partie software.
  • Construire un câble pour interconnecter les deux équipements.
Les éléments assurant la transmission ont subi les affres du temps et de la poussière

Les éléments assurant la transmission ont subi les affres du temps et de la poussière

Je décide de remettre à plus tard les tâches de nettoyage et passe directement à l’étape informatique. Je sélectionne parmi les machines entassées dans le garage quelques candidats pour le pilotage du bras mécanique. Le vainqueur est un foudre de guerre qui m’a été donné par Ben (merci à lui), jugez plutôt :

  • Processeur Pentium 233
  • Mémoire 64 Mo EDO
  • Disque dur IDE 850 Mo

Oui, ça fait rire, à l’époque du Phenom III et du Core i7, mais c’est dans les vieux pots qu’on fait les meilleures soupes. Et puis on est toujours content d’avoir du vieux matos sous la main pour ce type de bricolage.

Duel de titans

Duel de titans

J’installe une Debian sur le poste. La copie des fichiers lors de l’installation prend loooooooooooooooooongtemps. Pas parce que c’est du Debian hein, parce qu’on est sur du très vieux matos pas du tout optimisé. Comme dirait Indiana Jones, « sa place est dans un musée !« .

Installation de Debian sur l'antiquité

Installation de Debian sur l'antiquité

Pendant ce temps, je fouille dans les tiroirs pour en extraire un câble de liaison parallèle DB-25 à sacrifier. J’enlève sa coque de protection, repère et note les codes couleur des fils électriques.

09_dsc03375

25 fils à répertorier et à réorganiser, en avant la musique

Les correspondances couleurs/broches sont notées à l’arrache sur des feuilles volantes, comme d’habitude. Le brochage à utiliser est fourni dans la documentation du Youpi (page 22 pour les fainéants).

Mes notes de travail, toujours aussi soignées...

Mes notes de travail, toujours aussi soignées...

C’est ensuite parti pour la grande étape de soudure. Avec les moyens du bord. On dit toujours qu’il faut de bons outils pour bien travailler, et c’est vrai. J’avais à ma disposition un fer à la panne gigantesque, reposant dans une enclume faute de support plus approprié, avec le câble d’alim grossièrement rafistolé. Attention cher lecteur, chère lectrice, laisser reposer un fer à souder panne en haut est dangereux, ce câble et mes mains peuvent en témoigner. Inexorablement, avec un matériel pareil, pour mes soudures, j’ai fait du travail de cochon.

Plan de travail avec les moyens du bord

Plan de travail avec les moyens du bord

Note pour plus tard : idée de cadeau pour la fête des pères, un fer à souder à panne fine et un support de fer.

Connecteurs DB-25 après intervention

Connecteurs DB-25 après intervention

Une fois le travail de soudure terminé, on peut couper les fils restants ou les laisser dans le vide, l’important étant qu’ils ne créent pas de contact supplémentaire. On peut ensuite rajouter les capots en plastique.

Connecteurs DB-25 finalisés

Connecteurs DB-25 finalisés

On peut donc repartir sur le PC. Une fois le système installé, il faut juste ajouter quelques packages en fonction du langage de programmation choisi. J’ai orienté ma démarche vers le C car j’avait quelques exemples de programmation du Youpi en C sous la main. J’ai donc installé à minima les packages gcc, make, et leurs dépendances. Mais rien n’interdit d’utiliser Python, Perl, ou Microsoft Virtual Cobol 2009 Professionnal Edition si vous le trouvez. La partie backend du programme doit juste se contenter d’envoyer des octets sur le port parallèle de la machine.

Un morceau du programme à l'écran

Un morceau du programme à l'écran

Les premiers tests sont fructueux, les moteurs sont actionnés et le bras se met en mouvement. Dans la foulée je réalise une routine qui teste la rotation de tous les moteurs dans les deux sens.

Image de prévisualisation YouTube

C’est assez lent pour le moment, il y a des petits blocages par endroits, mais ça fonctionne bien dans l’ensemble. Un nettoyage (eh oui, l’étape volontairement oubliée) du robot de fond en comble devrait améliorer la situation.

Le second bras articulé a donné de moins bons résultats. Tous les moteurs ne fonctionnent pas. Selon les options, il finira peut-être en pièces détachées.

En ce qui concerne le frontend, rien n’a encore été développé. On peut imaginer en vrac un pilotage au clavier, au joystick, à la webcam, ou une routine totalement automatisée.

Il reste encore une question en suspens : quelle application vais-je pouvoir tirer de tout ce bazar, maintenant qu’il fonctionne à peu près ?

En plus il va falloir être original, en général ça existe déjà. Je me donne un délai de quelques mois pour y réfléchir et trouver une idée sympa. Cher lecteur, chère lectrice, toi qui es tombé sur cet article par hasard, tes idées m’intéressent.
Autres liens sur le même sujet :
Le site d’Edouard Forler
Le site du BTS-IRIS de Niort

Mise à jour du 09/12/2009 :

Vous avez été plusieurs à me contacter via le formulaire disponible sur ce site pour des demandes d’aide ou d’avis. Je suis disposé à vous aider, mais au lieu de me contacter directement, merci de poser vos questions en commentaire de cet article. Ainsi vos questions seront capitalisées et profiteront à la petite communauté de personnes qui utilisent un robot Youpi, et cela évitera que plusieurs personnes me posent la même question.