@mike118 : Je ne comprend pas comment tu as trouvé 2*alpha*AB = arc BD ?
Lorsque j'utilise un produit en croix pour retrouver la formule :
un tour ----> perimètre
d'où
2*PI ----> 2*PI*AB
alpha ----> arc BD= (2*PI*AB*alpha)/2*PI = AB*alpha
Et par la suite,
arc CF - arc BD = alpha*BC
alpha = (arc CF - arc BD)/BC
Bref, j'aurais besoin d'explication sur ton post, car je perds le facteur 2 lorsque j'essaye de comprend. Merci à l'avance !
- Robot Maker
- → Affichage d'un profil : Messages: FJProd
Statistiques de la communauté
- Groupe Membres
- Messages 14
- Visites sur le profil 4 231
- Titre Nouveau membre
- Âge Âge inconnu
- Date de naissance Anniversaire inconnu
-
Gender
Non spécifié
Messages que j'ai postés
Dans le sujet : robot autonome
29 août 2012 - 05:36
Dans le sujet : robot autonome
28 août 2012 - 06:07
Aaaaaaaaaaaah ca marche merci beaucoup pour votre aide !!!!
Pour l'instant il est en java, mais on le mettra sur arduino en plus ce n'est pas un 8bit que l'on a mais un 32bit... Pour ceux qui veulent une vidéo c'est ici. Pfou voilà une bonne chose de faite... encore merci !!!!!
PS : @Hexa Emails, je me suis pris une ChipKit Uno32, elle à la même forme q'une aruino, le même code, le même prix , sauf qu'elle à 2X plus d'entrée/sortie, et un PIC 32bit. Par contre vu que c'est un PIC, certaines libraries arduino ne sont pas encore compatibles, et dans ce cas il faut la programmer par MPLAB.... on peut pas tout avoir

PS : @Hexa Emails, je me suis pris une ChipKit Uno32, elle à la même forme q'une aruino, le même code, le même prix , sauf qu'elle à 2X plus d'entrée/sortie, et un PIC 32bit. Par contre vu que c'est un PIC, certaines libraries arduino ne sont pas encore compatibles, et dans ce cas il faut la programmer par MPLAB.... on peut pas tout avoir

