Dynamixel error XL320 could not parse received data

Bonjour tout le monde,
sur les conseils de @Pierre je vous sollicite si vous aviez une idée pour m’aider à résoudre un petit problème.
J’ai branché un moteur pour faire un test (établir une com, scan du moteur, etc) et rien ne se passe…
j’arrive à trouver les ports disponibles (en l’occurence j’ai que le COM3 là)

ports = pypot.dynamixel.get_available_ports()

à me “brancher” dessus

dxl_io = pypot.dynamixel.io.io_320.Dxl320IO(ports[0])

mais le scan

dxl_io.scan() 

ne fonctionne pas et m’envoie ceci:

[...]raise DxlCommunicationError(self, msg, instruction_packet)
pypot.dynamixel.io.abstract_io.DxlCommunicationError: could not parse received data after sending DxlPingPacket(id=0)

Pierre me dit que ça peut venir de plusieurs choses:

  • plusieurs moteurs ont le même id (ils parlent tous en même temps -> collision)
  • les moteurs ne sont pas alimentés (ou pas correctement alimentés) -> le signal de data est dégradé
  • un souci de driver usb2serial (quel OS utilises-tu ?)

(et c’est plus ou moins ce que j’ai trouvé sur le net comme raisons)

mais je n’ai qu’un seul moteur donc conflit d’id… bof… le moteur est alimenté en 7.5V (par contre je vois pas de LED allumée je sais pas si c’est normal…) et le driver je l’ai installé selon le tuto dispo sur le site.

Any ideas?

Premièrement, le sujet du topic est un nouveau module pour la main et ce problème n’a rien à voir en lui même: pour plus de lisibilité (et que les suivants qui se retrouverons dans ton cas puissent trouver la réponse), essaie de créer un nouveau topic ou de poster dans un topic correspondant à ton problème.

Deuxièmement, Tu n’as pas répondu à toutes les questions de Pierre: quel OS (windows ?) ? USB2AX ou USB2Dynamixel (le petit ou le tout gros ? )?

Troisièmement, la led du moteur doit s’allumer une seconde au moment ou tu mets l’alimentation et rester éteinte ensuite, donc pas de souci de ce côté là.

J’ai déjà eu ce problème quelques fois et réessayer ou débrancher/rebrancher l’a résolu. As tu testé ?

As tu un autre moteur pour faire tourner le même code et voir si tu as la même erreur ?

Etant donné que je mets l’avancement de notre projet de module de main ici je voyais pas trop ou poster d’autre mais je suis ouvert à toute suggestion.

J’ai windows et un USB2AX

Je ne vois pas de LED s’allumer, jamais. Je re-regarderais demain mais je suis presque sur que rien ne s’allume.

Je vais essayer de changer de moteur mais à priori ils sont tous neufs.

Merci pour ta réponse

Ma suggestion serais un nouveau topic ‘DxlCommunicationError’ ou quelque chose du genre, mais ce n’est pas grave.

Au fait, c’est pour des XL320 ? Du coup je ne sais pas pour la led.

Je n’ai pas de quoi tester ton setup (pas de windows et pas de XL320 sous la main), mais il semblerais que tu communiques avec ton moteur mais que tu n’arrives pas à lire ce qu’il te répond…
Est ce que tu peux essayer avec

pypot.dynamixel.Dxl320IO(port[0])

à la place de

pypot.dynamixel.io.io_320.Dxl320IO(ports[0])

?

Je ne peux pas essayer maintenant mais je fais ça demain dès que j’arrive.
Merci pour ton aide.

Les XL-320 allument bien une led rouge pendant une seconde au moment de l’alimentation.

Voilà le code que j’ai utilisé pour tester le fonctionnement des moteurs : XL-320 test

Tu commences au début du notebook et puis tu déroules.

Merci beaucoup @juju

Bonjour,

