Escolar Documentos
Profissional Documentos
Cultura Documentos
1
que executará caso o primeiro falhe (ou seja, bata na parede), adiciona-se como filhos, na ordem:
nó de Recuar e nó de Rotacionar (comportamento que assume quando bate na parede). É
importante lembrar que durante a execução, será reaproveitado as modificações de velocidade já
usadas da máquina de estados finita.
Sobre o primeiro nó de Sequence, ele primeiro fará entrar no MoveForwardNode. No método
enter, é importante zerar o tempo (atributo que definiu-se em todas as classes de nó-folha) para
contar o tempo sempre a partir de quando entra naquele nó. O tempo recebe o incremento no
início de cada execute (repeti a inicialização e incremento do tempo em todas outras classes
de nó-folha). Dentro do execute, são feitas as verificações de mudanças de estado (que são
as mesmas já explicadas na máquina de estado finita), só que com outra implementação: em
caso de estar batendo, retornará FAILURE (O que propagará o retorno de FAILURE para o
nó Sequence e forçará o Selector (raiz da árvore) a ir para o outro Sequence). Ao passar do
tempo de andar pra frente, retornará SUCCESS, fazendo com que o próximo nó (espiral) seja
executado pelo Sequence que é "pai” dele. Caso nenhuma transição ocorra, retorna RUNNING.
Esse comportamento é padrão nos outros nós.
Caso o nó MoveForward obtenha SUCCESS, o Sequence faz executar o espiral. De modo
análogo, se bater retorna FAILURE (vai recuar), se passar tempo retorna SUCCESS (vai para
frente) e nos demais casos só retorna RUNNING para continuar no mesmo estado. O próximo
estado (de recuar) entra quando dá FAILURE em algum dos estados anteriores, entra como
primeiro nó do respectivo nó Sequence. Não há falha para esse nó (pois já ocorre quando bate).
Quando passa determinado tempo, retorna SUCCESS e passa para o estado de girar, e enquanto
isso fica retornando RUNNING. No estado rotate segue a mesma lógica de esperar tempo, e
também não há situação que falhe, uma vez que é impossível bater após ter dado um recuo antes
de girar.
É importante frizar que a parte de setar velocidades e tempos já foi previamente explicado
na explicação da máquina de estados finita.
2
Figura 2: Print da continuação do comportamento do Roomba implementado com Máquina de
Estados Finita após já ter batido na parede (começa a assumir direções aleatórias e seguir o resto
do comportamento).