Dans le sujet : robot autonome
28 août 2012 - 11:02
Visiblement je commencais déjà à dormir en écrivant le post d'hier...
Les calculs simples comme ceux de "left_mm" et "right_mm" peuvent être fait sur l'arduino. Mais ensuite il vaut mieux envoyer ses valeurs à l'ordi pour les calculs faisant intervenir des cos ou sin, sinon l'arduino va être débordée.
Les calculs simples comme ceux de "left_mm" et "right_mm" peuvent être fait sur l'arduino. Mais ensuite il vaut mieux envoyer ses valeurs à l'ordi pour les calculs faisant intervenir des cos ou sin, sinon l'arduino va être débordée.
Dans le sujet : robot autonome
27 août 2012 - 11:57
Merci beaucoup pour ce lien et ce fameux Jbot !!!
Son algorithme est très bien, mais je bloque encore sur cette ligne :
theta += (right_mm - left_mm) / Entraxe;
Donc d-theta = (Droite-Gauche)/Entraxe
Approximation.tiff 134,57 Ko
175 téléchargement(s)
Si d-theta est faible, nous pouvons supposer que le triangle est rectangle en I.
Donc sin(d-theta) = (Droite-Gauche)/Entraxe
Si d-theta est faible, on utilise également l'approximation de Gauss :
sin(d-theta- = d-theta = (Droite-Gauche)/Entraxe.
Est-ce cela derrière cette ligne de code ?
A partir de combien peut-on considèrer que d-theta est faible, pour évité que sa valeur soit trop "arrondie" ?
Cette valeur va par la suite servir à localiser le robot et l'obstacle, le degrès d'erreur ne risque pas de fausser la cartographie ?
Je sais ça fais beaucoup de questions, merci à l'avance pour vos réponses.
Son algorithme est très bien, mais je bloque encore sur cette ligne :
theta += (right_mm - left_mm) / Entraxe;
Donc d-theta = (Droite-Gauche)/Entraxe

Si d-theta est faible, nous pouvons supposer que le triangle est rectangle en I.
Donc sin(d-theta) = (Droite-Gauche)/Entraxe
Si d-theta est faible, on utilise également l'approximation de Gauss :
sin(d-theta- = d-theta = (Droite-Gauche)/Entraxe.
Est-ce cela derrière cette ligne de code ?
A partir de combien peut-on considèrer que d-theta est faible, pour évité que sa valeur soit trop "arrondie" ?
Cette valeur va par la suite servir à localiser le robot et l'obstacle, le degrès d'erreur ne risque pas de fausser la cartographie ?
Je sais ça fais beaucoup de questions, merci à l'avance pour vos réponses.
Dans le sujet : robot autonome
27 août 2012 - 08:30
Pour commencer je vous remercie énormément de votre aide et de vote intérêt pour ce sujet.
J'ai déjà essayé de faire de l'odométrie avec la méthode du "Trapèze", resultat le code fait 120 lignes !!!!
(sans rire vous pouvez le voir sur le blog ici). Donc quand je constate qu'avec la même méthode le cLubElek plit le problème en 10 lignes et wikipédia en seulement 5 lignes, je veux la même chose.
Voici le code java de la méthode wiki :
Lorsque j'utilise la méthode add avec VitGauche = 0.8 m/s, VitDroite = 0.5m/s, temps = 0.065s, 100 fois de suite. le déplacement du robot ne correspond pas à un cercle. Pourtant l'odométrie devrait percevoir que le robot tourne à droite, mais je ne vois rien.
Au cours de ce "déplacement" la postion de X varit de quelques centièmes, par contre celle de Y chute pour atteindre les -4000
Je suis actuellement entrain de vérifier si je n'ai pas mélangé mon code "Trapèze" avec celui là, ou si j'ai gardé les même unités tout le long. On ne sait jamais avec moi
Meric de votre réponse pour toute autre proposition ou si vous pouvez m'expliquer les calculs de wikipédia.
J'ai déjà essayé de faire de l'odométrie avec la méthode du "Trapèze", resultat le code fait 120 lignes !!!!


Voici le code java de la méthode wiki :
public void add(double roueG, double roueD,int temps, int angleCapteur, int distance) { //---------------------------------------------------------- // Reperer sur la carte le robot, et son angle //---------------------------------------------------------- double v = (roueD+roueG)/2; double R = (D/2)*(roueD+roueG)/(roueD-roueG); double da = ((roueD*temps+roueG*temps)/2)/R; double Xo = X_Robot-R*sin(a); double Yo = Y_Robot+R*sin(a); a = a+da; X_Robot = Xo +R*sin(a); Y_Robot = Yo - R*cos(a); System.out.println("X_Robot : "+X_Robot+" Y_Robot : "+Y_Robot+ " a : "+a); //---------------------------------------------------------------------- // Le robot est placé dans le repére. // Il faut maintenant placer l'obsatcle dans ce repére. // Pour ce faire nous disposons de la distance de l'obstacle et son angle. //---------------------------------------------------------------------- // On transforme la position trigonométrique de l'obstacle en position // cartésienne avec le robot comme origine. double x_obstacle = distance*cos(a+angleCapteur); double y_obstacle = distance*sin(a+angleCapteur); // On passe du robot comme origine à celui de la carte. // On change de repère donc on modifie les coordonnées int X_Obstacle = (int) (X_Robot + x_obstacle); int Y_Obstacle = (int) (Y_Robot + y_obstacle); // On ajoute à la liste, sauvegarde et dessine sur l'écran liste.add(new Obstacle(X_Obstacle ,Y_Obstacle)); sauv.enregistrer(liste); wifi.drawWifi(X_Obstacle, Y_Obstacle, (int) X_Robot, (int) Y_Robot); graphique.draw((int) X_Robot, (int) Y_Robot, 'R'); }
Lorsque j'utilise la méthode add avec VitGauche = 0.8 m/s, VitDroite = 0.5m/s, temps = 0.065s, 100 fois de suite. le déplacement du robot ne correspond pas à un cercle. Pourtant l'odométrie devrait percevoir que le robot tourne à droite, mais je ne vois rien.
Au cours de ce "déplacement" la postion de X varit de quelques centièmes, par contre celle de Y chute pour atteindre les -4000

Je suis actuellement entrain de vérifier si je n'ai pas mélangé mon code "Trapèze" avec celui là, ou si j'ai gardé les même unités tout le long. On ne sait jamais avec moi

Meric de votre réponse pour toute autre proposition ou si vous pouvez m'expliquer les calculs de wikipédia.
- Robot Maker
- → Affichage d'un profil : Messages: FJProd
- Privacy Policy