Fala galera, neste post gostaria de introduzir um conceito que talvez muito de vocês não conheçam e quem sabe nunca ouviram falar. 😯 Muita vezes pode ser muito difícil programar os nossos robôs de uma maneira sequencial, por exemplo, você tem que programar o robô para andar para frente até que ele encontre um obstáculo, vire para esquerda depois volte a andar para a frente novamente. Esse programa pode ficar muito extenso e difícil de ser compreendido. Como tentar simplificar isso? A resposta pode ser: usando Máquina de Estados. O tema de hoje é uma ferramenta que pretendo utilizar algumas vezes nos meus posts futuros e que pode quebrar um “galhão” em algumas situações do nosso dia a dia. Então, vamos lá entender o que é essa tal Máquina de Estados? 😉
O que é essa tal de Máquina de Estados
Vamos lá! Uma Máquina de Estados Finitos (FSM – Finite State Machine) ou simplesmente Máquina de Estados (em alguns lugares também é conhecida como autômato finito) é um modelo matemático muito utilizado para representar programas de computadores e circuitos lógicos, é uma velha conhecida de estudantes de engenharia. Você pode utilizar uma máquina de estados para implementar comportamentos nos seus robôs, como por exemplo, siga uma linha preta, desvie de um obstáculo, faça uma curva, etc.
OK! Mas isso não deve ter ajudado a você entender melhor o que é uma máquina de estados, estou certo? Então vamos simplificar as coisas, vou começar mostrando a figura abaixo para ajudar entender este conceito tão abstrato.
Você deve ter identificado alguns elementos nesta figura acima, ESTADO, EVENTO, AÇÕES e TRANSIÇÃO. Vamos entender o que significa cada um desses termos:
- ESTADO: descreve a situação da máquina, com base em eventos passados ou presentes, refletindo assim a história do que aconteceu desde o início do funcionamento até o momento atual;
- TRANSIÇÃO: não é algo visível. Quando um evento ocorre num determinado estado, é a transição que leva a máquina de um estado a outro;
- EVENTO: pode ser representado por acionamento de um botão, leitura de um sensor, estouro de um temporizador. Eventos são os responsáveis por disparar as transições entre os estados;
- AÇÃO: é a saída visível de uma máquina de estados, são os comportamentos propriamente ditos.
A maneira mais fácil de se representar uma máquina de estados é fazendo um Diagrama de Estados como apresentado na figura acima. Os estados são representados pelos círculos e englobam as ações, as transições são representadas por setas que levam de um estado a outro, e por fim, os eventos estão localizados sobre as transições.
Obs.: Quando você for projetar uma máquina de estados você deve tomar cuidado em não criar um estado atrativo, ou seja, um estado que não leva a outro estado, isto pode travar sua máquina de estados.
Criando uma Máquina de Estados no LEGO Mindstorms
Uma máquina de estados pode ser facilmente implementada seguindo a estrutura básica apresentada na figura abaixo. Basicamente ela é construída utilizando um estrutura de repetição (ciclo) e uma estrutura condicional (comutação) e uma variável (no meu exemplo chamei de S) com os devidos lugares para alteração de seu valor. Clique na imagem para ampliar.
Você pode ter estranhado o meu bloco de comutação, é o mesmo que você está acostumado a usar, eu só cliquei no ícone “Alternar para a visualização em abas” que fica canto superior esquerdo do bloco. Essa máquina de estados é super simples, mas o funcionamento dela pode ser utilizados para ações mais complexas (nos próximos posts vou dar exemplos de como utilizar máquinas de estados para situações mais complicadas que vocês encontram durante as competições), a estrutura sempre vai ser a mesma.
Cada aba do bloco de comutação representa um estado, eu prefiro utilizar textos para nomear os estados (poderia utilizar números), eles são mais intuitivos, por exemplo, cada estado pode ser uma saída de base ou missão a ser realizada no tapete. A seleção de qual deve ser o estado atual é feita a partir do valor salvo na variável S, portanto lembre-se de atualizar a variável S com o nome do próximo estado a ser executado. O que define quando deve ser feita a transição entre um estado e outro é o que chamamos de evento, em todos os meus casos eu utilizei o aperto do botão central do bloco EV3.
Para facilitar um pouco a vida de vocês eu já deixei aqui o arquivo contendo o programa exibido acima. E aqui um vídeo da máquina de estados em funcionamento.
Bem pessoal não quero passar muita informação de uma vez só, no meu próximo post vou voltar ao assunto, porém, com uma aplicação mais parecida com o dia a dia de vocês. 😉
Fiquem na paz, abraço e que a Força esteja com vocês… 😀
Ótimo post!