Documente Academic
Documente Profesional
Documente Cultură
Tuto
Une machine à états finis (FSM) est un modèle utilisé pour représenter et contrôler
le flux d'exécution (similaire aux diagrammes de flux).
Les FSM sont largement utilisés en informatique et en ingénierie pour modéliser les
comportements des machines, par exemple, le mouvement d’un robot.
▪ Un ou de plusieurs états.
▪ Une ou de plusieurs transitions
▪ Des événements
Une FSM commence par un état spécial, appelé état initial, procède par
transitions, en fonction de l'entrée, aux différents états et se termine normalement
dans des états terminaux. Un état qui marque un flux d'opération réussi est appelé
un état d'acceptation.
La machine est dans un état actif à la fois. Puisqu’une machine à états finis est un
système event-driven, les transitions sont déclenchées par des événements.
Pour pouvoir effectuer des différentes actions, elle doit transitionner d'un état à un
autre en fonction de l’état précédent et des événements. Chaque état peut avoir
multiples transitions sources et de destination.
1 / Paquet cozmo_fsm
cozmo_fsm fournit une notation abrégée qui facilite la construction de FSM bien
formées. Les fichiers écrits avec cette notation doivent être traduits en fichiers
Python à l'aide de l'outil genfsm et exécutés dans simple_cli en utilisant la
commande runfsm.
page
01
Tuto cozmo_fsm : Machines à états finis
1 Notations
label: NodeClass(arguments)
Nous avons ici une machine comportant deux nœuds. Une première action pour
avancer 50 mm (le nœud initial) et un deuxième qui consiste à faire parler le robot.
move_and_say.py
1 import cozmo
2 from cozmo.util import distance_mm, speed_mmps
3
4 def cozmo_program(robot: cozmo.robot.Robot):
5
6 robot.drive_straight(distance_mm(50), speed_mmps(50)).wait_for_completed()
7 robot.say_text("Salut le monde").wait_for_completed()
8
9 cozmo.run_program(cozmo_program)
page
02
Tuto cozmo_fsm : Machines à états finis
MoveAndSay.fsm
1 from cozmo_fsm import *
2
3 class MoveAndSay(StateMachineProgram):
4 $setup{
5 Forward(50) =C=> Say("Salut le monde")
6 }
Important !
Pour pouvoir lancer les programmes genfsm, simple_cli et runfsm depuis votre
dossier de travail il est nécessaire de faire une configuration additionnelle.
Référez-vous à l’Annexe A pour en savoir plus.
Analyse
▪ [3] À la différence de le SDK, on utilise une classe et non une fonction pour
créer un programme. Cette classe doit hériter de StateMachineProgram.
▪ [4] Définition des états et des transitions. Le premier nœud indiqué devient
le nœud initial, dans ce cas, le nœud Forward.
page
03
Tuto cozmo_fsm : Machines à états finis
3 / FSM2 : Métronome
Dans cet exemple, nous avons deux nœuds qui indiquent à Cozmo de parler deux
fois, la première pour dire « tick » et après « tock ». Entre les deux il y a un temps
mort de 1 seconde pour aller de « tick » à « tock » et de « tock » à « tick »
indéfiniment.
Cet automate peut être défini avec la notation abrégée cozmo_fsm de la façon
suivante :
TickTock.fsm
1 from cozmo_fsm import *
2
3 class TickTock(StateMachineProgram):
4 $setup{
5 tick: Say('Tick') =T(1)=> tock
6 tock: Say('Tock') =T(1)=> tick
7 }
Analyse
▪ [4] On définit un nœud étiqueté comme « tick » qui réalise l’action Say. En
fait, Say est un nœud d’action.
page
04
Tuto cozmo_fsm : Machines à états finis
▪ Une fois que le temps est épuisé, la machine se dirige vers l’état étiqueté
comme « tock » (ligne 5).
▪ [5] On définit un nœud étiqueté comme « tock » qui réalise l’action Say.
▪ Une fois que le temps est épuisé, la machine se dirige vers l’état étiqueté
comme « tock » (ligne 4).
▪ On recommence, indéfiniment.
Examinons un exemple de Fork/Join des nœuds. On a le nœud initial qui n’a pas de
conditions pour passer d’un côté ou de l’autre (transition Null), c’est un fork.
page
05
Tuto cozmo_fsm : Machines à états finis
BackItUp.fsm
1 from cozmo_fsm import *
2
3 class BackItUp(StateMachineProgram):
4 $setup{
5 launcher: StateNode() =N=> {driver, speaker}
6
7 driver: Forward(-100, 10)
8 speaker: Say('Beep!') =C=> speaker
9
10 {drive, speak} =C=> finisher: Say('Safety first')
}
Analyse
page
06
Tuto cozmo_fsm : Machines à états finis
▪ Extensibles : Afin que vous puissiez créer vos propres types de nœuds et de
transitions.
Exercices d’entraînement
page
07
Tuto cozmo_fsm : Machines à états finis
Note
Windows
Linux
page
08
Tuto cozmo_fsm : Machines à états finis
export PYTHONPATH=${PYTHONPATH}:<votre-chemin>/cozmo-
tools/cozmo_fsm
$ source .bashrc
$ pyhon
… initialization stuff …
>>> from cozmo_fsm import *
>>>
page
09
Tuto cozmo_fsm : Machines à états finis
Action Nodes
ActionNode Classe de base pour les nœuds d'action
Say(text) Parle du texte.
Forward(distance, speed) Avance une distance à une vitesse spécifiés.
Turn(angle) Tourne un angle spécifié.
GoToPose(pose) Utilise la méthode go_to_pose() du SDK.
SetHeadAngle(angle) Place la tête à l'angle spécifié.
SetLiftHeight(height) Met le levier à la hauteur spécifiée.
DockWithCube(object) Utilise la méthode dock_with_cube() du
SDK.
PickUpObject(object) Utilise la méthode pick_up_object() du
SDK.
PlaceObjectOnGroundHere(object) Utilise la méthode
place_object_on_ground_here() du SDK.
PlaceOnObject(object) Utilise la méthode place_on_object() du
SDK.
Animation Nodes
AnimationNode(anim_name) Utilise la méthode play_anim() du SDK.
AnimationTriggerNode(trigger) Utilise la méthode play_anim_trigger()
du SDK.
Behavior Node
StartBehavior(behavior) Utilise la méthode start_behavior() du
SDK.
StopBehavior Utilise la méthode stop() du SDK.
FindFaces Utilise le comportement FindFaces du
SDK.
KnockOverCubes Utilise le comportement KnockOverCubes
du SDK.
LookAroundInPlace Utilise le comportement
LookAroundInPlace du SDK.
page
010
Tuto cozmo_fsm : Machines à états finis
page
011