Contrôler des Ax12 et xl320 en même temps


#1

Bonjour,
J’essai de contrôler deux types de servo (ax12 et xl320) en même temps avec une carte pixl.

L’idée est d’alimenter la carte Pixl en 12v. Celle ci alimentera donc les servo ax12 ainsi que la carte raspberry en 5v.

J’ai déjà réussi à prendre le contrôle des xl320 avec un arduino en 5v donc je me suis dis pourquoi ne pas récupérer le 5v du raspbery pi pour alimenter le servo xl320 et la data avec le pixl.

J’ai donc réalisé un petit montage.

Carte pixl branché en 12v
Les ax12 branché sur les offset du pixl
Les xl320 alimenté par le raspberry et le pin data du pixl

Résultat.
J’ai bien les ax12 de visible quand je scan les servos mais pas de visibilité sur les xl320.


#2

Pour info, de base, lew xl320 sont sur le protocole v2 et les ax sur le v1. Ils ne peuvent donc pas parler.
Un autre sujet en parle mais pourquoi pas upgrader tes ax12 pour qu’ils soient compatibles v2. Je n’ai jamais essayé.
Si tu le fais, ça m’intéresse grandement :slight_smile:


#3

J’ai compris que les AX12 et les XL-320 ne communiqué pas selon le même protocole.

J’ai donc tenté de me connecter uniquement au servomoteurs XL-320 via ce code

import pypot.dynamixel
import time

dxl_XL320_io = pypot.dynamixel.Dxl320IO(’/dev/ttyAMA0’)
xl320_motors = (dxl_XL320_io.scan(range(60)))
print(xl320_motors)
print(len(xl320_motors))

Et la badaboum. Aucun servo de trouvé


#4

Problème résolue.

j’ai du changer le baudrate à 115200
dxl_XL320_io = pypot.dynamixel.Dxl320IO(’/dev/ttyAMA0’, baudrate = 115200)


#5

Super, du coup tu as les AX12 et les XL-320 sur le même bus ?


#6

Oui,

Il me faut fermer la connexion avec les AX-12 pour communiquer avec les XL320 et ainsi de suite

Cela ne me gêne pas pour le moment car je peux me permettre de ne pas communiquer en même temps.

Par contre tout fonctionné hier et la ce matin gros message d’erreur

Traceback (most recent call last):
File “/usr/local/lib/python3.4/dist-packages/pypot/dynamixel/io/abstract_io.py”, line 511, in __real_read
header = self._protocol.DxlPacketHeader.from_string(data)
File “/usr/local/lib/python3.4/dist-packages/pypot/dynamixel/protocol/v1.py”, line 40, in from_string
raise ValueError(‘try to parse corrupted data ({})’.format(header))
ValueError: try to parse corrupted data (bytearray(b’\x00\x00\xfb\xfd’))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File “/home/pi/Desktop/Test.py”, line 8, in
ax12_motors = (dxl_AX12_io.scan(range(60)))
File “/usr/local/lib/python3.4/dist-packages/pypot/dynamixel/io/abstract_io.py”, line 221, in scan
return [id for id in ids if self.ping(id)]
File “/usr/local/lib/python3.4/dist-packages/pypot/dynamixel/io/abstract_io.py”, line 221, in
return [id for id in ids if self.ping(id)]
File “/usr/local/lib/python3.4/dist-packages/pypot/dynamixel/io/abstract_io.py”, line 214, in ping
self._send_packet(pp, error_handler=None)
File “/usr/local/lib/python3.4/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/python3.4/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/python3.4/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 bytearray(b’\x00\x00\xfb\xfd’) after sending DxlPingPacket(id=0)

Je vais ouvrir un nouveau sujet du coup :frowning: