dimanche 27 janvier 2013

Reglage du PID fonction de la puissance des batteries

Il y a quelques jours, je me suis rendu compte que la charge des batteries avait une influence sur le comportement du robot. La solution la plus simple que j'ai trouvé a été de programmer un mesureur de puissance.
Assez simplement je fais avancer le robot à 100% de puissance durant 2 secondes et il enregistre sa vitesse maxi. En fonction de sa vitesse maxi, le robot règle Kp qu'il réutilisera durant ses déplacements.

La video ci-dessous montre le résultat :
- A gauche les batteries sont quasi vides
- A droite les batteries viennent d'être rechargées
On ne constate pas de différence entre ces deux videos mis à part le fait que le robot est plus rapide à droite. Et pourtant les Kp sont bien différents !


1- Le robot avance durant 2 sec à 100% de puissance
2- Le robot règle le PID en fonction de la vitesse max mesurée
3- Le robot retourne à sa position d'origine
4- Le robot reprend le cap de départ

A tester sur table et parcours normal !

jeudi 24 janvier 2013

Lego Mindstorms et les batteries ...

Il faut croire que 2012 ne m'a pas suffisament servi de leçon !

L'an dernier je m'étais rendu compte que les batteries avaient une incidence sur les performances du robot. Principalement le robot était certes plus rapide avec des batteries complètement rechargées mais il avait aussi un temps de rafraichissement et de calcul plus rapide. Etant donné que le robot n'était pas très précis (quelques centimètres de décalage après plusieurs mètres de déplacement ...) je comptais beaucoup sur le fait que le robot réalisait le même parcours à chaque match. C'est pour cette raison que je n'avais pas changé les batteries du robot principal durant toute la compétition ! J'avais changé les batteries du robot secondaire le samedi midi après les 5 matchs de sélection, ainsi le robot secondaire (qui n'avait pas d'odométrie) n'avait pas eu un comportement habituel en 8ème de final et rata les deux actions qu'il devait réalisé !



Hier j'expliquais que j'avais réglé le PID de déplacement du robot principal et que je devais le tester aujourd'hui sur la table de jeu de l'ENSIM... mais cette nuit j'ai mis à recharger les piles du robot principal et le comportement du robot a donc forcément été différent !
Tant qu'à faire, autant en profiter pour vous faire partager la diffèrence entre batterie pleine (affiche 8,5 sur le logiciel NXT) et batterie quasi vide (affiche 7 sur le logiciel NXT) :

 
Le robot était réglé sur Kp = 3,5 et Kd = 7  ; on voit clairement que le robot ondule beaucoup plus. Après quelques tests, le robot a une trajectoire beaucoup plus propre à Kp = 2 et Kd = 6. Que Kd soit à 6 ou 7 n'a pas grande incidence, par contre que Kp passe de 3,5 à 2 me dérange beaucoup plus ! Cela veut dire que au vu de mon programme actuel il faudrait que je fasse évoluer Kp en fonction de la charge des batteries ... Laissez moi quelques jours de réflexion et je vous dirais ce que j'ai trouvé pour résoudre ce problème !
 


J'en profite, pour les plus observateurs, pour vous signalez que les tests affichés hier ont été réalisés à 75% de puissance. Ceux d'aujourd'hui étaient à 100%. Il faut donc 3,5 secondes au robot principal pour parcourir 700 mm environ (une rotation puis une ligne droite). Le robot se déplace donc à 200 mm par seconde... Bref, il est lent.

mercredi 23 janvier 2013

Déplacement de P à PID

Programmation de l'asservissement PID sur le cap à prendre :

Déplacement de P ...
Il y a encore quelques jours, le robot se déplaçait très simplement du point A au point B avec le bloc Avancer tel que décrit ci-dessus.

MODE AVANCE :
- Vmot, la vitesse de consigne des roues motrices, est calculé dans le bloc Calc_Acc&Dec principalement en fonction de la distance entre la position du robot et les coordonnées cibles, mais aussi en fonction de l'adversaire (s'il est devant le robot).
- AlphaRC, la diffèrence entre le cap vers la cible et le cap du robot, est positionné en direct sur le volant du bloc et pilote donc la différence entre les vitesses demandées à chaque roue motrice. Bien entendu, si le volant n'est pas piloté comme on le souhaite, on peut modifier la commande par l'intermediaire d'un coefficient proportionnel que nous appellerons Kp.

MODE ROTATION :
Lorsque AlphaRC est superieur à AlphaRotMax, le robot tourne sur lui même afin de revenir dans le mode avance.

Si l'on applique ce type de programmation à un programme demandant au robot d'aller exactement à droite à 700mm, cela peut donner les résultats suivant :
Le robot est à 90° de sa cible, il tourne donc sur lui même jusqu'à ce que AlphaRC soit inférieur à 50° puis avance vers la cible à 700 mm
 
