collapse

* Links de Robótica

* Posts Recentes

Fonte de Alimentação Simétrica com carregadores por vasco
[Hoje às 01:26]


Díodo schottky por jm_araujo
[Hoje às 00:33]


EtherCAT / LAN9252 por beirao
[Ontem às 23:38]


pasta de soldar por Hugu
[Ontem às 18:41]


Apresentação por senso
[22 de Agosto de 2017, 17:34]


duvidas sobre utilização de um osciloscopio(zito) num circuito básico por vasco
[19 de Agosto de 2017, 01:09]


A Paixão da Física Walter Lewin , Warren Goldstein por Njay
[18 de Agosto de 2017, 11:45]


Gerar CPL file a partir dos Gerbers? por Hugu
[18 de Agosto de 2017, 00:22]


Ajuda num relógio para termoacumulador por dennis_boy
[17 de Agosto de 2017, 00:07]


Aspiração para CNC por LVirtual
[14 de Agosto de 2017, 17:34]

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

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

Offline MAntunes

  • Mini Robot
  • *
  • Mensagens: 56
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: 69
« Última modificação: 25 de Novembro de 2016, 00:36 por ralex »

Offline KammutierSpule

  • Mini Robot
  • *
  • Mensagens: 1.103
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.364
  • 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: 56
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.726
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: 56
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: 730
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.364
  • 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: 730
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: 56
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.364
  • 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: 56
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.364
  • 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: 56
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?