DAMI-M4 v1.1.0.a1

Robot DAMI-M4 v1.1.0.a1 – Actualização 1

Actualização da programação

Nesta actualização destaco os seguintes aspectos:

  • Odometria
  • Filtro de leituras anormais dos sonares
  • Soluçao de problemas anteriores
  • Primeiras configurações do RaspberryPI 3B+

Começando pelo fim.

Configurações do RaspberryPI 3B+

O Raspberry Pi 3B+ continuar a aguardar por melhores dias de atenção. Mas no entanto já instalei o Webmin , e o Apache, PHP e MySql. O proximo passo será desenvolver um pouco mais o script de Python gpioserial4.py que copiei do antigo pi e neste momento apenas se limita a aceitar inputs do teclado (que são enviados como comandos para o Arduino master), e a exibir os dados do loop linha a linha na consola do pi.

Soluções para os problemas anteriores do Robot

O inicio irregular no movimento à retaguarda não foi ainda considerado.

O movimento de rotação foi recalibrado, com um pequeno aumento do tamanho do eixo das rodas.

O problema de ficar parado em algumas situações foi também resolvido. Acontecia uma falta de sincronia entre o master e o slave (motor), pois o master nunca se apercebia do fim do movimento no slave.

A frequencia com que o master actualiza os dados dos sonares foi alterada para 33ms (bem mais rapidinho, e dentro do tempo de actualização de um sonar), conjugada com um aumento da velocidade da porta SERIAL para 4800 baud e um filtro para eliminar erros de comunicação (volta e meia aparecem erros de comunicação e esses valores não tem nada a ver com a leitura dos sonares).

O envio para o raspberry pi também foi alterado para ser feito todos os loops.

Durante os testes para consolidar esta versão também reparei que a aproximação a paredes ou obstaculos laterais tinha de ser trabalhada, e ainda continua a ter que ser melhorada.

Video exemplo do problema que detectei nos testes desta versão do software do robot.

Video da primeira abordagem ao problema, usar as leituras dos sonares laterais para detectar a proximidade, caso esteja perto, parar e andar para traz.

Correu claramente mal. O robot ficou a andar para traz e para a frente.

Video do comportamento simples que acabei por adoptar nesta versão.

Melhorou mas é obvio que o comportamento necessita de ser melhorado. Julgo que o problema também se deveu parcialmente á lentidão na actualização dos valores das leituras dos sonares, situação que entretanto foi melhorada.

Filtro das leituras dos sonares

Os sonares já tinham um filtro de ruido baseado numa biblioteca que implementa um algoritmo pseudo kalman. No entanto volta e meia tinha uma leitura completamente fora do normal que perturbava bastante a estabilidade do valor das leituras ja processado (e aproximadas ao real).

Para contornar o problema implementei um filtro que ignora, apenas uma vez, qualquer leitura cuja a discrepancia com o valor estavel seja de 33%.

Implementação da Odometria

Usei como base o código da biblioteca DeadReckoner disponivel para instalação no gestor de bibliotecas do Arduino IDE.

No entanto essa biblioteca tem um problema. Só funciona bem quando o robot anda para a frente. Tudo é andar para a frente, pois os valores dos encoders são tomados nos seus valores absolutos.  Ou seja, nessa biblioteca quando o robot roda é como se o robot andasse para a frente em termos do posicionamento e orientação calculada pela biblioteca.

Outra coisa estranha é a actualização da velocidade angular das rodas sem efectuar sempre o calculo da posição e orientação.

Como essa biblioteca não estava a funcionar acabei por fazer uma biblioteca nova: Odometry, com base na DeadReckoner e com o problema das rotações resolvido. O da actualização da velocidade angular fica para outra altura.

Esta parte não está completamente testada, e noto algumas pequenas discrepancias. O problema da leitura dos encoders no movimento de rotação, que está descrito na página dos motores usados no robot, levanta-me duvidas sobre como o contornar na odometria. Portanto. A odometria neste robot está numa fase muito precoce. Irei testa-la com a implementação da tecnica de mapeamento rudimentar com o processing3 que usei no DAMI-M3.

Hardware do robot

Como esta é uma actualização de software, o hardware continua sem alterações.

  • 1 x Nanocomputador Raspberry Pi 3B+
  • 1 x Microprocessadores Arduino Mega 2560
  • 2 x Microprocessadores Arduino Nano 328p
  • 1 x Acelerómetro e giroscópio MPU6050
  • 4 x Sonar HC SR-04
  • 1 x Ponte H L298N
  • 2 x Motores 12V 350RPM 30:1 c/ encoders de quadrante de 64CPR e resolução total de 1920 pulsos
  • 2 x Bateria de 12V
  • 1 x Modulo com os connectores para ligar as baterias
  • 1 x Power Pack de 5V
  • 1 x Divisor de tensão de 5V para 3.3V
  • 1 x Circuito de alimentação de 5V
  • 1 x Circuito de alimentação de 8V
  • 2 x Bases de acrilico (inferior e superior)
  • 4 x Suportes de sonares
  • 3 x Breadboard mini
  • 1 x Breadboard média
  • n x Fios, porcas e parafusos

Software

m4_mod7_ms1

Implementação funcional do software do robot M3 aplicado a motores DC, extendida a mais um microcontrolador.

Comportamento evitar obstaculos

m4_master_master_mod7_v2

m4_motor_slave_mod5_v2

m4_sensor_master_mod7_v2

Testes do robot

O robot foi colocado num pequeno espaço em L e o objectivo era nunca parar nem tocar nas paredes.

Video de um dos testes do robot no seu parque infantil

Como se pode ver o desempenho não foi perfeito. Infelizmente tocou em alguns obstaculos.

Este teste foi efectuado antes do aumento da frequência de actualização dos valores sonares para 33ms.

O problema de ficar parado demorou até ficar resolvido.

O problema de da paragem era a perda de sicronização dos ids terminados com o master. A solução definitiva foi deixar de controlar os ids no master, e controlar apenas o comando de fundo em execução se for zero é porque está parado.

Neste video o problema da paragem já não aconteceu. Parou mais tarde por falta de bateria.

Mais uma vez nota-se os pequenos toques, e umas decisões meio esquisitas assim como um movimento a retaguarda apos as rotações que não é o esperado. Ainda pensei não fazer já a correção a estes problemas mas acabei por razer algumas correções e melhorou.

No video ainda existem uns toques. Aspecto a ser trabalhado.

Avaliação

Os poucos testes efectuados com esta versão foram mais conforme o desejado do que nos testes da versão anterior.

Existem coisas a melhorar, como por exemplo o comportamento junto a paredes ou a objectos que não diferem muito de paredes na geometria.

Perceber porque é que ainda bate nos obstaculos, melhorar o desempenho a nessa área.