Direction aléatoire avec retour au centre EV3

Pour expliquer certains fonctionnements, principes et fondements.
Eron
Level 6
Level 6
 
Messages: 241
Localisation: Vendée
Âge: 26 ans

Messagepar Eron » Sam Jan 22, 2022 9:00 pm

Salut tout le monde,
Je viens vers vous pour un "petit" problème de programmation (faut dire que je suis quasiment une quiche dans ce domaine :lol: )

Petite explication du comment du pourquoi de ce sujet:

Récemment, j'ai décidé de modder le Mack Anthem pour le motoriser avec de l'EV3 pour rendre le truc(k) plus "amusant"... Et avec perte de cheveux.
Modification simple : un M pour la direction, les 2 XLs pour la propulsion et le capteur infrarouge pour la détection avant (un capteur tactile viendra par la suite à l'arrière).
Le but: simple, efficace et facile à dire: le faire avancer en autonomie et qu'il puisse éviter des obstacles.

En terme de programmation maintenant :
La propulsion est OK (avance, recule en cas de détection puis avance une fois l'obstacle évité)
La direction est OK (il tourne de manière aléatoire en cas de détection)
Le retour au centre après détection : C'est le crash !

Une image valant mille mots, voici le programme de direction sous leur nouveau code de programmation pour l'EV3 qui reprend scratch comme l'EV4:

Imageprogramme EV3 direction by Legron Chess, sur Flickr

Pour résumé:

Quand le capteur est inférieur à 25% de sa capacité max, le programme s'active.
Ce qui donne :

1- On défini les paramètres du moteur A (direction) comme suit:
-vitesse à 25%
-puissance à 100%

2- On répète la boucle jusqu'à ce que le capteur 1 (proximité) soit strictement supérieur à 25%
-On exécute A à une vitesse aléatoire de -25 à +25% pendant 0.5s
-On débloque le moteur
-On arrête le moteur.

3- On répète la boucle jusqu'à ce que les degrés compté de A soit égale de -10 modulo 0 ou 0 modulo 10 (ce afin d'avoir une plage acceptable envers le moteur)
-Si les degrés compté de A sont strictement inférieur 0 alors:
=> On exécute A vers la droite pendant 0.5s
=> On arrête le moteur
-Sinon:
=> On arrête le moteur

-La même chose vient ensuite mais vers la gauche cette fois

-On arrête le moteur

-Et on répète ça jusqu'à la fin.

Je ne sais pas où je me suis planté mais quand il est sur la phase "retour au centre", le moteur ne fait que des vas-et-viens sans jamais finir la boucle.

Auriez-vous des conseils à me donner ?

PS: l'affichage des états est uniquement là pour m'indiqué où en est rendu le programme car avec ce système de "scratch", impossible de le savoir...
L'Homme a ce don incroyable et unique de se battre pour ce qu'il pense et non pour sa survie

Avatar de l’utilisateur
Rayenryuu
Level 6
Level 6
 
Messages: 238
Localisation: Les Ulis (91)
Âge: 22 ans

Messagepar Rayenryuu » Dim Jan 23, 2022 4:09 am

Bonjour
Eron a écrit:Salut tout le monde,

3- On répète la boucle jusqu'à ce que les degrés compté de A soit égale de -10 modulo 0 ou 0 modulo 10 (ce afin d'avoir une plage acceptable envers le moteur)

Je pense que cette condition n'est pas bonne, en mathématiques le mot modulo ne défini pas une plage de valeurs

https://fr.wikipedia.org/wiki/Modulo_(op%C3%A9ration)

En informatique, l'opération modulo[réf. souhaitée], ou opération mod1, est une opération binaire qui associe à deux entiers naturels le reste de la division euclidienne du premier par le second, le reste de la division de a par n


Tu devrais plutôt verifier que la valeur de l'angle est inferieure à 10 ET supérieure à -10

Eron
Level 6
Level 6
 
Messages: 241
Localisation: Vendée
Âge: 26 ans

Messagepar Eron » Dim Jan 23, 2022 11:02 am