A Kp = 0,75 concrêtement le robot dérive tellement que le mode Rotation s'active deux fois. Kp n'est donc pas assez fort.

A Kp = 1,5 le robot suit beaucoup mieux le cap mais il n'arrive jamais à s'aligner correctement et le robot n'atteindra jamais exactement la cible. Kp doit encore être augmenté.
A Kp = 3 le robot arrive encore mieux à suivre le cap, on frôle régulièrement AlphaRC=0.
A Kp = 4 le robot alterne d'un côté et de l'autre de l'alignement parfait ce qui fait que le robot ondule vers sa cible. Il parcours un peu plus de distance et arrive donc à sa cible après 6 secondes alors qu'il n'en fallait que 5 secondes pour Kp = 3 ou 1,5.
A Kp = 5 le robot alterne encore de chaque côté du 0 mais ne se stabilise plus contrairement à Kp = 4. Kp est donc trop fort.

On pourrait donc encore faire d'autres essais entre Kp = 3 et 4 car à 3 nous avons un minimum de précision mais on optimise le temps de déplacement, à 4 par contre nous sommes plus précis mais nous perdons en rapidité. Dans ce cas, nous n'avons qu'un asservissement Proportionnel.


... à PID !

L'asservissement PID consiste à rajouter au coefficient Kp proportionnel un coefficient Intégrateur Ki et un coefficient Dérivé Kd. Dans mon cas, je vais suivre les conseils de Gargamel (RCVA) qui invite à ne pas mettre de coefficient Ki puisque cela engendre plus de perturbations qu'autre chose. L'intégrateur a pour fonction de supprimer ou réduire l'erreur résiduelle entre la consigne et le résultat, je vais donc installer le coefficient Dérivé Kd et si je n'ai pas d'erreur, je n'aurais pas besoin de Ki !
En terme de calcul, il me faut donc rajouter à AlphaRC x Kp, le calcul de la dérivé x Kd :
Pour le calcul dérivé, rien de plus simple puisque je prend la diffèrence entre AlphaR (le cap du robot à l'instant t) et AlphaP (le cap du robot à l'instant t-1) à laquelle je multiplie un coefficient Kd.

Reprenons le programme précédent et appliquons une valeur diffèrente de 0 à Kd.
Pour ce cas de figure, j'ai sélectionné Kp à 3,5.
A Kd = 0, on retrouve l'oscillation autour de 0.
A Kd = 7, on voit bien l'influence du coefficient Kd qui amorti l'oscillation jusqu'à rendre presque plate la courbe.
A Kd = 10, Kd est trop fort puisqu'il crée des variations qu'il était censé supprimer.

Prenons donc Kp = 3,5 et Kd = 7 et voyons le résultat sur le comportement du robot durant son déplacement :
 
Il n'y a pas photo, le robot va directement à l'objectif en ligne droite malgré la rotation de 90° ! De plus, le robot parcours la distance dans le meilleur temps obtenu jusque là à Kp = 3.

Conclusion :
Au vu du résultat, je ne vois pas l'intérêt de programmer le coefficient Intégrateur Ki, mais pour être sûr que cela fonctionne correctement je vais appliquer ces réglages sur le programme de début janvier afin de constater la diffèrence sur la table de jeu. Résultat j'espere demain après un petit saut à l'ENSIM ELEC !

vendredi 11 janvier 2013

Participation à la coupe de Belgique !

Lorsque vous êtes arrivés en finale de la coupe de France de Robotique, vous êtes sûr d'affronter des équipes étrangères lors d'Eurobot, la coupe d'Europe de Robotique !

Mais il y a plus simple pour affronter d'autres équipes, françaises ou étrangères, puisque certains clubs et écoles organisent des tournois amicaux. Mais vous avez aussi la possibilité de vous inscrire aux coupes d'autres pays parmis (dans le désordre) :
- la Coupe de Suisse
- la Coupe de Belgique
- la Coupe d'Espagne
- la Coupe de Serbie
- la Coupe d'Allemagne
- la Coupe d'Autriche
- la Coupe d'Algérie
- la Coupe d'Angleterre
- la Coupe de Roumanie
- la Coupe d'Italie
- la Coupe de la République Tchèque
Autant de rendez vous pour tester votre robot dans un climat d'échange et de compétition !


