Les commandes de bas niveau pour configurer un moteur xl-320

Importer les modules necessaires.

In [2]:
import pypot.dynamixel
import time

Connecter les moteurs au niveau logiciel.

Trouver le port sur lequel est branché le moteur

In [3]:
print(pypot.dynamixel.get_available_ports())
['/dev/ttyAMA0']

Ouvrir une communication série avec le moteur :

In [4]:
dxl_io = pypot.dynamixel.Dxl320IO('/dev/ttyAMA0')

Cherche les moteurs connectés sur le bus (il en faut un seul avec l'ID 1 pour la première utilisation) :

In [15]:
motors = (dxl_io.scan(range(60)))
print(motors)
print(len(motors))
[1, 2, 3, 4, 5, 6]
6

Modifier l'identifiant d'un moteur (ID) :

In [14]:
#Remplace l'ID 1 par 2 sur le moteur 1.
#Attention, les moteurs doivents tous avoir une ID différente sur le même bus. 
dxl_io.change_id({1:2}) 

Retourne la position cible pour le moteur 1 :

In [16]:
dxl_io.get_goal_position({1})
Out[16]:
(117.16,)

Donne un objectif de position pour le moteur 1 :

In [ ]:
dxl_io.set_goal_position({12: 60})

Ferme la connexion avec les moteurs :

In [18]:
dxl_io.close()

Contrôler plusieurs moteurs en continue

In [19]:
from pypot.dynamixel import autodetect_robot
my_robot = autodetect_robot()

Afficher les moteurs de my_robot :

In [22]:
my_robot.motors
Out[22]:
[<DxlMotor name=motor_1 id=1 pos=117.45>,
 <DxlMotor name=motor_2 id=2 pos=-72.87>,
 <DxlMotor name=motor_3 id=3 pos=-19.5>,
 <DxlMotor name=motor_4 id=4 pos=-19.21>,
 <DxlMotor name=motor_5 id=5 pos=-80.79>,
 <DxlMotor name=motor_6 id=6 pos=-19.79>]

Faire bouger le moteur 2 jusqu'à la position 0 degrés en 2 secondes :

In [23]:
my_robot.compliant = False
In [26]:
my_robot.motor_2.goto_position(0,2)

Aller plus loin dans les commandes possibles :

La documentation de Pypot : https://poppy-project.github.io/pypot/

Le projet Poppy : https://www.poppy-project.org/fr/