Forum des NXTiens

   Le 29/12/14 à 12h16 Citer      

Booster Fronde

Groupe: Membre

Sexe:
Inscrit le: 29/12/14
Messages: 8
Bonjour à tous !

Voilà j’aimerais réussir à programmer mon robot lego mindstorm nxt3 afin qu'il puisse se repérer dans l'espace grâce a un plan imaginaire X/Y afin d'atteindre de puis un point A un point B tout en évitant les obstacles grâce a un capteur à ultrason/contact.

Une zone sera délimité par du ruban rouge ( capteur de couleur ) et le point B par du ruban bleu.

des avis ?

Merci d'avance ! :)

pm    
   Le 29/12/14 à 15h43 Citer      

Administrateur

Groupe: Administrateur

Sexe:
Inscrit le: 24/04/10
Messages: 129
Lieu: France
Bonjour et bienvenue,

Beau projet, bravo.

Mes avis ... heu ... !

Transformer des coordonnées cartésiennes en coordonnées angulaires, c'est faisables.

Mais attention aux erreurs odométriques !

Création d'une carte locale par grille d'occupation ... Faisable également, mais joli travail en perspective !

Bref, il y a du boulot.

Bon courage et n'hésite pas à demander de l'aide sur ce forum. :)
____________________

pm http://www.sitedunxt.fr    
   Le 29/12/14 à 16h36 Citer      

Booster Fronde

Groupe: Membre

Sexe:
Inscrit le: 29/12/14
Messages: 8
Merci de votre réponse, nous aimerions savoir comment programmer ce type d'action avec le logiciel lego mindstorm nxt , sachant que nous avons a notre disposition que des blocs de programmation standard ? Faut-il en télécharger ? Et si oui où ?

Cordialement,
Le groupe de TPE

pm    
   Le 30/12/14 à 09h50 Citer      

Booster Bazooka

Groupe: Membre

Sexe:
Inscrit le: 03/06/13
Messages: 125
Bonjour,

Ce projet va demander plus de programmation que de construction :d. Donc vous aurez en effet à utiliser d'autres blocs que ceux fournis par défaut sur le logiciel, en particulier des blocs de trigonométrie que vous pouvez télécharger au bas de cette page. ;)

Mais, comme l'a dit FRED_80, attention! Le moindre décalage dans l'angle du véhicule va tout fausser dans les calculs des coordonnées ! :hum Pour résoudre ce problème, soit vous pouvez utiliser cette construction de John Hansen, soit utiliser le capteur boussole mais gare aux objets magnétiques !

Vous pouvez également vous débrouiller avec une construction simple, mais un petit avertissement: ne surtout pas utiliser de chenilles, mais plutôt deux roues et une roue libre (vous pourrez d'ailleurs avoir tous les détails sur le tutoriel de ce site La meilleur façon de tourner, particulièrement la page 4) à cause des frottements engendrés par les chenilles.

Voilà, je ne vois pas quoi dire de plus :d

Fou_de_lego



Edité par fou_de_lego Le 30/12/14 à 09h52
____________________
Bienvenue dans le monde du lego ! :d______Vous pouvez aller voir mon propre site pour voir mes constructions: https://sites.google.com/site/legonxttutorielsetcreations/home

pm    
   Le 30/12/14 à 12h06 Citer      

Booster Fronde

Groupe: Membre

Sexe:
Inscrit le: 29/12/14
Messages: 8
Merci pour votre réponse !

Nous avons donc télécharger le HiTechnic Compass Sensor Block for Mindstorms NXT Software et le HiTechnic Sin/Cos Math Block for Mindstorms NXT 2.0 Software, en espérant que ça soit les bon !

Nous allons utiliser le capteur boussole car nous n'avons pas le matériel nécessaire pour construire le robot de john hansen !

Nous avons un robot avec deux roues avec servomoteur et une roue libre à l'arrière.

De plus , nous lui avons équiper un capteur à ultrason (nous avons aussi un capteur couleur et un capteur contact, mais nous avons décider de nous concentré sur le capteur à ultrason).

Pour programmer la boussole, nous avons du mal à comprendre comment marche la programmation au niveau des "plug" :(

pm    
   Le 30/12/14 à 12h49 Citer      

Booster Bazooka

Groupe: Membre

Sexe:
Inscrit le: 03/06/13
Messages: 125
Les plugs sont des entrées ou sorties qui permettent de récupérer des valeurs obtenues par le capteur par exemple, ou alors rentrer des valeurs comme paramètres d'un bloc.
Tu peux aller voir ce tutoriel sur les fils de données sur ce site qui t'expliqera tout... :top
____________________
Bienvenue dans le monde du lego ! :d______Vous pouvez aller voir mon propre site pour voir mes constructions: https://sites.google.com/site/legonxttutorielsetcreations/home

pm    
   Le 30/12/14 à 14h45 Citer      

Booster Fronde

Groupe: Membre

Sexe:
Inscrit le: 29/12/14
Messages: 8
Merci bien :)

pm    
   Le 11/01/15 à 19h33 Citer      

Booster Fronde

Groupe: Membre

Sexe:
Inscrit le: 29/12/14
Messages: 8
Re bonjour à tous !


Nous avons importer nos blocs sur le logicielle, ils semble fonctionner il ne reste plus qu'a les programmer :)

Auriez vous des tuto pour les programmer ? Ou bien des astuces à nous fournir avant de commencer ?

pm    
   Le 12/01/15 à 17h12 Citer      

Administrateur

Groupe: Administrateur

Sexe:
Inscrit le: 24/04/10
Messages: 129
Lieu: France
Utilisez un tableau avec des valeurs logiques afin de créer une "grille d'occupation" pour modéliser votre environnement. ;)

Des tutos de ce genre étaient prévus, mais plus le temps pour le faire. Désolé !
____________________

pm http://www.sitedunxt.fr    
   Le 12/01/15 à 19h48 Citer      

Booster Bazooka

Groupe: Membre

Sexe:
Inscrit le: 03/06/13
Messages: 125
Il y a la possibilité de créer une chaîne d'instruction à part sous forme d'une boucle dans laquelle il y a:
- La récupération de la position des roues et donc qui permettra de connaitre de combien chacune des roues se sont déplacés depuis le dernier test.
- A partir de ces valeurs, on peut calculer l'angle du véhicule en ajoutant à l'ancien angle une valeur que l'on peut déterminer à partir de l'écart entre les roues et leur diamètre (voir ce tuto).
- A partir de l'angle et de la distance parcourue, on peut calculer la nouvelle position du robot dans un repère X/Y en utilisant la trigonométrie (x = x+cos(angle)*distance et y = y+sin(angle)*distance), la distance parcourue se calculant à partir de la moyenne de l'avancée des 2 roues.

Une fois ce travail fait, la chaîne s'exécutera en parallèle et vous pourrez utiliser ces valeurs qui seront actualisées automatiquement pour toute l'exécution du programme :top . Et cette possibilité n'a pas besoin de tableau qui n'existent pas du tout sur le logiciel NXT, et seulement en une dimension sur le logiciel EV3 :s

Et voilà le travail ;)



Edité par fou_de_lego Le 12/01/15 à 19h50
____________________
Bienvenue dans le monde du lego ! :d______Vous pouvez aller voir mon propre site pour voir mes constructions: https://sites.google.com/site/legonxttutorielsetcreations/home

pm    
   Le 12/01/15 à 21h34 Citer      

Booster Fronde

Groupe: Membre

Sexe:
Inscrit le: 29/12/14
Messages: 8
Tout d'abord merci pour vos réponses :)

Alors plusieurs questions :

Ceci " Utilisez un tableau avec des valeurs logiques afin de créer une "grille d'occupation" pour modéliser votre environnement. ;) " est donc annuler par ceci ". Et cette possibilité n'a pas besoin de tableau qui n'existent pas du tout sur le logiciel NXT, et seulement en une dimension sur le logiciel EV3 :s " je suppose ? X)

"- La récupération de la position des roues et donc qui permettra de connaitre de combien chacune des roues se sont déplacés depuis le dernier test." Pour récupéré cette position , il faut utiliser les blocs variables c'est bien ça ? Avec la position en °.

"- A partir de ces valeurs, on peut calculer l'angle du véhicule en ajoutant à l'ancien angle une valeur que l'on peut déterminer à partir de l'écart entre les roues et leur diamètre" Malgré le tuto je n'ai pas bien compris cette phase ^^ Donc si X° est la position des roue de la phase 1 ( il c'est déplace de X°, avec X'° pour la roue de gauche et X''° pour la roue de droite ) ,