Merci Rayenryuu.
J'ai modifier cette condition avec d'autre choses. Il y a du mieux mais on dirait que le moteur ne souhaite pas rester dans les conditions d'arrêt.

ImageProgramme direction avec retour au centre V2 by Legron Chess, sur Flickr

Après que le moteur soit parti dans une direction:

1- On répète jusqu'à ce que le nombre de degrés compté par A soit strictement supérieur à -10 ET que le nombre de degré compté par A soit strictement inférieur à 10
-Si le nombre de degrés compté par A est strictement supérieur à 10 alors :
=> On exécute A vers la gauche pendant 5 degrés
=> On attend 0.1s
-Sinon :
=> On exécute A vers la droite pendant 5 degrés
=> on attend 0.1s
-On sort de la boucle et on arrête le moteur
Et on repart jusqu'à ce que la condition de la boucle soit vrai.

Hors, une fois arrivé dans la condition (donc elle devient vrai et normalement le programme s'arrête), le moteur se met à tourner dans le sens inverse ! Et ce, jusqu'à ce qu'il soit à nouveau dans la condition. Et il repart, etc, etc...
Il y a du mieux mais je ne pige pas pourquoi le programme ne s'arrête pas une fois la boucle vrai. Normalement le programme devrait repartir à l'étape initial. Sauf qu'il reste bloqué dans la boucle de retour au centre...
L'Homme a ce don incroyable et unique de se battre pour ce qu'il pense et non pour sa survie

Sifflotte
Level 6
Level 6
 
Messages: 342
Localisation: 49
Âge: 42 ans

Messagepar Sifflotte » Lun Jan 24, 2022 8:25 pm

Pourrais tu faire une vidéo, histoire de situer le soucis.

Eron
Level 6
Level 6
 
Messages: 241
Localisation: Vendée
Âge: 26 ans

Messagepar Eron » Sam Jan 29, 2022 9:48 am

Bonjour,
Comme demandé, une petite vidéo pour bien montrer le problème (au passage, on peut voir la brique qui "suis" son programme :

https://www.youtube.com/watch?v=9ZlNfgsJFRk&t

J'suis débile ou bien le fonctionnement de la mise d'une vidéo YT n'est plus identique que ce qui est indiqué : [YT]chiffre après le v[/YT] ?
L'Homme a ce don incroyable et unique de se battre pour ce qu'il pense et non pour sa survie

Sifflotte
Level 6
Level 6
 
Messages: 342
Localisation: 49
Âge: 42 ans

Messagepar Sifflotte » Sam Jan 29, 2022 12:25 pm

Salut,
Le 1er truc que je dirais, c'est de refaire ton programme en mode simpliste.
Faire un programme basique et roulant.
C'est important pour capter l'interaction environnement /programmation.
Tu complexifira au fur et à mesure de tes besoins.

Pour le reste, le truc qui me chiffonne dans ton programme c'est de ne pas voir de référence au neutre.
(roues droites).
Ton capteur est fixe, ou relié à la direction ?

Eron
Level 6
Level 6
 
Messages: 241
Localisation: Vendée
Âge: 26 ans

Messagepar Eron » Dim Jan 30, 2022 10:34 am

Le capteur est fixe, il détecte l'obstacle et permet le lancement du programme.

Bon, j'ai résolu le problème de direction !
J'ai essayé cette méthode :

ImageProgramme de direction avec retour au centre V2-1 by Legron Chess, sur Flickr

Rien ne change hormis les tolérances plus faibles afin d'avoir un truc correct et le fait d'arrêter la pile une fois cette dernière terminée.
En gros, il faut forcer l'arrêt du programme pour que sa marche 9 fois sur 10 (erreur du moteur). Je le considère donc fiable !
Maintenant, il me reste à limité le nombre de degrés du moteur en tout temps afin qu'il ne force pas sur le système de direction :think: :ouch:
L'Homme a ce don incroyable et unique de se battre pour ce qu'il pense et non pour sa survie


Retourner vers De la théorie à la pratique

Qui est en ligne ?

Utilisateurs parcourant actuellement ce forum : Aucun utilisateur inscrit et 8 invités