J'ai reçu aujourd'hui la confirmation de la participation d'OLEG à la coupe de Belgique qui se déroulera au mois d'Avril, un bon mois avant la coupe de France.
Sauf erreur de ma part ou annulation d'autres équipes, je devrais y retrouver :
- Roboter Club Aachen (Allemagne)
- uART (France)
- Cybernetique en Nord (France)
- Neobot (France)
- APB Team (France)
- Cubot (France)
- Sudriabotik (France)
- Supelec Metz (France)
- ESEO Angers (France)
- CVRA (Suisse)
entre autres étrangers (je n'ai pas la liste complète) et je n'ai pas nommé les équipes belges !

L'organisation nous invite à prendre au serieu cette coupe et à venir dans l'intention de s'y homologuer... Mais regardez moi cette belle brochette d'équipes étrangères sélectionnée : ils ne viendront pas simplement pour s'homologuer ! Et moi non plus !


mardi 8 janvier 2013

L'historique et le prochain Mindstorms EV3 !

L'historique :

Tout commença en 1998 avec la brique RCX Lego mettant à disposition des plus ou moins jeunes une boite Lego où l'on retrouvait des pièces legos mais surtout une brique de programmation, des capteurs et des moteurs pour pouvoir donner du mouvement à ces briques. Le début de la robotique version LEGO !

En 2006, la boite fait peau neuve ainsi que le design et le fonctionnement de l'ensemble. On retrouve des pièces LEGO Technic, un capteur de luminosité, un capteur de son, un capteur ultra son et un capteur de contact. Côté mouvements vous avez 3 servomoteurs pilotés par une brique qui a bien changé !
(Toutes les infos sur wikipedia)

Photo d'un RCX prise par dessus Photo d'un NXT prise par dessus
Brique 1.0                         Brique 2.0

En 2009-10, la boite évolue encore avec la même brique de programmation. Ce qui change c'est que vous avez deux capteurs de contact au lieu d'un seul, le capteur de son disparait. Le capteur de luminosité est remplacé par un vrai capteur de couleur ! De plus, la programmation évolue puisque là où on travaillait en nombre entier, la brique connait maintenant la virgule et les chiffres derrière ! Ce qu'il y a de bien, c'est qu'avec une petite mise à jour, votre brique de 2006 bénéficie des capacités de la brique 2009.

Dommage, on évolue mais on aurait aimé profiter de plus de technologie encore ! Il faudra encore attendre quelques mois et mettre un peu de côté puisque le Mindstorms EV3 est prévu pour le second semestre 2013 à 350€ !

Le Mindstorm EV3 :

Voici sans plus attendre l'évolution n°3 du Mindstorm !
Côté brique :    Une sacré diffèrence de design !
- Il y a deux boutons en plus (celui du haut et du bas) puisque le bouton retour est en haut à gauche. Beaucoup plus pratique pour s'en servir comme télécommande (les connaisseurs comprendront !).
- Le port USB passe en 2.0 et il y a la possibilité de mettre une carte SD, bien pratique aussi !
- Si je ne dis pas de bêtises, cela ne fonctionne plus à piles puisqu'il y a une batterie intégrée. Ca c'est très très bien !
- Les programmes pourront être modifiés directement sur la brique sans passer par l'ordinateur. Je veux bien voir ce que ça donne ...

A l'intérieur, un processeur Arm9 plus rapide, 16 MB de mémoire flash embarquée, 64 MB de mémoire RAM, un OS Linux, l'interconnexion possible de plusieurs briques "intelligentes" EV3 entre elles, un haut-parleur, toujours le Bluetooth 2.1. Le tout sera compatible iOS et Android (suivez mon regard !) et la rétro-compatibilité avec les produits LEGO Mindstorms NXT est assurée.
La programmation devrait rester similaire (icônes à configurer).


Côté capteurs et actionneurs :
- 3 servo-moteurs interactifs qui changent radicalement dont un qui doit avoir des capacités diffèrentes des deux autres tellement la forme est diffèrente.
- deux capteurs de contact, un capteur Infra Rouge qui remplace l'ultra son même s'il prend la même tête et un capteur de couleurs amélioré (détection de 6 couleurs et de l'absence de couleur).
- A confirmer mais j'ai cru voir une télécommande ou quelque chose que le robot peut suivre ou retrouver ? (je confirme, voyez la photo suivante !)

Le reste de la boîte :
Le kit sera livré avec 594 pièces LEGO Technic.
Les instructions livrées avec le set permettront de créer 17 robots différents !


Je pari que vous voulez voir des vidéos ? Les voilà !
Salon CES de Las Vegas
Présentation LEGO

samedi 5 janvier 2013

La première pile de verres !


Voilà, c'est fait ! Après plusieurs versions mécanique, après quelques heures de programmation et de réglages, voici la première pile de verres réalisée en mode autonome !
Puisque j'étais à l'ENSIM ELEC, j'en ai profité pour valider l'empilage à partir des coordonnées réelles (sur table donc) et j'ai aussi testé le système de déballage de cadeaux !

Voici la vidéo :

Il y a encore pleins de choses à améliorer mais ça fait super plaisir de voir que ça fonctionne très bien !

Oleg 2013 : Le résumé


Pour ce début d'année, l'organisation Planète Sciences demande à toutes les équipes de présenter leur projet sur une page internet. Toutes ces pages seront ensuite mises à disposition à l'issu de la coupe de Robotique (mai 2013) afin que les équipes puissent avoir plus d'infos sur les équipes qu'ils auraient pu rencontrer.
Vous trouverez donc ci-dessous le résumé d'Oleg :
- L'objectif de l'équipe
- Le concept
- La stratégie 2013
 
 
Oleg, un robot à base Lego qui participe à la coupe de France de robotique !

Les objectifs de l'équipe :

L'objectif principal est de montrer que l'on peut faire des choses efficaces avec peu de budget.
Pour cela, nous devons donc :
- avoir quelque chose qui fonctionne à tous les coups (fiabilité)
- avoir quelque chose qui n'est pas très coûteux
- réaliser des actions payantes (classement final)

Le concept Oleg :

Le concept est très simple : acheter quelque chose du commerce, qui fonctionne, facile à utiliser, à construire et qui ne coûte pas trop cher.

Nous avons donc acheter 2 boîtes Lego Mindstorms pour disposer de tout un système programmable avec quelques moteurs et capteurs. (coût : 2x250 €) Nous programmons avec le logiciel fourni (développé par Texas Instruments). Il a le défaut d'être lent lorsque cela devient compliqué mais il est très visuel et ne requiert aucune compétence !

La boîte Lego Mindstorms et la démonstration de la connectique
Interface du logiciel de programmation

Pour permettre au robot de se localiser correctement sur la table de jeu, nous avons investi dans deux capteurs de rotation Lego que nous utilisons pour les roues codeuses. (coût 2x60 €)

Le tout est assemblé non pas avec des legos mais avec des plaques de polycarbonate transparentes de 8 mm d'épaisseur. Cela permet de voir ce qu'il se passe à l'intérieur du robot, c'est facile à usiner et pas trop cher. Pour donner un ordre d'idée la plaque achetée en 2012 (1m sur 1m20 coût 70€) a permis de faire deux robots en 2012 et un en 2013 !

Les robots Oleg et Olaf de 2012


Il faut rajouter a ces quelques 700€, l'achat de quelques outils(Perceuse, Forêts, Scie, Tarauds, ...) et quelques élèments de visserie pour l'assemblage si on ne les possède pas.


La stratégie 2013 :

Nous avons choisi de ne pas s'occuper des cerises car le cumul des actions (aspirer, trier & lancer) fait que cette action est trop compliquée pour nous.
La funny action n'est pas prioritaire, elle sera faite selon le temps disponible et la place restante dans le robot.
Les deux actions principales sont :
- L'empilage des verres
- L'activation des cadeaux / souffler les bougies (un seul et même actionneur)
Le robot principal pourra réaliser ces trois actions.
Si nous avons le temps et si on nous prête une autre boîte Lego Mindstorms, nous fabriquerons un robot secondaire qui ne s'occupera que des bougies ou des cadeaux.

 
 
Empilage des verres
 
Déballage d'un cadeau
 

mardi 1 janvier 2013

Bonne année 2013 !

Toute l'équipe d'Oleg vous souhaite une très bonne année 2013 !

Ici l'année commence très bien ici avec un gros orteil cassé ! Déplacer une table de 40 kg avec le plus alcoolisé des invités fut une très mauvaise idée ...


Mais j'ai une bonne nouvelle, mes réglages sur l'odométrie sont quasi parfait (pour des lego) ! Pour preuve ci-dessous le parcours réalisé ce soir par le robot. Le robot part du point X:1350 Y:375 (comme s'il partait du côté rouge de la table, côté cadeaux) puis se déplace vers le point 1300;1300 puis 900;1300 et enfin le dernier point 900;300. Ces points ne correspondent à rien d'autre que les dimensions de ma table de cuisine.
Le reste de la courbe, jusqu'aux coordonnées 1450;250 est obtenu en déplaçant le robot manuellement jusqu'à un repère physique que j'ai mis sur la table.


 
 

Le but était donc d'observer la trajectoire vue par le robot et de vérifier, après plusieurs rotations et lignes plus ou moins droites, que les coordonnées vues par le robot étaient proches des coordonnées réelles.
En conclusion, après un trajet toutes directions confondues de 3220 mm, le robot s'est retrouvé décalé de moins de 5 mm en X et en Y ! C'est peut être 10 fois mieux que l'an dernier !