Prenons un exemple concret, le robot c'est déplacer de 360° de chaque roues soit 1 rotation chacune. Mais sur le tuto je ne vois pas le calcul à faire pour déterminer si il change d'angle ou non ? ( ici en l'occurence non) .

"- A partir de l'angle et de la distance parcourue, on peut calculer la nouvelle position du robot dans un repère X/Y en utilisant la trigonométrie (x = x+cos(angle)*distance et y = y+sin(angle)*distance), la distance parcourue se calculant à partir de la moyenne de l'avancée des 2 roues."

Donc toujours dans notre exemple il aura parcouru 360° de rotation soit une rotation soit 792 mm , + le fameux angle que je n'ais pas trouver XD On peut déterminer une nouvelle position , mais comment le robot peut il retenir cette position par rapport à l'objectif ? X(

pm    
   Le 13/01/15 à 15h22 Citer      

Administrateur

Groupe: Administrateur

Sexe:
Inscrit le: 24/04/10
Messages: 129
Lieu: France
Dans votre plan imaginaire, vous pouvez déterminer par exemple que votre point A de départ de votre robot est la position X=0 et Y=0 (l'origine du repère cartésien).

Vous devez indiquez également à votre robot les coordonnées du point B d'arrivé. (exemple : X= 25 et Y=16)

Dans l'idéal, vous faite calculer à votre robot l'angle et la distance qui sépare les 2 points A et B pour ensuite exécuter la manœuvre ....

Mais voila, il y a les obstacles à gérer qui se trouverons sur la route de votre robot !

En intelligence artificiel classique, il faudrait passer par une "modélisation de l’environnement", c'est à dire être capable de situer les obstacles par rapport à votre robot et ensuite "planifier une trajectoire" entre la position de votre robot et le point d'arrivée B.

Le plus simple pour modéliser un environnement est "une grille d'occupation" qui indique quelles sont les "cases libre d'obstacles" et celle "occupées par un obstacle". La "résolution" de cette grille, c'est à dire la finesse de représentation de l'espace est à définir par vous même, mais vous pouvez simplement prendre la plus grande dimension de votre robot est définir par exemple que chaque case de votre grille représente un espace carré de 25 cm de côté.

Après, pour la "planification de trajectoire", il existe différent type d'algorithme tel que A* ou méthode des champs de potentiels par exemple.

C'est pas toujours simple à implémenter.

Sinon, vous avez une méthode "plus réactive" de type "architecture de subsomption" de Rodney Brook. Beaucoup plus simple à implémenter et plus réactive. Une version simplifié d'architecture réactive peux vous inspirez, regardez donc cette page et la vidéo qui l'accompagne.

Ce que vous essayer de faire n'est pas forcément extrêmement très compliqué, mais demande un certain nombres de connaissances en robotique.

J'avais prévu de parler de toutes ces choses sur ce site, mais le manque de temps et de motivation m'a freiné dans mon élan ... Un jour peut être ! :)
____________________

pm http://www.sitedunxt.fr    
   Le 13/01/15 à 22h14 Citer      

Booster Fronde

Groupe: Membre

Sexe:
Inscrit le: 29/12/14
Messages: 8
Merci pour la réponse ! :)

Alors j'ai tout compris sauf ceci : "Le plus simple pour modéliser un environnement est "une grille d'occupation" qui indique quelles sont les "cases libre d'obstacles" et celle "occupées par un obstacle". La "résolution" de cette grille, c'est à dire la finesse de représentation de l'espace est à définir par vous même, mais vous pouvez simplement prendre la plus grande dimension de votre robot est définir par exemple que chaque case de votre grille représente un espace carré de 25 cm de côté.

Après, pour la "planification de trajectoire", il existe différent type d'algorithme tel que A* ou méthode des champs de potentiels par exemple."

J'ai bien compris l'histoire de crée une grille , mais justement le truc c'est que le robot n'est pas sensé savoir la position des obstacles , il doit justement contourné ou éviter l'obstacle PUIS grâce à la boussole se re mettre dans l'axe du nord ET ENFIN grâce à cette fameuse grille se repérer par rapport a l'objectif afin de prendre le chemin le plus court.

et puis comment implanter cette grille dans le robot ? Faut il crée une grille a part et essayer de traduire ça en variable ou existe t'il des blocs " grilles " ? ^^ Désolé on est un peu nul en robotique X)



"Ce que vous essayer de faire n'est pas forcément extrêmement très compliqué, mais demande un certain nombres de connaissances en robotique." Oui sur le papier c'est simple mais pour le traduire en algo' c'est plus complexe haha :) Déjà je pense qu'il faudrait qu'on arrive à faire marcher la boussole car ça c'est déjà une épreuve :)

