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.