0Home Page test forums PROGRAMMATION MYROBOTLAB Fonction sleep

This topic contains 7 replies, has 3 voices, and was last updated by Profile photo of Dominique Dominique 4 days, 20 hours ago.

  • Author
    Posts
  • #9649
    Profile photo of Dominique
    Dominique
    Participant

    Attention avec l’utilisation de la fonction sleep en Python. Cette fonction permet de faire une pause, la valeur en paramètre est en seconde. Le problème est quelle bloque tout les threads, c’est à dire que tout le robot est en pause.

    Avant, j’utilisé un sleep pour attendre la fin de positionnement d’un servo puis je faisais un disable de ce servo. Maintenant, je contourne le problème en utilisant un compteur et un timer. Dés que je lance un mouvement, le compteur est initialisé, compte un certain nombre puis coupe le servo. Un timer comptant la seconde tourne en permanence.

  • #9652
    Profile photo of lecagnois
    lecagnois
    Participant

    @dominique
    Merci pour l information , je prends tous les conseils de programmation , c ‘est le coté le plus ludique je trouve .
    pour le moment je travail en mode sans arduino , je passe mon temps sur l’ AI à franciser tous les fichiers AIML (heuuuu c’est très long).

    Peut tu nous faire un petit tuto programmation sur le timer et son utilisation

    Merci Dominique .

    • This reply was modified 2 weeks, 4 days ago by Profile photo of lecagnois lecagnois.
    • This reply was modified 2 weeks, 4 days ago by Profile photo of lecagnois lecagnois.
  • #9660
    Profile photo of anthony
    anthony
    Moderator

    Coucou il y a la fonction servo.setAutoDisable(True) qui fait le job. ( implantée par défaut sur Inmoov mais utilisable aussi à l’extérieur )

  • #9666
    Profile photo of anthony
    anthony
    Moderator

    ou servo.moveToBlocking() pour attendre la fin d’un mouvement sans bloquer les autres thread

  • #9667
    Profile photo of lecagnois
    lecagnois
    Participant

    @anthony

    Merci anthony

  • #9677
    Profile photo of Dominique
    Dominique
    Participant

    Oui je sais qu’elles existent mais je n’ai pas encore testé leurs fiabilités.

    @Anthony: Comment peux tu connaître la fin de positionnement d’un servo ? Après combien de temps le désactive tu ?

    Moi je désactive le servo 20s après avoir lancé le moveTo, avec réarmement si nécessaire. Fait tu la même chose ?

  • #9837
    Profile photo of anthony
    anthony
    Moderator

    C’est la magie !

    Plus sérieusement cela découle des travaux initiés par Christian entre autre, On peut connaitre très précisément la position du servo ( attention prendre en compte le facteur poid, la magie a ses limites en utilisant des servo de modélisme ) non plus en lui envoyant une position finale, mais en contrôlant l’angle de rotation en segments par microsecondes. Tout ceci est transparent.

    Du coup on sait quand le servo a atteint la position désirée.

    Tout cela fonctionne seulement si la vélocité est définie. C’est à dire si on définit une vitesse.

    Pour l’auto détachement on peut lui indiquer une période de “grâce” en sus , pour par exemple laisser les omoplates levées :

    par défaut il y a 1 seconde de grâce. > servo.disableDelayIfVelocity=1000;

  • #9842
    Profile photo of Dominique
    Dominique
    Participant

    OK merci, maintenant je comprends mieux comment ça se passe. (oui pour moi rien n’est magique)

    Donc, si la vélocité est défini, un setAutoDisable(True) désactive le servo une fois que celui ci a terminé sa course.

    Parfait, cela va me simplifier un petit peu la parti Python.

You must be logged in to reply to this topic.