Python Mindstorms #51515

La modélisation 3D des Lego, entre autres.
Sifflotte
Level 6
Level 6
 
Messages: 342
Localisation: 49
Âge: 42 ans

Messagepar Sifflotte » Mer Sep 14, 2022 5:07 pm

Bon, déjà je sais reconnaître des incohérences. Maintenant, faut faire en sorte quil n'y en ai plus.
Edit:
Ma description est en effet médiocre.

Avatar de l’utilisateur
BUZ
Level 9
Level 9
 
Messages: 1410
Localisation: Région de la quenelle // Avignon
expertgbb

Messagepar BUZ » Mer Sep 14, 2022 7:23 pm

ça va venir :resp:

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

Messagepar Sifflotte » Mer Sep 14, 2022 9:24 pm

https://www.technologuepro.com/cours-au ... ls-API.htm

1ere chose à faire, mettre ma feuille en mode paysage :lolroule:

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

Messagepar Sifflotte » Jeu Sep 15, 2022 9:02 pm

Image

Voilà à quoi ça ressemble dans ma tête :think:

Je te remercie pour la decouverte du logigramme @BUZ.
Pour expliquer certaines choses à ma fille, cest plutôt pas mal.

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

Messagepar Sifflotte » Lun Sep 19, 2022 9:49 pm

Ma maquette valide ce programme, donc je m'y colle.
J'ai un doute sur les Si/Sinon, on verra bien.

Image

En gribouillant mon programme, je me disais que ce serait bien que le Robot choisisse la détection la plus éloigné possible. Et sur l'ensemble des positions de 120 à-120°.
Mais avec mon niveau flocon de neige, j'avoue que je sèche.
Si avez des pistes (blanche ou bleue), je veux bien un coup de main.

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

Messagepar Sifflotte » Lun Oct 03, 2022 12:07 am

Voilà 2 semaines que je me bagarre pour étoffer mon programme et ça n'avance pas.
Et je pense devoir :whine: demander :whine: de l'aide :whine:
Je me laisse encore 1 semaine avant de lancer une bouteille à la mer.
Frustré je suis :grr:

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

Messagepar Sifflotte » Mer Oct 12, 2022 6:46 pm

Bon, je me résous à officiellement demander de l'aide.

Si le détecteur détecte un obstacle < à 30cm, la tourelle se postionne à 120°, puis tourne dans le sens inverse à la vitesse de -20.
Elle s'arrête de tourner quand la distance > à 100 cm, le moteur de tourelle donne sa postion au moteur de direction, le robot démarre et le programme recommence.
Le problème est que si la détection ne donne rien, la tourelle se bloque en butée, force un peu et le moteur coupe.
Le robot peut rester loooooooooooooooooooonnnnnnnnnggteemps bloqué, jusqu'à que je vienne secourir le bot.

Comment réussir a faire un wait_for avec une boucle if...
Je dois mal paramètrer un truc, du genre if dist != None.
Jai testé plein de choses, rien y fait.

Le prog:

from mindstorms import MSHub, Motor, MotorPair, ColorSensor, DistanceSensor, App
from mindstorms.control import wait_for_seconds, wait_until, Timer
from mindstorms.operator import greater_than, greater_than_or_equal_to, less_than, less_than_or_equal_to, equal_to, not_equal_to
import math


# Create your objects here.
hub = MSHub()
motor_a = Motor('A')
motor_c = Motor('C')
motor_e = Motor('E')
distance = DistanceSensor('F')



# Write your program here.

def MA():
hub.status_light.on('red')
motor_a.start(30)
wait_for_seconds(1)
motor_a.stop()
motor_c.run_to_position(120)
hub.status_light.on('yellow')
motor_c.start(-20)

def DIR():
hub.status_light.on('pink')
motor_c.stop()
hub.speaker.beep(83)
motor_a.start(-15)
motor_e.run_to_position(motor_c.get_position())
wait_for_seconds(1)

def EV():
hub.status_light.on('orange')
hub.speaker.beep(80)
hub.speaker.beep(80)
motor_a.start(-15)
motor_c.run_to_position(120)
motor_c.start(-30)
distance.wait_for_distance_farther_than(180)
motor_c.stop()
motor_e.run_to_position(motor_c.get_position())
wait_for_seconds(1)

