Detalhamento

De LCAD
Ir para: navegação, pesquisa

Implementação do modelo probabilístico da pose do robô simulado (P(x|x_1,u)) no ExplorerSim

Na função UpdateMap do ExplorerSim (ExplorerSim.cs), no final, o comando abaixo envia os dados do LRS para serem colocados no mapa:

_map.Add(-_state.X, _state.Y, (_state.Theta - 90), DistanceMeasurements.Length, DistanceMeasurements);

O vetor pose (_state.X, _state.Y, _state.Theta) (x no modelo probabilístico) neste ponto é preciso na simulação. Assim, o trabalho consiste em mostrar a imprecisão probabilística desta pose no mapa conforme os modelos e algoritmos que estudamos. Os modelos e algoritmos a serem usados são:

  1. Sample Odometry Motion Model (Slide 25 do arquivo 2-motion-models.ppt - pegar versão atualizada no wiki)
  2. Particle Filter Algorithm (Slide 16 do arquivo 4-particle-filters.ppt)

A idéia é produzir no mapa uma figura como a do slide 26 do arquivo 2-motion-models.ppt. Isso pode ser feito da seguinte forma:

  1. Criar uma arquivo à parte para suas implementações
  2. Neste arquivo, criar uma função que mantenha 500 particulas de pose (cada uma delas é um vetor pose) para cada posição que o robô ocupar
    1. Devem ser criadas 500 para a posição inicial, mais 500 para a posição após o primeiro movimento, mais 500 para o segundo movimento, etc.
    2. Ao final de cada movimento do robô, o novo conjunto de partículas deve ser gerado a partir do imediatamente anterior conforme o Particle Filter Algorithm
  3. Mostrar estas partículas no mapa do mesmo modo que é mostrado o robô, isto é, sem interferir com o algoritmo que usa o mapa (ver arquivo Mapper.cs, função Map)
    1. As partículas devem ser removidas no início da função Map e os pixels que elas sobrepuseram previamente devem ser restaurados
    2. Ao final da função Map, os pixels que as partículas vão sobrepor devem ser salvos e só então as partículas devem ser colocadas no mapa (ver arquivo Mapper.cs, função Map)

A solução acima é focada na visualização do funcionamento do Sample Odometry Motion Model e do Particle Filter Algorithm. Numa implementação final (para controlar o robô), apenas um conjunto de 500 partículas será mantido a cada passo (não serão adicionadas mais 500 partículas a cada passo). Levem isso em considerão ao implementar o código para facilitar a migração do código para a versão que usaremos para controlar o robô.

Sobre o estilo do código:

  • Escrevam o código em Inglês (ver o código que coloca o robô no mapa)
  • Façam o código estruturado: funções pequenas que caibam em uma tela - se passou de uma tela, considere dividir a função em duas ou mais funções que são chamadas por uma terceira
  • Abusem do tamanho dos nomes de variáveis e funções para evitar comentários desnecessários
    • Pensem antes de escolher um nome de variável ou função
    • Usem o padrão de nomes do ExplorerSim (letras maiúsculas e minúsculas e _ em nomes de variáveis e funções)
    • Revisem os nomes de variáveis ou funções de tempos em tempos (a medida que o código vai evoluindo, vai ficando mais claro o que cada função faz e o significado de cada variável)
    • Usem o Google para checar a ortografia das palavras em Ingles
  • Comentem blocos que fazem coisas não óbvias

Trabalhem de modo a produzir código útil. Código incompleto é melhor do que zero código. Zero é péssimo!