Macchine a stati: come un robot decide cosa fare dopo
Man mano che un robot diventa piu' intelligente, il suo codice diventa una giungla di if annidati che nessuno riesce a seguire. La cura e' una macchina a stati: un modo pulito di organizzare il comportamento.
L'idea
In ogni momento il robot e' in esattamente uno stato, una modalita' come "seguo la linea", "aggiro un ostacolo" o "cerco una vittima". Ogni stato fa un lavoro solo. Le transizioni sono le regole che lo spostano da uno stato all'altro quando succede qualcosa.
SEGUI_LINEA --(vede ostacolo)--> AGGIRA_OSTACOLO
AGGIRA_OSTACOLO --(di nuovo sulla linea)--> SEGUI_LINEA
SEGUI_LINEA --(vede striscia argento)--> ENTRA_ZONA
Perche' aiuta
- Un lavoro alla volta: il codice di "aggira ostacolo" non deve preoccuparsi di vittime o incroci.
- Prevedibile: disegni tutto il comportamento come un diagramma e ci ragioni.
- Debuggabile: stampa lo stato corrente e sai subito cosa crede di star facendo il robot.
Un esempio Rescue Line
Un robot a telecamera puo' avere una macchina "linea" (segue, gap, ostacoli, incroci, rampa) e una macchina "zona" (cerca vittime, raccogli, deposita, trova uscita). Una modalita' di alto livello passa tra loro quando il robot entra o esce dall'evacuation zone.
Il consiglio pratico
Da' un nome a ogni stato e, mentre debuggi, mostralo a schermo. Quando qualcosa va storto, lo stato ti dice dove guardare: e' bloccato in "cerca", rimbalza tra due stati, o entra in quello sbagliato? Una macchina a stati con nomi e' la differenza tra un robot che puoi migliorare e uno su cui puoi solo pregare.