Você está na página 1de 3

Relatório de CT-213

1o Laboratório de CT-213.

Fellipe Mascarenhas da Silva Oliveira

Turma 2023

Professor:
Marcos Máximo

Instituto Tecnológico de Aeronáutica – ITA


Departamento de Computação
1. Breve explicação em Alto Nível da implementação

1.1. Máquina de Estados finita


A implementação é feita com base em polimorfismo em que cada estado do robô representa
um “filho” da classe abstrata de estado. No roomba existem quatro classes filhas: Mover para
frente, Mover em espiral, Ir para trás e rotacionar, além de existir uma classe chamada máquina
de estados finita, que é responsável por atualizar e executar o estado atual. Cada classe possui
um atributo contador para contar o tempo em que está em execução, uma função para checar se a
máquina de estados deve atualizar seu estado e uma função que define o comportamento daquele
estado. Por exemplo, a função de checar transição de estado no mover para frente é se ele colide
com a parede ou se o tempo de percurso foi maior que 3 segundos e a sua função de executar
o seu comportamento apenas define a velocidade do roomba como sendo para frente e atualiza
o seu atributo de tempo de execucação a cada frame. Os estados de ir para trás e mover em
espiral são semelhantes ao estado de mover para frente, porém a classe rotacionar apresenta uma
particularidade de calcular um valor aleatório para o ângulo que o robô irá rotacionar, isso foi
feito selecionando um float entre 0 e 1 para multiplicar o número pi e definir o valor absoluto do
angulo e uma inteiro entre -1 e 1 para selecionar se o ângulo seria negativo ou positivo, feito isso,
basta dividir o valor absoluto desse angulo pela velocidade angular padrão e encontrar o tempo de
rotação.
1.2. Árvore de comportamento
A implementação é feita usando uma árvore estruturada por meio de lista. Cada nó dessa árvore
apresenta uma propriedade, os nós folhas são os que representam as ações do robô e os outros nós
servem para formar a lógica dessas ações, sendo eles o sequence e o selector. Basicamente para
formar a árvore é preciso criar um selector na raiz e adicionar dois sequences nesse selector, e a
partir dai ir adicionando os nós de ações, cada nó de ação retorna um status que representa qual será
o próximo comportamento: Running faz com que o comportamento seja repetido, Sucess faz com
que o comportamento acabe e o sequence retorne Sucess e Failure faz com que o comportamento
acabe e o sequence retorne Failure. A implementação das ações e dos comandos para trocar de
comportamento é muito semelhante ao da máquina de estados finita e são feitas, respectivamente,
na função enter e execute da classe de nós folha (Leaf Node), lembrando que essas classes contam
com o atributo contador para guardar o seu tempo de execução.

1
2. Figuras comprovando funcionamento do código

2.1. Máquina de estados finita

Figura 1: Máquina de estados finita

2.2. Behavior Tree

Figura 2: Behavior Tree

Você também pode gostar