Après quelques réglages et modifications (fils inversés sur la carte raccord), cela fonctionne.
En revanche, ça ne fonctionne qu’avec un moteur, dès que j’en mets plusieurs j’ai des erreurs de communication.
Parfois j’ai des erreurs avec un seul moteur (could not parse received data suivi de caractères exotiques).
Je vais essayer d’écrire le reste du code en attendant.
En tout cas ça se connecte ! C’est déjà mieux, merci.

EDIT: à priori quand j’adresse le moteur sans passer par robot autodetect avant, j’ai pas d’erreur de com, étrange!

Qand il y a plusieurs moteurs, il faut qu’ils aient été préalablement paramétré avec Herborist. Pour changer leur ID. Les caractères exotiques, ça arrive quand justement il y a des conflits sur le même ID pour 2 moteurs.

Bonjour @johnDoe
Comme toi nous avons eu le même problème et nous avons réussi à le résoudre.
Nous ne connaissons pas ton montage mais le bus de la data doit impérativement être rejoint par le courant sur une SMPS2Dynamixel ou une CM9. Apparemment la data doit être traitée sinon ton ordinateur reçoit une information partiellement exploitable. C’est pour ça que tu ne peux pas brancher directement la data de l’USBAX à la prise data de ton moteur.
Voila et bonne chance pour ton projet :smile:

Merci beaucoup pour cette réponse.
Le projet est en pause en ce moment car je n’ai pas le temps de m’en occuper mais ça me sort une belle épine du pied pour quand je vais m’y remettre :smile:

Si l’on branche le moteur directement sur l’USB2AX, il est alimenté en 5V (tension du port USB), qui n’est pas suffisant et renvoie donc des données mal-formées. Le SMPS2Dynamixel permet de relier les fils VCC et GND à l’alimentation externe (7.2V pour les XL-320), mais il ne touche en aucun cas au fil du data.

1 Like

Je suis d’accord avec toi avec mais après nos expériences nous avons remarqué que ne pas passer par la SMPS2Dynamixel pour le fil du bus entraînait cette erreur. Ce qui nous fait penser que la data doit être amplifiée (ou modifiée) en plus du fait que les XL-320 doivent recevoir une tension supplémentaire. Ou alors c’est un bug ou le problème est ailleurs …

Le problème doit être ailleurs, on voit la piste de data sur le circuit (côté bottom) qui relie les deux connecteurs.

Salut,

L’USB2AX n’alimente pas les servos. Si vous branchez le servo uniquement à l’USB2AX, la patte d’alimentation n’est juste pas connectée. Et donc, comme le dit Poppyrate, il est nécessaire d’avoir une autre source d’alimentation (SMPS2Dynamixel, OpenCM9.04, ou vous pouvez aussi faire votre propre alim).

Il est possible cependant (je n’ai pas testé) que le servo ai l’air d’etre un peu alimenté si par le jeu des diodes de protections son microcontrôlleur s’alimente via la patte qui sert a la communication, mais ca ne peux pas etre suffisant. Dès que le servo va demander un peu de puissance, ou que plusieurs servos vont tirer ensemble sur ce circuit parasite, la tension va tomber te faire reboot le servo, et potentiellement l’USB2AX aussi…
Il faut donner une vrai tension stable avec la capacité de lacher suffisament de courant pour le nombre de moteur connecté (et qu’elle soit vers les 7.2V pour que le moteur se traine pas).

A part ca, comme le dit Theo, pas de traitement de la ligne Data par la carte d’alim. Tu peux brancher directement les fils Data et GND entre le servo et l’USB2AX, mais il faut que les servos soient connecté a une source de puissance d’une facon ou d’une autre (soit par l’autre prise du servo, soit en bidouillant le cable pour qu’il parte en Y, avec Data et GND vers l’usb2ax, et VCC et GND vers l’alim).

Par contre THeo quand tu mentionne :

