Python Mindstorms #51515

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

Messagepar Sifflotte » Jeu Sep 08, 2022 9:50 pm

Ce topic sera consacré à mon apprentissage du language Python.
Autant être clair, je n'ai aucune vraie expérience en language informatique.

Je ne sais pas si cest un avantage ou non, mais le but est de créer un programme pour robot autonome muni d'un capteur de disrance, d'une tourelle, d'une propulsion et d'une direction.

J'en suis au stade où mon robot se debrouille tout seul, pour l'instant il ne tourne qu'à droite parce que..... Je n'ai pas encore trouvé comment le faire tourner à gauche en fonction de la position de détection de la tourelle.

A ce stade, cest ultra basique mais j'en bave.
Jen bave aussi parce que je me refuse (pour l'instant), à faire appel à de l'aide.
Ça m'oblige à lire des ces trucs.... Mais bon, ça commence gentiment par s'éclaircir.
(y'a de quoi s'arracher les cheveux parfois,)

Exemple de mes lectures du moment:

https://www.docstring.fr/blog/3-erreurs ... -remedier/

https://docs.python.org/fr/3.6/library/constants.html

https://thecodingfun.com/2021/01/09/leg ... thon-code/

A+

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

Messagepar BUZ » Ven Sep 09, 2022 6:14 pm

Ok, c'est un Blog ton sujet ;)

Ne pas avoir de "vrai" expérience, c'est pas plus mal. Python n'est pas le plus complexe à apprendre niveau syntaxe.
As tu une bonne compréhension de algorithmie et de la structuration informatique ? (on parle pas de langage de programmation, juste d'enchainer des lignes avec un contexte précis)

Il faut avoir une idée précise de ce que tu veux faire, voir même de le dessiner sur du papier (logigramme).
de là, écrire du code c'est simple car tu ne fais pas la double conversion (idée vers logique vers programme).
tu décomposes en tâches simples.

Sifflotte
Level 6
Level 6
 
Messages: 350
Localisation: 49
Âge: 43 ans

Messagepar Sifflotte » Sam Sep 10, 2022 1:17 am

Hello BUZ

Si tu fais référence à ce genre d'exemple:
https://cavril.developpez.com/php/?page=page_2
Oui pour le logigramme, et pas vraiment pour le reste. Faut que je potasse ça.

C'est pas si simple à appréhender. Faut assimiler les règles de bases déjà , et je découvre ça au fil de l'eau.
Parce que pour paramétrer le capteur de distance (pomper sur le lien Thecodingfun), il faut que:

Distance = DistanceSensor
Dist = 0

Dist = distance.get_distance_cm(False)
If dist != None
If dist > valeur :
Else:

Franchement, impossible pour moi de deviner ce genre de truc ( faire tourner les moteurs c'est "easy", mais rapporter des variables...) Il faut que je teste la même chose mais pour la position en degrée d'un moteur.
Je vais m'amuser à changer les paramètres pour voir ce que ça fait. Empirisme quand tu nous tiens.

L'idée du programme est clair , limpide, et simple. Pour un gars comme toi, c'est limpression que tu me donnes, c'est fait en moins d'une heure.
Il va me falloir une année :lol:

Je ne pensais pas prendre autant de plaisir à me prendre la tête.

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

Messagepar BUZ » Sam Sep 10, 2022 11:13 am

comme j'ai dit, si tu as une bonne "carte" (logigramme), c'est plus simple.
Car pour chaque bloc ou test logique, tu peux décomposer.

Comme pour toute programmation, tu aura en début, les déclarations => nommer les fonctions/variables/bibliothèque

puis un corps de programme avec ou sans boucle.

Mais je me répète, comme tu n'as pas l'expérience (et ce n'est pas une critique négative) tu dois formaliser ce que tu souhaites faire.
Sinon, tu vas partir dans tous les sens.

No problemo pour te coacher ;)

On va commencer là, maintenant ;)
A quoi ressemble ton robot ? (4 roues ? direction type tank ? un capteur de distance devant ? le truc basique non ?)
peux tu décrire, en quelques phrase, ce que tu souhaites faire faire à ton robot ? (un truc basic pour le moment)


Edit : tu utilises quoi pour programme le HUB ?

Sifflotte
Level 6
Level 6
 
Messages: 350
Localisation: 49
Âge: 43 ans

Messagepar Sifflotte » Sam Sep 10, 2022 3:55 pm

Wow p&t#@n
Jai reussi à faire en sorte que la valeur en degré de la position de detection du moteur de tourelle fasse tourner ma direction proportionnellement (enfin, presque, faut que je fasse une division)
Je suis en valeur absolue apparemment, faut que je trouve le moyen de passer en relatif. En position -120 par ex, jai un message d,'erreur. Mais cest déjà trop bien den être là :D

8
@BUZ
Merci pour le coaching :resp:
Je ferais une presentation détaillée dans pas longtemps.
Si tu programmes le truc de ton côté, j'aimerais autant que tu le garde en réserve, histoire de comparer un programme de débutant à celui dun expert.
Je veux me débrouiller tout seul et vraiment pousser mes limites.

Nan mais la joie quand la direction à tournée pour la 1ère fois...
Jen ai la larme à l'œil...

Edit: :tintin:
Ça y est, il ma fallut changer get_degrees par get_position pour passer en mode degré relatif. (cest ce que je comprends)

Motor_y. stop()
Motor_x. run_to_position(motor_y. get_position())

Je veux maintenant diviser par 6 la valeur de _get_position. :bougeotte:

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

Messagepar BUZ » Dim Sep 11, 2022 6:03 pm

je reprends les phrases qu'il fallait retenir ;)

*Prends du papier et tu fais un plan de robot
*Prends un papier et fais un logigramme de ce que tu veux lui faire faire
*Avec quoi tu programmes ? (c'est important ce point là ...)

J'ai aucune idée de quoi ressemble ton robot ;)
Ni ce que tu veux en faire ;)

Je suis pas un service de programmation, mais si j'ai le temps, je peux te donner un coup de main ;)
Je ne penses pas challenger ton programme avec ma version à coté :resp:

Sifflotte
Level 6
Level 6
 
Messages: 350
Localisation: 49
Âge: 43 ans

Messagepar Sifflotte » Dim Sep 11, 2022 9:22 pm

@BUZ
En aucun je te demande de te faire un programme. Pis crois moi, si je devais demander un service de ce genre, je le ferais sans détour. Par contre, comparer mon programme une fois fini face à celui dun pro, ça peut être très intéressant.

Je t'avoue que je ne pensais pas aller si vite, et mon objectif de faire tourner la direction en fonction de ma tourelle, c'est déjà énorme. T'as raison sur la mise sur papier du programme, et pour le logigramme. Je pense que je vais bien me prendre le chou !
Donc oui et oui je ferais un plan papier, mais faut me laisser un peu temps, je veux bien faire les choses (et ça reste un hobby) mais... javoue avoir été envoûté par la programmation. En attendant, je posterai des photos avec une description.

Je fini mon week-end sur un problème de rotation.
Pas moyen de faire tourner le moteur de direction x à l'envers. Le get_position me bloque, pas moyen de le faire tourner dans l'autre sens.
En fouinant sur le net, sur un arduino, le gars interverti les fils du moteur.
Jai plutôt choisi d'utiliser un trio 8t à la place dun duo de 16t pour inverser le sens de rotation.

Je butte toujours sur la division, ça a l'air si simple pourtant...

Sifflotte
Level 6
Level 6
 
Messages: 350
Localisation: 49
Âge: 43 ans

Messagepar Sifflotte » Dim Sep 11, 2022 9:51 pm

Image

Image

Image

Image

Image

Voici le robot.
Au demarrage, tourelle et direction position 0.
Il avance en ligne droite, si un obstacle se présente, il ralentit, la tourelle pivote à 120 degrés à droite puis revient sur elle-même en mode detection.
Quand le détecteur détecte une distance supérieure à(), la direction tourne en fonction de la position de le tourelle (+/- à droite ou +/- à gauche)
Si pas de solution, marche arrière pendant (x)seconde.

Edit: jutilise une tablette et un clavier bluetooth.

Franchement, cest facile en fait :ouch:
:hello:
Dernière édition par Sifflotte le Lun Sep 12, 2022 1:27 pm, édité 1 fois au total.

Tops
Level 3
Level 3
 
Messages: 48

Messagepar Tops » Lun Sep 12, 2022 12:50 am

Sifflotte a écrit:Au demarrage, tourelle et direction position 0.
Il avance en ligne droite, si un obstacle se présente, il ralentit, la tourelle pivote à 120 degrés à droite puis revient sur elle-même en mode detection.
Quand le détecteur détecte une distance supérieure à(), la direction tourne en fonction de la position de le tourelle (+/- à droite ou +/- à gauche)
Si pas de solution, marche arrière pendant (x)seconde.


Quelqu'un pourrais-il nous montrer ce que ça donne en logigramme ?

Merci a celui qui sait faire et prendra le temps.

Sifflotte
Level 6
Level 6
 
Messages: 350
Localisation: 49
Âge: 43 ans

Messagepar Sifflotte » Lun Sep 12, 2022 6:17 pm

@tops:
Tu peux le faire, rien ne t'en empêche.

Et juste pour te rappeler que ce sujet, en dehors de Python, traite aussi du surpassement de ses compétences.
Je te cache pas que de te voir débouler sur mon thread en demandant si on peut te donner tout cuit un truc, et qui ne vient même pas de toi, ça m'embête... Beaucoup.
Et sinon, le poulailler ?

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

Messagepar BUZ » Lun Sep 12, 2022 8:51 pm

J'ai lu et retranscrit graphiquement
Image

Sifflotte
Level 6
Level 6
 
Messages: 350
Localisation: 49
Âge: 43 ans

Messagepar Sifflotte » Lun Sep 12, 2022 10:47 pm

Cest moins compliqué que ce que javais gribouillé.

La flèche gauche de "solution ?" signifie que la reponse est "oui" et que ça le renvoi au "start"?

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

Messagepar BUZ » Mar Sep 13, 2022 8:04 pm

Normalement, tu devrai me dire que "C'est de la merde"...
J'ai bête dessiné tes phrases une par une ;)
Pour te montrer qu'il manque des trucs ^^


Pour le DESSIN
Oui, quand tu fais un test logique, il n'y a que 2 réponses : OUI et NON
Généralement, on n'en désigne qu'une seule pour éviter d'alourdir le dessin.


Du coup, penses tu comprendre ce qu'il manque dans tes phrases et par extension ce qu'il manque au logigramme ?

Sifflotte
Level 6
Level 6
 
Messages: 350
Localisation: 49
Âge: 43 ans

Messagepar Sifflotte » Mer Sep 14, 2022 12:09 am

@BUZ :resp:

Pour l'instant, la chose qui m'a sautée au yeux est au niveau de la tourelle.
Quand elle passe en mode détection, il n'y a pas de commande pour lui dire quoi faire si "distance >x " n'a rien donné. La boucle devrait ce faire avec "tourelle Poz 120" , ou "Poz init" puis une séquence de MA.

(J'ai voulu corriger ça en activant une butée virtuelle à " z degrees" avec retour à "postion 0", mais cela ne fonctionne que dans un sens, et pas le bon. C'est énervant ces petits problèmes... (mais le plus mega reloud, c'est l'indentation. Je passe des minutes à me faire chier. ))

Pis aussi, pour bien faire, faudrait une séquence de détection pour la marche arrière. Soit de manière statistique, soit en mouvement.
Je commencerai par une séquence statique. C'est plus raisonnable.

D'ailleurs, sur le logigramme, le moteur tourne pendant trois 3seconds et s'arrête, ou il s'arrête puis reprends la MA en boucle?

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:46 am

Sifflotte a écrit:Pour l'instant, la chose qui m'a sautée au yeux est au niveau de la tourelle.
Quand elle passe en mode détection, il n'y a pas de commande pour lui dire quoi faire si "distance >x " n'a rien donné. La boucle devrait ce faire avec "tourelle Poz 120" , ou "Poz init" puis une séquence de MA.


C'est ce que je dis, il n'y a pas dans ton explication de départ le descriptif de cette action (et d'autres)

Sifflotte a écrit:D'ailleurs, sur le logigramme, le moteur tourne pendant trois 3seconds et s'arrête, ou il s'arrête puis reprends la MA en boucle?


A non, il y a juste une attente de 3s, nul part on précise ce qu'il ce passe après. On s’arrête ? on repart en marche avant ? etc...

je t'invite à repartir du descriptif de base, de le modifier pour éviter les ambiguïtés et d'ajouter les quelques mots/ponctuations permettant de délimiter les actions ;)
Tu dois normalement te rendre compte que dans ta tête, ton idée du fonctionnement du robot est largement différente que ce que tu écris. (écriture => logigramme => programmation)
Et donc, tu ne pourra pas le programmer correctement car tu vas oublié des trucs ^^

Là on le fait très académique ! c'est pour l'exemple et la méthode ;)


Retourner vers Les Lego sur le PC

Qui est en ligne ?

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