[Maximus] Un empileur de pions !
Débuté par Jbot, déc. 15 2010 04:12
161 réponses à ce sujet
#22
Posté 06 mars 2011 - 11:50
Bon, après une petite aprem à installer l'électronique, j'ai pu avancer un peu.
C'est un bon gros tas de cable mais bon c'est ça qu'on aime ! :D
J'avais déjà mis une p'tite image sur les asservissements que je fais sur ce robot mais je vais reprendre ici ;)
Comme on peut le voir, il y a un double asservissement:
- A droite : un PID en vitesse pour chaque moteur qui est fait par la carte RoboClaw
- A gauche : un asservissement polaire PD fait par une arduino
L'asservissement polaire consiste à asservir l'angle et la distance du robot.
En fait on asservit 2 moteurs virtuel, un qui représente la distance ( = (distance_gauche + distance_droite) / 2 ) et un qui représente l'angle ( = distance_droite - distance_gauche).
Aprés ça reste des PID et PD basique donc il faut régler les gains et c'est chiant :p
Lien d'une petite vidéo de test faite ce soir ;)
Bon, pour ce qui est de l'estimation de position c'est pas encore ça, je cherche pourquoi c'est si peu précis :s
Une grande partie de la théorie peut etre trouvé ici : Lien
C'est un bon gros tas de cable mais bon c'est ça qu'on aime ! :D
J'avais déjà mis une p'tite image sur les asservissements que je fais sur ce robot mais je vais reprendre ici ;)
Comme on peut le voir, il y a un double asservissement:
- A droite : un PID en vitesse pour chaque moteur qui est fait par la carte RoboClaw
- A gauche : un asservissement polaire PD fait par une arduino
L'asservissement polaire consiste à asservir l'angle et la distance du robot.
En fait on asservit 2 moteurs virtuel, un qui représente la distance ( = (distance_gauche + distance_droite) / 2 ) et un qui représente l'angle ( = distance_droite - distance_gauche).
Aprés ça reste des PID et PD basique donc il faut régler les gains et c'est chiant :p
Lien d'une petite vidéo de test faite ce soir ;)
Bon, pour ce qui est de l'estimation de position c'est pas encore ça, je cherche pourquoi c'est si peu précis :s
Une grande partie de la théorie peut etre trouvé ici : Lien
#23
Posté 07 mars 2011 - 07:37
Ouawww,
J'ai une question Jbot, est-ce que tu fais tout, tout seul, ou tu fais quand même parti d'un club robotique, parce que je trouve ca vraiment impressionnant !!!
Tu penses te présenter à Eurobot, ou c'est juste pour le fun ??
En tout cas, tu fais rêver, continue
Amicalement Philou
J'ai une question Jbot, est-ce que tu fais tout, tout seul, ou tu fais quand même parti d'un club robotique, parce que je trouve ca vraiment impressionnant !!!
Tu penses te présenter à Eurobot, ou c'est juste pour le fun ??
En tout cas, tu fais rêver, continue
Amicalement Philou
#24
Posté 07 mars 2011 - 08:42
Je fais tout tout seul sauf les pièces en métal, je me suis fait aider par un ami la. J'ai fais les plans et après on a fait les pièces. Sinon, non je ne fais pas parti d'un club de robotique, j'aime bien avoir mon robot à moi :p
Et oui je vais aller à Eurobot (la coupe de France uniquement), je suis déjà inscrit.
J'ai une nouvelle vidéo mais ma connexion internet chez moi est trop pourri, je l'uplaoderais demain au boulot :D
Et oui je vais aller à Eurobot (la coupe de France uniquement), je suis déjà inscrit.
J'ai une nouvelle vidéo mais ma connexion internet chez moi est trop pourri, je l'uplaoderais demain au boulot :D
#25
Posté 08 mars 2011 - 09:37
Voici une petite vidéo de l'estimation de position. ca marche plutot pas mal. Je lui fais faire des rectangle pour voir si il sait toujours ou il est, et il n'y a pas trop de déviation.
La vidéo de démo.
Bon, c'est reparti pour une semaine de boulot :'(
La vidéo de démo.
Bon, c'est reparti pour une semaine de boulot :'(
#27
Posté 09 mars 2011 - 09:24
Joli les asservissements et la précision... Tu le pousses et il revient pile-poil à sa position d'origine, je suis impressionné ! :p
Merci aussi d'avoir remis ton schéma pour la régulations. Ce qui me fait peur, c'est comment intégrer ça dans le code ? Dans ce que tu envois au moteurs, tu fais la somme de la partie proportionnelle, intégrales et dérivées ?
Je vais creuser un peu ça très bientôt.
Merci aussi d'avoir remis ton schéma pour la régulations. Ce qui me fait peur, c'est comment intégrer ça dans le code ? Dans ce que tu envois au moteurs, tu fais la somme de la partie proportionnelle, intégrales et dérivées ?
Je vais creuser un peu ça très bientôt.
#28
Posté 14 mars 2011 - 09:28
En effet, la consigne est la somme du P, du I et du D.
C'est pas vraiment du à intégrer dans du code, ce qui est chiant c'est le parametrage des constantes surtout.
Bon j'ai fais des ptits test avec une premiere version de pince avec des capteurs infrarouge pour chercher le pion. Ca commence à marcher :
Une vidéo de test de vision des pions
C'est pas vraiment du à intégrer dans du code, ce qui est chiant c'est le parametrage des constantes surtout.
Bon j'ai fais des ptits test avec une premiere version de pince avec des capteurs infrarouge pour chercher le pion. Ca commence à marcher :
Une vidéo de test de vision des pions
#29
Posté 14 mars 2011 - 12:53
Bravo, ça avance ! Il réagit vite et bien, c'est vraiment super.
Je trouverais ça terrible que tu gagnes la compétition en ayant travaillé seul dessus. :D
C'est quand l'Eurobot ?
En tout cas, fais-nous le plaisir de l'amener à Caprica³. Je veux bien venir porter la table avec toi si tu veux. ^^
Je trouverais ça terrible que tu gagnes la compétition en ayant travaillé seul dessus. :D
C'est quand l'Eurobot ?
En tout cas, fais-nous le plaisir de l'amener à Caprica³. Je veux bien venir porter la table avec toi si tu veux. ^^
#30
Posté 14 mars 2011 - 01:31
Heuu, je pense pas que je vais gagner hein :p
Deja si je fais dans les 50premiers sur 200équipes ca sera pas mal je pense.
La compétition c'est le 1er Juin.
Pour Caprica, je verrais, je viendrais ptete sans la table mais avec le robot, faut voir comment est le sol la bas, je m'en souviens pu (pq bon la table de 2metres dans le métro, t'as beau etre 2 c'est chiant quand meme :p)
Deja si je fais dans les 50premiers sur 200équipes ca sera pas mal je pense.
La compétition c'est le 1er Juin.
Pour Caprica, je verrais, je viendrais ptete sans la table mais avec le robot, faut voir comment est le sol la bas, je m'en souviens pu (pq bon la table de 2metres dans le métro, t'as beau etre 2 c'est chiant quand meme :p)
#33
Posté 17 mars 2011 - 11:19
Bon, j'ai un peu fait joujou avec le robot pour voir si en "conditions réelles" il arrive à attrapper un pion et le mettre ou il faut puis continuer sa route.
Il arrive bien a detecter le pion et a le poser ou il faut, par contre aprés il passe son temps a "re detecter" le meme pion. J'ai donc cherché une solution pour l'empecher de faire ça. Du coup, j'ai cherché comment savoir si pour aller a son prochain "waypoint", le pion n'est pas en travers de son chemin. Dit mathématiquement : Le segment (trajectoire) coupe t il le cercle (pion) ?
Aprés quelques recherches sur internet (bah oui j'ai pas fait de trigo depuis des années moi :D) j'ai trouvé que ca se resumais en gros à la résolution d'une équation du second degrés.
Les étapes sont donc :
Equation parametrique de la droite:
x = x0 + t*dx avec dx=x1-x0
y = y0 + t*dy avec dy=y1-y0
Equation du cercle:
(x-xc)^2 + (y-yc)^2 = R^2
substitution:
(t*dx+Ox)^2 + (t*dy+Oy)^2 = R^2 avec Ox=x0-xc et Oy=y0-yc
ce qui nous donne l'équation du second degré:
A*t^2 + B*t + C = 0
avec
A=dx^2+dy^2
B=2*(dx.Ox+dy.Oy)
C= Ox^2+Oy^2-R^2
Le but est de chercher si Delta est positif (il y a intersection) ou negatif.
sachant que delta = B^2 - 4*A*C
J'ai donc fait une ptite fonction C sur l'arduino mais je ne suis pas bien sur que ça marche :
{
char result = 0;
int delta = 0;
delta = pow(2*( (end->x-start->x)*(start->x-center->x) + (end->y-start->y)*(start->y-center->y) ),2) - 4*(pow(end->x-start->x, 2) + pow(end->y-start->y, 2))*(pow((start->x-center->x), 2)+pow((start->y-center->y),2)-pow(radius,2));
if( delta >= 0)
result = 1;
return result;
}[/code]
Donc si quelqu'un a une idée plus simple, ou dont il est sur que ca fonctionne, je suis prenneur :p
Au passage, ça a fait apparaitre un bug que je n'avais pas remarqué encore. Lorsque le robot dépose un pion et recule, il ne recule pas de la bonne distance, la commande suivante est exécutée beaucoup trop tot, il faut que j'investigue la dessus :D
Le robot est en remaniement mécanique aujourd'hui et demain donc je ferais des tests ce week-end ! (Normalement il aura sont toit et une plaque à l'arriere).
Voila, c'etait le racontage de vie de la journée :p
Il arrive bien a detecter le pion et a le poser ou il faut, par contre aprés il passe son temps a "re detecter" le meme pion. J'ai donc cherché une solution pour l'empecher de faire ça. Du coup, j'ai cherché comment savoir si pour aller a son prochain "waypoint", le pion n'est pas en travers de son chemin. Dit mathématiquement : Le segment (trajectoire) coupe t il le cercle (pion) ?
Aprés quelques recherches sur internet (bah oui j'ai pas fait de trigo depuis des années moi :D) j'ai trouvé que ca se resumais en gros à la résolution d'une équation du second degrés.
Les étapes sont donc :
Equation parametrique de la droite:
x = x0 + t*dx avec dx=x1-x0
y = y0 + t*dy avec dy=y1-y0
Equation du cercle:
(x-xc)^2 + (y-yc)^2 = R^2
substitution:
(t*dx+Ox)^2 + (t*dy+Oy)^2 = R^2 avec Ox=x0-xc et Oy=y0-yc
ce qui nous donne l'équation du second degré:
A*t^2 + B*t + C = 0
avec
A=dx^2+dy^2
B=2*(dx.Ox+dy.Oy)
C= Ox^2+Oy^2-R^2
Le but est de chercher si Delta est positif (il y a intersection) ou negatif.
sachant que delta = B^2 - 4*A*C
J'ai donc fait une ptite fonction C sur l'arduino mais je ne suis pas bien sur que ça marche :
char trajectory_intersection_pawn(struct Point *start, struct Point *end, struct Point *center, int radius)
{
char result = 0;
int delta = 0;
delta = pow(2*( (end->x-start->x)*(start->x-center->x) + (end->y-start->y)*(start->y-center->y) ),2) - 4*(pow(end->x-start->x, 2) + pow(end->y-start->y, 2))*(pow((start->x-center->x), 2)+pow((start->y-center->y),2)-pow(radius,2));
if( delta >= 0)
result = 1;
return result;
}[/code]
Donc si quelqu'un a une idée plus simple, ou dont il est sur que ca fonctionne, je suis prenneur :p
Au passage, ça a fait apparaitre un bug que je n'avais pas remarqué encore. Lorsque le robot dépose un pion et recule, il ne recule pas de la bonne distance, la commande suivante est exécutée beaucoup trop tot, il faut que j'investigue la dessus :D
Le robot est en remaniement mécanique aujourd'hui et demain donc je ferais des tests ce week-end ! (Normalement il aura sont toit et une plaque à l'arriere).
Voila, c'etait le racontage de vie de la journée :p
#35
Posté 18 mars 2011 - 07:33
Hop, et voila la suite de la mécanique de Maximus !
Le robot nu :
Le toit du robot :
L'avant du robot avec le trou pour le connecteur DB25 :
Voila !
Maintenant il ne reste plus qu'a remettre tous les câbles pour refaire joujou avec.
Je mettrais surement une vidéo ce week-end si il se décide à marcher comme il faut :D
Ha oui, j'ai reçu mes nouvelles batteries pour la coupe aussi !
Le robot nu :
Le toit du robot :
L'avant du robot avec le trou pour le connecteur DB25 :
Voila !
Maintenant il ne reste plus qu'a remettre tous les câbles pour refaire joujou avec.
Je mettrais surement une vidéo ce week-end si il se décide à marcher comme il faut :D
Ha oui, j'ai reçu mes nouvelles batteries pour la coupe aussi !
#37
Posté 19 mars 2011 - 05:11
En effet ce sont 3 LiFe 2S de 4500mAH. J'en utiliserais que 2 et j'en ai une de rechange au cas ou ^^
Après midi galère à remonter l'elec avec des courts circuits, j'ai enfin trouvé ou étaient les problèmes donc j'ai presque fini de le remonter...
J'me suis fait le connecteur pour passer de l'avant à l'arrière du robot du coup :
Coté avant :
Coté arrière :
Après midi galère à remonter l'elec avec des courts circuits, j'ai enfin trouvé ou étaient les problèmes donc j'ai presque fini de le remonter...
J'me suis fait le connecteur pour passer de l'avant à l'arrière du robot du coup :
Coté avant :
Coté arrière :
Répondre à ce sujet
0 utilisateur(s) li(sen)t ce sujet
0 members, 0 guests, 0 anonymous users