Pololu Maestro x Leapmotion

Bras robots chez Causse

A l’occasion de l’exposition EXIT 2015, nous avons exposés des bras robots. Ces bras étaient originalement pilotés par une séquence de positions entrées directement dans la carte pilotant les moteurs. Au fur et à mesure de l’exposition nous avons créé des programmes Processing afin de les contrôler en direct avec divers input tels que le LeapMotion, une Arduino, un écran tactile, etc.

Pololu Maestro Micro

La carte en question est la Pololu Maestro, il existe plusieurs version de cette carte contrôlant de 6 à 24 moteurs, de 17 à 45€. Pour les bras nous avons utilisé la Maestro Mini 12, mais sur les douze sorties nous n’en utilisions que 3 en tant que contrôleurs tandis que les autres étaient réglées en input analog ou en output digital pour capter des informations extérieures ou allumer une LED placée sur le boîtier du bras.
La Maestro est contrôlable de deux manière : scripté avec un langage similaire à FORTH ou en serial TTL (microcontrôleurs, autres cartes Pololu) ou USB (MaestroControlCenter, SDK Pololu, Processing, etc.

Le langage est très simple : on met des nombres dans une pile de nombres que des instructions consomment et réalimentent :

6000 0 SERVO

# Avec cette ligne on met le servo no.1 (0) en position neutre (6000)
# On met 6000 et 0 dans la pile  :
#           Puis SERVO consomme ces deux nombres
#    _> SERVO >_
#   ^           v
# 3 -           # 3 -
# 2 -           # 2 -
# 1 0           # 1 -
# 0 6000        # 0 -

11 GET_POSITION 7 TIMES 2400 PLUS

# Ici on lit une valeur analogique entre 0 et 1024 sur la pin 11 :

# - On met 11 dans la pile, 
# - GET_POSITION consomme ce nombre en renvoie la valeur lue 
#   sur la pin qui correspond.
# - On met 7 dans la pile
# - On multiplie les deux dernières valeurs de la pile avec TIMES
# - auxquels on ajoute 2400 avec PLUS
#
#    _> GET_POSITION >_   _> 7 >_   _> TIMES 2400 >_   _> PLUS >_
#   ^                 v ^       v ^                 v ^          v
# 3 -                 # 3 -     # 3 -               # 3 -        # -
# 2 -                 # 2 -     # 2 -               # 2 -        # - 
# 1 -                 # 1 -     # 1 7               # 1 2400     # -
# 0 11                # 0 658   # 0 658             # 0 4606     # 7006

1 servo

# Enfin on utilise la valeur lue pour bouger le 2e servo dans une position
# 
#    _> SERVO >_
#   ^           v
# 3 -           # 3 -
# 2 -           # 2 -
# 1 1           # 1 -
# 0 7006        # 0 -

En multipliant les instruction SERVO et en les espaçant dans le temps avec l’instruction DELAY (qui prend un nombre en entrée et qui stoppe le script pour autant de milliseconde que le nombre), on est capable de créer une séquence de mouvements. SPEED et ACCELERATION permettent de gérer le vitesse et l’accélération du servo, ils s’utilisent comme SERVO, le premier (le plus en haut de la pile) correspond au numéro du servo, le deuxième à la vitesse, 0 étant la valeur infini : la vitesse est la vitesse maximum du moteur, comme l’accélération.

D’autres instructions sont disponibles, on peut les voir sur la documentation de la carte : maestro.pdf

A suivre : Le contrôle en série avec Processing et l’interfaçage avec un Leapmotion.