Si tu parles du solder jumper sur le bottom de l’USB2AX, c’est une connection entre TX et RX du microcontrolleur, pour former la ligne Data bidirectionelle (avec contrôle logiciel de la direction, en allumant et eteignant l’emetteur ou le recepteur de l’UART du MCU).
La pin du milieu du connecteur Dynamixel sur l’usb2ax est laissée totalement non connectée de ce côté.

Bonjour,
J’ai un souci similaire avec les moteurs de mon Poppy Torso.
Le robot ne voulait plus s’initialiser, donc j’ai voulu vérifier l’état des moteurs avec Herborist.
J’ai testé avec différents moteurs seuls, et aussi avec les moteurs connectés, mais lorsque j’appuie sur le bouton “scan”, j’obtiens ces erreurs :

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/pypot/tools/herborist/herborist.py", line 209, in run
    if dxl_io.ping(id):
  File "/usr/local/lib/python2.7/dist-packages/pypot/dynamixel/io/abstract_io.py", line 214, in ping
    self._send_packet(pp, error_handler=None)
  File "/usr/local/lib/python2.7/dist-packages/pypot/dynamixel/io/abstract_io.py", line 527, in _send_packet
    return self.__real_send(instruction_packet, wait_for_status_packet, _force_lock)
  File "/usr/local/lib/python2.7/dist-packages/pypot/dynamixel/io/abstract_io.py", line 495, in __real_send
    status_packet = self.__real_read(instruction_packet, _force_lock=True)
  File "/usr/local/lib/python2.7/dist-packages/pypot/dynamixel/io/abstract_io.py", line 517, in __real_read
    raise DxlCommunicationError(self, msg, instruction_packet)
pypot.dynamixel.io.abstract_io.DxlCommunicationError: could not parse received data  after sending DxlPingPacket(id=0)

J’obtiens la même erreur en passant par Python et dxl_io.scan().
J’ai également essayé de passer par Dynamixel Wizard mais aucun moteur n’est détecté.

  • Lorsque je branche l’alimentation des moteurs, j’ai bien la LED du moteur testé qui s’allume 1 seconde puis s’éteint
  • L’USB2AX est bien allumé en vert
  • En général, le voyant de l’alimentation est éteint (des fois il est allumé en rouge, dans ce cas j’ai la même erreur)
  • J’utilise une VM de Debian 8.9

J’ai le même branchement que sur cette vidéo (à 6min05): https://youtu.be/cYhGwD6r6NQ?t=6m5s
J’ai également tenté d’autres branchements, avec d’autres câbles, et avec la même erreur.

Quelques fois, lorsque je lance le scan rapidement après avoir branché l’USB2AX, le scan arrive à aller plus loin que l’id 0 avant de déclencher l’erreur (par exemple j’ai déjà eu les ids 1, 16, 21, 26, 50, 53 dans ce message : pypot.dynamixel.io.abstract_io.DxlCommunicationError: could not parse received data after sending DxlPingPacket(id=26)).

À un moment, après avoir débranché/rebranché l’alimentation et sans avoir touché aux branchements, j’ai réussi à passer le scan en entier plusieurs fois à suivre sur un moteur seul. Il n’y avait pas d’erreur mais la liste des moteurs trouvés était vide (retour [ ]). Ensuite j’ai fait un faux mouvement qui a décalé la position dans laquelle était le robot, depuis je n’ai plus réussi à passer de scan en entier.

Auriez-vous une idée sur l’origine de mon problème, et comment le résoudre, svp ?
Pour info, les moteurs ont fonctionné sans soucis pendant un peu plus d’un an. C’est après avoir prêté le robot à des collègues que les problèmes ont commencé, du coup je n’ai pas l’historique exact des actions qui auraient pu impacter le matériel. Avant de me renvoyer le robot ils avaient testé les moteurs, 5 sur 13 n’étaient pas détectés.

Merci d’avance ! :slight_smile: