Viewing 7 reply threads
  • Author
    Posts
    • #9649
      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
      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 7 years, 1 month ago by lecagnois.
      • This reply was modified 7 years, 1 month ago by lecagnois.
    • #9660
      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
      anthony
      Moderator

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

    • #9667
      lecagnois
      Participant

      @anthony

      Merci anthony

    • #9677
      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
      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
      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.

Viewing 7 reply threads
  • You must be logged in to reply to this topic.