Projeto

Geral

Perfil

Walk Detour » Histórico » Versão 4

André Vidal, 22/08/2021 15:40 h

1 1 André Vidal
h1. Walk Detour
2 2 André Vidal
3 4 André Vidal
Essa função determina o tanto que o robô deve andar em linha reta após não ter nada a sua frente a uma distância menor que uma constante atribuída. Essa constante atribuída no momento se encontra sendo o próprio Dmin usado na função de definir o desvio. No futuro talvez isso mude. A implementação em sua forma original é feita da seguinte forma: 
4 2 André Vidal
5 4 André Vidal
*distancia a ser percorrida* = (*ultima distancia registrada* / *cos(inclinação instantânea)* )  * *cos(inclinação instantânea- fase fixa)*
6 3 André Vidal
tempo de caminhada = *distancia a ser percorrida* / *velocidade*,
7 1 André Vidal
8 3 André Vidal
, onde a *velocidade* é calculada de antemão e passada para o sistema como uma constante.
9
A *fase fixa* é uma cte que foi calculada no intuito de o código funcionar de uma maneira que descreverei mais a frente.
10 1 André Vidal
11 4 André Vidal
Quando se passar um intervalo um intervalo de tempo = tempo de caminhada, o estado atual passa a ser parado (até o momento o estado atual era o estado caminhando -foi setado isso imediatamente antes da chamada da função Walk Detour).
12 1 André Vidal
13
Quando o robô girou após estar de frente com um o obstáculo, a geometria fica descrita dessa maneira:
14
15 3 André Vidal
!http://redmine.roboime.com.br/attachments/download/5640/walkdetour.png!
16
17 1 André Vidal
18 4 André Vidal
Onde *R* indica a posição do robô, *In* a angulação em que o robô foi deixado após a função "direcao_desvio", *Fase* é a *fase fixa*, *Dmin* é a distância a partir da qual o robô considera que há um obstáculo em sua frente e entra no loop de desvio, *Datual* é a ultima distancia captada pelo robô após sair da funcao "direcao desvio" e *Final* é a posição em que a função mandará o robô caminhar. Para esse In pequeno, resultante de um Datual levemente maior que o Dmin, constata-se que a posição final implica em uma colisão com o robô. Acredito que isso possa ser evitado se na função "direcao_desvio" usarmos uma distancia de segurança para o giro maior que a distancia para detecção e objeto.
19 1 André Vidal
20 4 André Vidal
O *In* igual a 12.5º foi uma medida geométrica estimada para a posição final ser conveniente com o tamanho do robô e do obstáculo após um desvio no qual o E fica próximo a quina do objeto.
21 3 André Vidal
22 4 André Vidal
23
O arquivo da simulação está disponível em: https://www.geogebra.org/m/e8cnrjsp
24
25
Aparentemente, o robô pode sair da função "direcao_desvio" sem está apontado para obstáculo algum. Nessa situação, *Datual* passa a ser infinita. Isso resulta em um bug que inviabilizaria o funcionamento dessa função.