while True :
hub.status_light.on('green')
motor_c.run_to_position(0, 'shortest path', 100)
motor_e.run_to_position(0, 'shortest path', 100)
motor_a.start(-50)
distance.light_up_all(10)

dist = distance.get_distance_cm(False)
if dist != None :

if dist < 30:
MA()
distance.wait_for_distance_farther_than(100) # j'aimerai pouvoir utiliser un if pour inclure une fonction butée.
DIR()

elif dist < 100:
EV()

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

Messagepar Sifflotte » Sam Oct 15, 2022 4:01 pm

Je viens de trouver un logiciel en ligne qui perment de traduire dcratch en python :SofusPy,.
Pour qui, comme moi, vient de Scratch, c'est top. https://raffinat.perso.univ-pau.fr/bloc ... index.html
Je me suis installé une app Python (Pydroid3) pour tester mes conditions "virtuellemment". https://www.google.fr/search?q=pydroid3 ... s-wiz-serp
Enfin j'ai trouvé ce que je cherchais depuis longtemps.
Merci Mr Raffinat! :gourou:

Voilà hypothétiquement ma condition wait _for en if.
Ça fonctionne sur l'application en tout cas. Pas encore testé dans le RI.

C'est drôle de regarder ce qui ce passe quand dist < 30 et dist2 < 100.

Image
Dernière édition par Sifflotte le Dim Oct 16, 2022 3:19 pm, édité 2 fois au total.

Avatar de l’utilisateur
BUZ
Level 9
Level 9
 
Messages: 1410
Localisation: Région de la quenelle // Avignon
expertgbb

Messagepar BUZ » Dim Oct 16, 2022 10:47 am

hummmm, a la lecture des posts, je confirme que tu mets "la charrue avant les boeufs" ;) (je viens de rajouter 30ans à mon existence avec une expression comme ça...)
j'ai l'impression que tu vas trop vite dans la création de ta fonction, mais en même temps tu expérimente, donc tu apprends.
Tu es sur la bonne voie, mais je vais t'aider à prendre une meilleurs direction (enfin, ne pas te faire aller vers des erreurs évidentes)


pour la tourelle, as tu vraiment besoin de faire un mouvement en continue ?
Si mouvement continue => alors il faut un condition d'arrêt
Si mouvement en séquence => alors tu peux faire une procédure et sortir avec le meilleurs résultat ?

genre :
Distance trop faible (condition de déclenchement)
alors, tester la distance à -60°, -30°, 0°, 30°, 60°
tu enregistres les valeurs de chaque test et tu choisis le meilleurs résultat

Exemple :
la véhicule roule et rencontre un obstacle (distance <30cm), le véhicule s'arrête (séquence d'origine)
Test des distances avec la tourelle, résultat pour un test à -30°, -60°, 0°, 30°, 60°=> 15, 18, 25, 50, 200 (en cm)
On constate que le coté droit (angle positif) est plus loin, avec une valeur à 200 (j'ai plus la valeur exacte en tête) qui est la limite du capteur, il ne sait pas voir plus loin, donc il n'y a pas d'obstacle.
procédure d'évitement => angle déterminé par le test juste avant, rouler pendant 2s (je penses que le véhicule aura esquivé l'obstacle)
Puis tout droit (reprise du programme initial)

Tu peux également prévoir une variante avec une marche arrière avant de repartir, car si tu dois tourner à fond d'un coté, je ne pense pas que le véhicule tourne suffisamment pour ne pas toucher l'obstacle.

dans tes exemples de programmes, tu as souvent le cas où tu ne vérifies pas l'état de l'action en cours, voila pourquoi tu as des résultats inconnus.

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

Messagepar Sifflotte » Dim Oct 16, 2022 3:10 pm

Mettre la charrue avant les boeufs ?... Moi ? Pas le genre :D

Le soucis que j'ai, cest que je sais quoi programmer mais je ne sais pas comment le faire.
Et effectivement, je faisais un peu au pif sans aucun moyen de comprendre réellement le problème.
Et sans ça, je ne peux avancer.
Mais avec Sofuspy, je peux comprendre et corriger mon programme.

