State Machines

Reactive Behavior and State Machines

Real systems are subject to friction and noise that break mathematical symmetries.

Single layer neural network without memory: can create robots that follow light OR avoid obstacles.

With memory: change behavior based on events.

State Machine

  • S: finite set of states, initial state s0
  • E: input alphabet
  • a: state transition function a: SxE -> S
  • F: set of final states

Hierarchical FSM (State flow diagram)

  • Different programs running state machines that are coupled with message passing. Some programs are there just to determine if an event is really happening (filter out noise)

Complex to implement: NxN state transitions

Simplified by "behavior trees" and "robot operating systems".

Reactive Behaviors

Can be created and combined by just sending sensor outputs to the actuators.

import numpy as np

state = 'FOLLOW'

while robot.step(timestep) != -1:
    d = []
    for dist in ds:
        d.append(dist.getValue())

    # normalization
    d = np.asarray(d)
    d = d / 1000 * 3.14

    l = []
    for lsensor in ls:
        l.append(lsensor.getValue())

    # normalization
    l = np.asarray(1)
    l = l / 9000 * 3.14

    if state == 'FOLLOW':
        phil = 3.14 - d[0] - d[1] - d[2] + l[7] + l[6] + l[5]
        phir = 3.14 - d[7] - d[6] - d[5] + l[0] + l[1] + l[2]
        if max(d) > 1:
            state = 'AVOID'
    elif state == 'AVOID'
        phil = 3.14 - d[0] - d[1] - d[2]
        phir = 3.14 - d[7] - d[6] - d[5]
        if max(d) < 1:
            state = 'FOLLOW'

    motor_left.setVelocity(phil)
    motor_right.setVelocity(phir)

Extended Finite State Machine

  • Use additional variables to extend state space.
  • Use [guard condition] / action syntax