pm    
   Le 14/01/15 à 19h26 Citer      

Booster Bazooka

Groupe: Membre

Sexe:
Inscrit le: 03/06/13
Messages: 125
Fred_80, il y a quelque chose que j'ai pas compris ou votre idée n'est pas réalisable avec NXT-G (avec le NXC c'est une autre histoire mais je ne pense pas qu'ils vont se lancer dans ça juste pour le temps du TPE) ? :s


"- La récupération de la position des roues et donc qui permettra de connaitre de combien chacune des roues se sont déplacés depuis le dernier test." Pour récupéré cette position , il faut utiliser les blocs variables c'est bien ça ? Avec la position en °.
- Pour récupérer la position, il faut utiliser le bloc capteur/rotation, et ensuite, effectivement, il faudra stocker la valeur de chacune des roues dans des variables pour pouvoir ensuite comparer "l'ancienne valeur stockée dans une variable avec celle sortant toute fraîche du bloc capteur".

"- A partir de ces valeurs, on peut calculer l'angle du véhicule en ajoutant à l'ancien angle une valeur que l'on peut déterminer à partir de l'écart entre les roues et leur diamètre" Malgré le tuto je n'ai pas bien compris cette phase ^^ Donc si X° est la position des roue de la phase 1 ( il c'est déplace de X°, avec X'° pour la roue de gauche et X''° pour la roue de droite )
- Il faut calculer l'écart de rotation entre les deux roues, calculer du coup la distance parcourue en plus par une roue par rapport à l'autre, et comparer cette valeur à la distance parcourue par une roue pour faire un tour complet du robot (cette dernière distance étant tout simplement calculer par: pi x ecart_roues). On obtiendra alors la proportion d'un tour effectuée par le robot (à multiplier par 360 pour avoir la rotation du robot en degré)

On peut déterminer une nouvelle position , mais comment le robot peut il retenir cette position par rapport à l'objectif ? X(
- On retient cette position dans deux variables x et y qui seront par rapport à l'origine du repère (le point de départ). Toujours avec la trigonométrie, on peut calculer l'angle que doit avoir le véhicule pour se diriger vers le point d'arrivée et la distance qu'il doit parcourir. Et si, sur son chemin, il rencontre un obstacle, il tourne, se décale, et recommence les calculs avec les données qui auront déjà était rafraichies si on met tous les calculs dans une chaîne à part.
____________________
Bienvenue dans le monde du lego ! :d______Vous pouvez aller voir mon propre site pour voir mes constructions: https://sites.google.com/site/legonxttutorielsetcreations/home

pm    
   Le 31/01/15 à 18h28 Citer      

Booster Fronde

Groupe: Membre

Sexe:
Inscrit le: 29/12/14
Messages: 8
Bonjour ! :)

Voilà nous avons abandonner l'idée de programmer le robot pour un plan X/Y car c'est très complexe et ça nous prend trop de temps :/

Nous avons donc décider de rester sur " Le robot garde le cap du nord ( o° ) malgrés le fait qu'il esquive des obstacles " .

Voici le programme pour simplement garder le nord :

Dans la partie basse , il rentre la valeur en ° de l'angle qu'enregistre la boussole ( exemple 110 ° ) puis il l'affiche.

Dans la partie haute , il compare la valeur capter avec 10° ( car on veut qu'il reste dans le cap entre les valeurs 0 à 10 ) . Si la valeur est plus petite avance si elle est plus grande sa roue droite avance de 5°.

Mais le soucis est que quand la valeur est plus grande, il se fige et affiche " programe aborted " :/

Une idée de solution ?



Edité par Cyprian Kauffmann Le 31/01/15 à 18h29

pm    
1 Utilisateur en ligne :: 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
Utilisateur en ligne: Aucun membre connecté
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie