Erreur lors de l'instanciation d'une configuration partielle de Poppy : "Head"

Bonsoir
J’ai une configuration partielle de Poppy, juste la “tete” avec un AX-12 pour le Head_y(id=37) et un AX-18 pour le Head_z(36), lors de l’instruction :

  poppy_config_file = '/home/odroid/Poppy/Dev/Config/poppy_config.json'
  
  with open(poppy_config_file) as f:
     poppy_config = json.load(f)  
  poppy = pypot.robot.from_config(poppy_config)
  poppy.start_sync() 

j’ai une erreur :

odroid@poppy-server:~/Poppy/Dev$ python Pop_Listen_Sensor.py 
Exception in thread Thread-2:
Traceback (most recent call last):
  File "/usr/lib/python2.7/threading.py", line 810, in __bootstrap_inner
    self.run()
  File "/usr/lib/python2.7/threading.py", line 763, in run
    self.__target(*self.__args, **self.__kwargs)
  File "/usr/local/lib/python2.7/dist-packages/pypot/utils/stoppablethread.py", line 113, in _wrapped_target
    self._setup()
  File "/usr/local/lib/python2.7/dist-packages/pypot/dynamixel/controller.py", line 144, in setup
    positions, speeds, loads = zip(*values)
ValueError: need more than 0 values to unpack

ma configuration est la suivante :

poppy_config={}

poppy_config['controllers'] = {}

poppy_config['controllers']['upper_body_controller'] = {
    "port": "TODO: Set the good port name",
    "sync_read": True,
    "attached_motors": ["head"],
}

poppy_config['motorgroups'] = {
    "head": ["head_z", "head_y"],
}

poppy_config['motors'] = {
    "head_y": {
      "id": 37,
      "type": "AX-12",
      "orientation": "indirect",
      "offset": 10.0,
      "angle_limit": [-40, 8 ],
    },
    "head_z": {
      "id": 36,
      "type": "AX-18",
      "orientation": "direct",
      "offset": 0.0,
      "angle_limit": [-100, 100 ],
    },
}

if __name__ == '__main__':

    import json
    poppy_config['controllers']['upper_body_controller']['port'] = "/dev/ttyUSB0"

    with open('poppy_config.json','w') as f:
        json.dump(poppy_config, f, indent=2)

J’ai fait les tests un moteur à la fois et cela fonctionne mais pas les 2 !

Merci pour votre aide

Ça ressemble à un problème de communication, visiblement rien n’est retourné quand pypot fait values = self.io.get_goal_position_speed_load(self.ids).

Est ce que t’es sûr qu’il n’y a pas de problème de connectique ? problème d’alimentation, cable défectueux…

Est ce que tu peux tester ce bout de code aussi ?

Merci pour ta reponse
J’ai omis 2 precisions lors de mon 1er post :

  • Avec Herborist, je vois les moteurs
  • Mon test, un moteur à la fois, et qui fonctionne, etait en agissant seulement sur le fichier de config mais avec le meme cablage.

En changeant un peu le code que tu as donné comme suit :

import pypot.dynamixel 
#ports = pypot.dynamixel.get_available_ports() 
ports = '/dev/ttyUSB0'
baud = [57142, 1000000, ]  
for p in ports:
 for b in baud:
  with pypot.dynamixel.DxlIO(p, b) as dxl:
    print 'opened port {} with baudrate {} and dectected motor ids:{}'.format(p, b, dxl.scan(range(50)))

J’ai eu ceci :

odroid@poppy-server:~/Poppy/Dev$ python test.py 
opened port /dev/ttyUSB0 with baudrate 57142 and dectected motor ids:[]
opened port /dev/ttyUSB0 with baudrate 1000000 and dectected motor ids:[36, 37]

Par acquis de consience j’ai changé les 3 cables 3P … mais pas de changement et le message d’erreur reste le meme.
J’ai fait un autre test, suivant un sample donné avec Pypot, pour donner une target position aux 2 moteurs avec les APIs dxl directes et sans passer par l’instanciation de “robot” et ça fonctionne …

Tu as un dépôt de ton code quelque part pour qu’on essaye de reproduire l’erreur ?

Oui ici :

Code en vrac :smiley:

En fait la solution est toute bête.

Tu n’utilises pas un dongle USB2AX du coup c’est pas possible d’avoir le “sync_read”.
http://poppy-project.github.io/pypot/controller.html#writing-the-configuration

Pour résoudre ton problème, il y a juste à remplacer "sync_read": true par false dans le fichier de config :slight_smile:

Bon après c’est vrai que le message d’erreur n’est pas très clair … faudra qu’on trouve un moyen de rendre ça plus compréhensible.

Aussi je te recommande d’utiliser l’option "port": "auto" pour ne pas à avoir à explicitement donner le nom du port.

Super, ça fonctionne :wink:

Je vais continuer à m’amuser. Merci pour le beau travail que fait la “Team”