Cett démo permet d'illustrer :
In [1]:
from pyluos import Robot
In [2]:
robot = Robot(host='demo-innorobo.local')
Les différents modules connectés sur le robot ainsi que leur topologie sont automatiquement découverts :
In [3]:
robot.modules
Out[3]:
On peut accéder aux différents modules directement via leur nom. Les types de modules disponilbes sont :
On accède au module via son alias :
In [4]:
robot.my_led
Out[4]:
On peut directement modifier sa valeur pour changer la couleur de la LED. La synchronization est cachée.
In [5]:
robot.my_led.color = (255, 0, 0)
In [6]:
robot.my_other_butt
Out[6]:
On peut connaître l'état du bouton (ON/OFF) directement depuis l'objet. La valeur est automatiquement mise à jour.
In [7]:
robot.my_other_butt.state
Out[7]:
In [ ]:
robot.my_motor
On peut changer la position d'un moteur directement :
In [ ]:
robot.my_motor.position = 90
In [ ]:
robot.my_pote_tard
On peut connaître la position du potentiomètre via :
In [ ]:
robot.my_pote_tard.position
Si l'on souhaite changer la valeur de la LED lorsque le bouton est appuyé :
In [ ]:
while True:
if robot.my_butt.state == 'ON':
robot.my_led.color = (255, 0, 0)
else:
robot.my_led.color = (0, 0, 255)
On peut également faire la même chose en utilisant des événements. Chacun des modules publient des événements qui correspondent à ses changements d'état.
Par exemple, le module bouton peut publier 3 événements :
La liste des événements associés à un module est accessible directement depuis la classe représentant le module.
In [31]:
from pyluos.modules import Button
Button.possible_events
Out[31]:
Cet exemple d'utilisation d'événement permet de changer la couleur de la LED chaque fois que le bouton est appuyé.
On écrit tout d'abord une fonction qui change la couleur de la LED pour une nouvelle couleur aléatoire.
In [ ]:
from random import randint
def change_color(_):
color = (randint(0, 255), randint(0, 255), randint(0, 255))
robot.my_led.color = color
On peut ensuite directement l'associer à l'événement pressed d'un bouton.
In [15]:
robot.my_other_butt.add_callback(event='pressed', cb=change_color)
Dans cet autre exemple, on permet de contrôler la position d'un moteur à l'aide d'un potentiomètre.
In [ ]:
def move_motor(event):
# The potentiometer gives a value in [0, 100]
# So we scale it to the motor range: [0, 180]
robot.my_motor.position = event.new_value * 1.8
In [ ]:
robot.my_pote_tard.add_callback(event='moved', cb=move_motor)