Semana #02

Odometria

Publicado por Luís Sarmento a 15 de Março, 2018

As últimas semanas foram utilizadas para realizar tutorias de ROS e ambientar-me com a plataforma. Após este processo que decorreu sensivelmente ao longo das primeiras duas semanas foi possível iniciar a implementação da odometria.

A odometria é um processo que permite estimar a variação de posição utilizando os dados do deslocamento dos motores. Cada um dos motores do Robuter está equipado com um encoder que emite 8024 pulsos a cada volta. Sabendo o diâmetro de cada roda, e consequentemente o perímetro, é possível fazer a relação entre um pulso do encoder e o deslocamento da plataforma.

O deslocamento de uma roda pode ser definido pela seguinte expressão:

x = pulse / p_turn * 2 * PI * R

Sendo:

x - o deslocamento de uma das rodas;

pulse - o número de pulsos do encoder;

p_turn - o número de pulsos de uma volta;

R - o raio de uma roda.

O deslocamento linear pode ser definido pela média dos deslocamentos de cada uma das rodas. O deslocamento angular pode ser definido pela seguinte expressão:

Δth = 1 / Length * (xR - xL)

Sendo:

Δth - variação angular da plataforma;

Length - Distância entre as duas rodas;

xR/xL - Deslocamento da roda direita/esquerda.

A leitura dos sinais é feita pelo nodo /r_client_node e publica a informação no topic /pid_data. Para realizar a odometria foi criado um novo nodo /odometry_publisher que realiza o cálculo da odometria e publica os resultados. O diagrama de funcionamento pode ser visto na figura a baixo.

O resultado final pode ser representado em RVIZ tal como se pode ver na figura a baixo

Para concluir a implementação da odometria é necessária realizar mais algumas tarefas. O valor dos encoders obtido é um valor absoluto, pelo que quando a plataforma se desloca para trás é incrementado um valor positivo. Para corrigir isto é necessário alterar o código do Ardunio Micro (CPU3). No entanto esta alteração deve ser cuidada uma vez que o CPU2 compara o valor de referência (sempre positivo), com o valor obtido pelos encoders (que pode ser negativo após a alteração do código). Assim, o código do CPU2 também deverá ser devidamente alterado. Quando a odometria estiver corretamente implementada deverá ser testado de modo a verificar o erro associado a estimativa da posição. Deverá também ser implementado a odometria a mais baixo nível (CPU2) e verificar se o erro associado é menor.