Planejamento de Tragetória » Histórico » Versão 6
Nicolas Oliveira, 26/03/2018 20:01 h
| 1 | 5 | Luciano Barreira | # Planejamento de Trajetória |
|---|---|---|---|
| 2 | 1 | Nicolas Oliveira | |
| 3 | 5 | Luciano Barreira | Nos utilizamos do algoritmo RRT (Rapidly-Exploring Random Tree) para calcular nossa trajetória. Ele busca uma trajetória a partir de um estado inicial até o objetivo expandindo uma árvore de busca. |
| 4 | 2 | Nicolas Oliveira | Para isso necessitamos de 3 funções básicas: |
| 5 | 1 | Nicolas Oliveira | |
| 6 | * Extend(env:enviroment,current:state,target:state,Step:real):state |
||
| 7 | |||
| 8 | Essa função dado um estado atual extende dando um passo em direção ao objetivo, ou em uma direção aleatória. Caso uma colisão ocorra ela retorna um estado vazio (EmptyState). |
||
| 9 | Pseudo código: |
||
| 10 | |||
| 11 | 3 | Nicolas Oliveira | ```c |
| 12 | r = (Target - Current)/||Targe-Current|| ; //vetor unitário na direção do target |
||
| 13 | NewState = r*Step + Current ; |
||
| 14 | if (Colision(NewState)) NewState = EmptyState; //confere se o novo estado vai colidir com algum obstáculo. |
||
| 15 | return NewState; |
||
| 16 | ``` |
||
| 17 | 1 | Nicolas Oliveira | |
| 18 | * Distance(current:state,target:state):real |
||
| 19 | |||
| 20 | Calcula a distância do estado atual ao objetivo, utilizamos a euclidiana nessa implementação. |
||
| 21 | |||
| 22 | * RandomState():state |
||
| 23 | |||
| 24 | Retorna um novo estado uniformemente distribuído no ambiente. |
||
| 25 | |||
| 26 | 3 | Nicolas Oliveira | ```c |
| 27 | float random_x; |
||
| 28 | float random_y; |
||
| 29 | random_x = fiel_length*(rand()-0.5); //Random gera um número aleatório uniformemente aleatório distribuído entre 0 e 1 |
||
| 30 | random_y = fiel_length*(rand()-0.5); |
||
| 31 | ``` |
||
| 32 | 1 | Nicolas Oliveira | |
| 33 | Basicamente a função estender pode utilizar como target o objetivo ou um ponto aleátório, o que garante que o algoritmo pode encontrar um caminho sem colidir com nenhum obstáculo. Como na figura abaixo: |
||
| 34 | |||
| 35 |  |
||
| 36 | |||
| 37 | A implementação seguiu o pseudo código abaixo: |
||
| 38 | |||
| 39 |  |
||
| 40 | |||
| 41 | ***A função Nearest garante que sempre extendemos a árvore do nó mais próximo do objetivo, porém ela também demanda muito processamento, já que tem q varrer a árvore toda a cada iteração. Vamos estudar um jeito para resolver isso.*** |
||
| 42 | 5 | Luciano Barreira | Definimos uma árvore de pontos como uma matriz de 4 colunas, onde a primeira é o id do ponto, a segunda a coordenada x, a terceira a coordenada y e a quarta o id do pai. Dessa forma os nós são adicionados com o id sendo incrementado de 1 a cada nó. O id do pai é o id do nó da onde aquale novo ramo foi gerado. Assim quando encontramos um solução podemos fazer o backtracking nessa árvore para reconstruir a trajetória. |
| 43 | 1 | Nicolas Oliveira | |
| 44 | 5 | Luciano Barreira | O próximo passo foi implentar a extenção do RRT (ERRT), com memória da última trajetória. Assim na hora de escolhermos um target podemos ir em direção ao objetivo, em uma direção aleatória ou em direção a algum ponto da última trajetória, como na imagem e código abaixo. |
| 45 | 1 | Nicolas Oliveira | |
| 46 |  |
||
| 47 |  |
||
| 48 | |||
| 49 | 5 | Luciano Barreira | Por último implementamos a suavização da trajetória que segue o algoritmo abaixo descrito. Ela auxilia muito na rapidez com que o robô será capaz de seguir a trajetóra. |
| 50 | 1 | Nicolas Oliveira | |
| 51 |  |
||
| 52 | |||
| 53 | 6 | Nicolas Oliveira | ## Raio dos Obstáculos |
| 54 | |||
| 55 | ### Robôs Inimigos |
||
| 56 | |||
| 57 | Para os robôs inimigos agora é considerada a influência da velocidade relativa. Assim o raio do obstáculo é dado por: |
||
| 58 | |||
| 59 | ```c |
||
| 60 | radius_enemy + radius_our + bound(0, |speed_enemy-speed_our|*100, 100) |
||
| 61 | ``` |
||
| 62 | E caso o goal esteja dentro de um obstáculo esse raio é reduzido o suficiente para que um trajetória válida possa ser gerada. O mesmo acontece quando o ponto inicial da trajetória está dentro de um obstáculo, o raio é reduzido afim de ser possível a geração da trajetória. |
||
| 63 | |||
| 64 | 1 | Nicolas Oliveira | ## Implementações futuras e problemas atuais |
| 65 | 6 | Nicolas Oliveira | |
| 66 | * Tornar os nossos robôs obstáculos, porém com um raio menor. |
||
| 67 | * Tornar as áreas dos goleiros e a parte de trás do gol em obstáculos |
||
| 68 | * Colocar a bola como obstáculo na situação de stop |
||
| 69 | * Tornar o RRT otimizado para diferentes personalidades |