Baudrate et chargement de config json

Bonjour,

Je suis en train d’adapter le code d’un petit robot vers une nouvelle version avec des moteurs plus récents (AX-18 → MX-64), et je me heurte à un problème de baudrate (je crois). Pour résumer :

dxl_io = pypot.dynamixel.DxlIO('/dev/ttyACM3',baudrate=57600)
print(dxl_io.scan())

Ce code détecte bien mes moteurs (que j’arrive à contrôler via herborist, par ailleurs), pour peu que j’indique le baudrate. En revanche …

robot = pypot.robot.config.from_json('configuration/lamp_carb_nocam.json')

# pypot.dynamixel.io.abstract_io.DxlError: Could not find the motors (1, 2, 3, 4, 5) on bus /dev/ttyACM3

Ce code charge la définition du robot depuis un fichier json et ne trouve rien. En regardant le code, j’ai remarqué que la fonction dxl_io_from_confignode ne semble pas se soucier du baudrate. Du coup j’imagine qu’il utilise le baudrate par défaut, qui doit être 1000000 vu que la config fonctionne sur l’ancien modèle du robot, sur lequel le baudrate est à 1000000.

Y-a-t’il un autre moyen de définir le baudrate quand on charge une config depuis un fichier json ? Suis-je passé à coté de quelque chose ?

Bonjour,

En effet, le baudrate par défaut est utilisé ici. Ce patch ainsi qu’une définition du baudrate dans le fichier de configuration devrait suffire à propager le paramètre :

{
  "controllers": {
    "my_dxl_controller": {
      "sync_read": true,
      "protocol": 2,
      "attached_motors": [
        "base",
        "tip"
      ],
      "port": "/dev/ttyAMA0",
      "baudrate": 57600,
      "syncloop": "LightDxlController"
    }
  },
[...]

Super, du coup j’ai proposé sensiblement la même chose dans cette pull request.

Merci ! Testé avec succès ?

Oui ! Bon en vrai j’ai testé en éditant salement le code dans mon venv, puis en recopiant les deux lignes dans le dépot git. Donc le code n’est pas testé stricto sensu, j’aurai pu faire une faute de frappe quelque part, ou une petite erreur d’indentation, mais j’en doute.

1 Like