collapse

* Links de Robótica

* Posts Recentes

Compra colectiva seeedstudio por beirao
[15 de Dezembro de 2017, 23:06]


Robot Wars International Special por beirao
[12 de Dezembro de 2017, 22:52]


Docker por nnr
[12 de Dezembro de 2017, 13:41]


Comprar transformador de +/-12Volts por jm_araujo
[12 de Dezembro de 2017, 10:16]


Embedded World 2018 por KammutierSpule
[12 de Dezembro de 2017, 09:05]


Esquema Fonte Bancada por almamater
[12 de Dezembro de 2017, 08:13]


Meu projecto - Arm Robot com arduino por Diogo Bento
[11 de Dezembro de 2017, 23:18]


Ajuda Projecto IR / RF por dio123
[09 de Dezembro de 2017, 10:53]


Drivers Arduino UNO! por dio123
[09 de Dezembro de 2017, 10:46]


Problema em converter codigo C arduino para C + Pigpio na raspberry por vasco
[08 de Dezembro de 2017, 19:22]

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

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

Offline MAntunes

  • Mini Robot
  • *
  • Mensagens: 59
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.144
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.404
  • 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: 59
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.728
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: 59
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: 776
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.404
  • 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: 776
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: 59
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.404
  • 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: 59
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.404
  • 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: 59
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?