Je viens de terminer un bout de mon programme., il sagit de la sequence de detection de la tourelle.
Jai rajouté au programme plus haut une butée.
Alors pour linstant, la butée est fonction de la vitesse de rotation tourelle. Quand le moteur arrive en butée, il se coupe et est donc = à 0.
Pour ça je commence avec sofuspy, je teste les conditions, ensuite j' importe le programme sur Py3 (parce que sosfuspy plante facilement, sans memoriser), je peux comme ça assembler morceau par morceau et tester mon programme.
(le temps de gagné sans déconner !)
Et cest souvent un problème de syntaxe qui est source de prise de tête.
Alors je corrige jusqu'à ce que ça me donne l'air de fonctionner et pour finir, injection dans le RI.
Pas encore osé le faire d'ailleurs... J'appréhende un peu..

Alors pourquoi une detection continu plutôt qu'une detection en séquence?
Parce que... Faut bien commencer par quelque chose de simple.
Je me permettrai dutiliser ton raisonnement si jen ai besoin. :)

Sofuspy va me permettre de pouvoir programmer plus sereinement.

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

Messagepar Sifflotte » Dim Oct 23, 2022 1:36 am

Image
Image

Je suis pas peu fier de ce mini prog.
Il va me servir de base pour construire le programme de détection.
Il faut que je puisse indexer la valeur max maintenant, pour connaître sa postion dans la liste et y associer une 2eme valeur.

J'adore :loveyes:

Avatar de l’utilisateur
Celeri
Level 7
Level 7
 
Messages: 582
Localisation: Paris
Âge: 44 ans

Messagepar Celeri » Mer Oct 26, 2022 10:16 pm

On vient d'apprendre que Lego met à la poubelle tout son thème Mindstorms à la fin de cette année... Moi qui me tâtais pour acquérir un #51515 à la première bonne occasion, j'imagine qu'il vaut mieux ne pas attendre et l'acheter tout de suite, surtout que le store est le seul à le vendre ?
Rien n'est plus semblable à l'identique que ce qui est pareil à la même chose. (Pierre Dac)

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

Messagepar Sifflotte » Sam Oct 29, 2022 12:17 pm

Au prix vendu, je me dirigerai sur du arduino ou consorts.

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

Messagepar Sifflotte » Sam Sep 16, 2023 12:23 pm

J'ai beau chercher, je ne trouve pas grand chose cerebralement accessible à cette question:

Comment actionner plusieurs moteurs simultanément sous Python?

Le projet, un robot omnidirectionnel.
Je l'ai déjà fait fonctionner avec scratch, c'est déjà ça ! :clap:

Muni de mon cahier et d'un stylo, je bloque sur ce paramétrage essentiel si je souhaite voir les 4 roues mecanum faire leurs tour de magie (parce que c'est vraiment étrange comme locomotion).

Merci à ceux ou celles qui pourrait m'aider.

Edit:
C'est bon en fait, à force de chercher compliqué, je passais à côté du simple:

Image

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

Messagepar Sifflotte » Dim Sep 17, 2023 11:37 pm

Après plusieurs essais, et pour une fois je ne vais pas me plaindre, tout ce passe à merveille.
Petite astuce, pour aller de travers, il n'y a que les deux moteurs diamétralement opposé qui fonctionnent. Facile: je ne programme que 2 moteurs. Ça marche pas :whine:
Essai avec le rajout des autres moteurs en mode .stop. :whine: . Il faut donner une vitesse de 0 aux moteurs pour que ça fonctionne.
Image

Pour plus de flexibilité, j'ai rajouté un 2eme capteur de distance latéral. Ça fonctionne plutôt bien, mais pour que ce soit top, il en faudrait un 3ème... et pourquoi pas un 4ème.
Un hub 51515 coûte une blinde, mais j'ai du PU. (Je cicatrise mal :lolroule: )

Pour la énième fois , jai tenté d'installer pybricks et là, miracle, c'est bon, le hub PU tourne sous python.

La prochaine étape est la communication entre les hubs 51515 et powered-up, je ne sais pas si ce sera pas facile ou pas facile du tout.

Je me souhaite bonne chance
:idea:


Retourner vers Les Lego sur le PC

Qui est en ligne ?

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