collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[Ontem às 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

Autor Tópico: Navegação Inercial  (Lida 13882 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline MAntunes

  • Mini Robot
  • *
  • Mensagens: 75
Navegação Inercial
« em: 24 de Novembro de 2016, 22:50 »
Boas pessoal,
tenho neste momento um projeto entre mãos que consiste em estimar a posição de um robot usando a informação de um IMU e posteriormente combinar essa informação com a dos encoders do robot.
Eu percebo toda a fisica que está por trás de todo o processo, mas depois de muita pesquisa não consigo encontrar um exemplo decente da melhor maneira para implementar. A leitura dos encoders não é problema para já, mas a integração das variáveis da aceleração e velocidade angular é que se estão a tornar complicadas. Se alguém pudesse dar umas dicas neste aspeto estaria muito agradecido.

Já agora, se alguém conhecer algum artigo do género "Filtro de Kalman para totós" também agradecia.

Estou livre para responder a qualquer dúvida.
Cumps,
Miguel

Offline ralex

  • Mini Robot
  • *
  • Mensagens: 76
« Última modificação: 25 de Novembro de 2016, 00:36 por ralex »

Offline KammutierSpule

  • Mini Robot
  • *
  • Mensagens: 1.481
Re: Navegação Inercial
« Responder #2 em: 25 de Novembro de 2016, 09:40 »
Quando tiveres resultados dessa black magic partilha aqui no forum!

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Navegação Inercial
« Responder #3 em: 25 de Novembro de 2016, 11:08 »
Um filtro da Kalman pode ser tão simples quanto:
out = var*a + var2*(1-a);

a é uma variavel(para simplificar) float que varia de 0 a 1 e que é basicamente uma percentagem, ou seja, se a for 0.3 estás a dar um peso de 30% á variavel var e um peso de 70% á var2.
Tal como um PID que no papel é uma confusão tremenda de sopa de alfabeto grego em código são literalmente uma duzia de linhas em C.
Basicamente aquela salsa de arrays é quanto tens um monte de variáveis.

Para fazeres a fusão do acelerómetro com o giro e magnetometro(caso tenhas) nada como o código do Sebastian Madgwick que é bastante mais leve/rápido que hardcore kalman e é utilizado em tudo quanto é código de controlo para multi-rotores:
http://x-io.co.uk/open-source-imu-and-ahrs-algorithms/
Avr fanboy

Offline MAntunes

  • Mini Robot
  • *
  • Mensagens: 75
Re: Navegação Inercial
« Responder #4 em: 25 de Novembro de 2016, 14:36 »
Obrigado a todos!
Vou dar uma leitura atenta a todos os artigos!

Espero conseguir resultados satisfatórios e no final certamente que mostrarei esses resultados!
Vou implementar tudo num PIC24F.

Offline metRo_

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 3.753
Re: Navegação Inercial
« Responder #5 em: 25 de Novembro de 2016, 21:19 »
Um filtro da Kalman pode ser tão simples quanto:
out = var*a + var2*(1-a);

Isso e' um filtro passa-baixo um filtro de kalman e' algo mais que isso e que para sistemas lineares te garante a estimacao optima do erro.... Mas sim, um filtro complementar pode ser suficiente. Existem imensos projectos e papers sobre a utilizacao de IMU em robots, procura por exemplo por pacotes de ROS de odometria.

Offline MAntunes

  • Mini Robot
  • *
  • Mensagens: 75
Re: Navegação Inercial
« Responder #6 em: 27 de Novembro de 2016, 22:08 »
Obrigado mais uma vez.
Continuo sem encontrar nenhum paper que explique de maneira simples como fazer a integração das variaveis :/ tudo o que encontro é apenas sobre a orientação e o mais importante para mim é a posição..
Mas vou continuar à procura!

Edit: https://www.quora.com/How-do-I-implement-a-calculation-of-a-position-based-on-acceleration-measured-by-a-9DOF-IMU-with-sensor-fusion-in-C++
Encontrei essa resposta e parece-me um bom começo!
Não usa o giroscópio, mas penso que pelo mesmo raciocinio consigo obter a orientação.
Infelizmente na minha cadeira de Sensores Inteligentes não falamos de fusão de sensores, o que é um grande handicap  :-\
« Última modificação: 27 de Novembro de 2016, 22:24 por MAntunes »

Offline artur36

  • Mini Robot
  • *
  • Mensagens: 795
Re: Navegação Inercial
« Responder #7 em: 27 de Novembro de 2016, 23:04 »
Precisas da orientação precisamente para calculares a posição.
Assumindo que começas numa posição conhecida usas a orientação é aceleração para ires calculando as variações relativas da posição

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Navegação Inercial
« Responder #8 em: 28 de Novembro de 2016, 03:01 »
Mas depender de um IMU/acelerómetro para posição dá barraca depressa, porque acc tem ruido e é incerto, ao integrares duas vezes acc para teres posição em meia duzia de metros tens demasiado erro, precisas no minimo de encoders, idealmente gps á mistura.
Avr fanboy

Offline artur36

  • Mini Robot
  • *
  • Mensagens: 795
Re: Navegação Inercial
« Responder #9 em: 28 de Novembro de 2016, 08:00 »
N acho que seja impossível, dependendo da precisão que precisar. Se conhecer de antemão o mapa e puder cruzar os dados com por exemplo um sensor ultrasonico ou eventualmente tags em posições específicas pode ir corrigindo os erros de tempos a tempos.

Offline MAntunes

  • Mini Robot
  • *
  • Mensagens: 75
Re: Navegação Inercial
« Responder #10 em: 19 de Dezembro de 2016, 19:46 »
Boas pessoal,
para este projeto irei usar a seguinte plataforma robótica: https://www.dfrobot.com/?route=product/product&product_id=555 com a seguinte placa: https://www.dfrobot.com/index.php?route=product/product&product_id=1232
Surgiu então outro problema como comunicar entre todos os micro-controladores presentes.
Penso que ao ligar a plataforma à placa o barramento I2C está partilhada entre ambas sendo que aí não haverá grande problema de comunicação. Ligar tudo isto ao PIC24F que irei usar também não será grande problema pois também suporta I2C.
O problema é que segundo sei apenas pode haver um Master neste barramento, correto?
Estava a pensar em adquirir os dados do IMU e dos encoders no Arduino da plataforma, combina-los utilizando esta biblioteca: https://github.com/arduino-libraries/MadgwickAHRS e por fim enviá-los para o PIC para fazer o tratamento de toda a informação e enviar ao utlizador. Acham que isto é minimamente fazivel?

Obrigado e cumprimentos!

EDIT: Existe alguma maneira de o PIC enviar um 'request' e o Arduino enviar uma string de dados predefinida?
« Última modificação: 19 de Dezembro de 2016, 20:31 por MAntunes »

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Navegação Inercial
« Responder #11 em: 19 de Dezembro de 2016, 22:14 »
Ou tiras os Atmegas das duas placas e fazes código só para um chip...
Já fiz um robot com dois micros, e não vale a pena o tempo que perdes a fazer e debuggar código em 2 micros a interagirem entre si.
Avr fanboy

Offline MAntunes

  • Mini Robot
  • *
  • Mensagens: 75
Re: Navegação Inercial
« Responder #12 em: 19 de Dezembro de 2016, 23:25 »
Pois, acho que o mais simples é mesmo tentar portar a biblioteca de Arduino para o PIC..

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Navegação Inercial
« Responder #13 em: 19 de Dezembro de 2016, 23:37 »
De "biblioteca" tem muito pouco, só precisas de uma função..
Avr fanboy

Offline MAntunes

  • Mini Robot
  • *
  • Mensagens: 75
Re: Navegação Inercial
« Responder #14 em: 04 de Janeiro de 2017, 16:52 »
Olá de novo.
Desculpem não ter dito mais nada, mas o tempo não tem sido muito.

@senso, concordo contigo.

Vou ter que usar mesmo o PIC24F e o Arduino.
Estou a pensar em adquirir todos os valores com o Arduino, fazer as contas e depois enviar tudo numa string para o PIC, fazer novamente umas contas e apresentar os valores.
Já tenho todos os valores, mas não estou a ver como concatenar tudo numa string e enviar por I2C.

Também já sei como ler a string no PIC. O professor forneceu uns exemplos interessantes.

Existe alguma função em que consiga enfiar floats, ints e tudo seguido numa string?