Ros IMU

A minha experiência com IMU’s no ROS resume-se ás placas de exploração do MPU6050 com a referência GY-521, e diga-se desde já que tem sido problemática devido a minha incapacidade de concretizar configurações estáveis que explorem este IMU nos robots.

A GY-520 é uma placa de exploração do MPU6050 com o aspecto da imagem abaixo.

IMU GY-521 (MPU6050)

O esquema desta placa é o exibido abaixo.

Esquema do GY-521

Segundo este esquema, a placa deve ser alimentada com 5v, e é também notório que inclui pullups de 4.7k para os 3.3V, assim como um condensador de decoupling de 0.1uF, entre oVDD e GND.

O interface do IMU com o ROS pode ser :

  • Directo, ou seja, o Raspberry Pi comunica directamente com o IMU por meio do bus i2c.
  • Indirecto, ou seja, um microcontrolador (ex: Arduino)  encarrega-se de efectuar as leituras e as entregar ao Pi por ligação serie.

Segundo os howto a ligação entre o Raspberry Pi, Banana Pi, ou Arduinos como GY-521 é fácil de efectuar.

GY-521 Raspberry Pi3

 

Depois de efectuadas as ligações é necessário escrever um node para o ROS que efectue as leituras do MPU6050 e as publique num tópico como mensagens do tipo:

sensor_msgs/imu

Outra opção é usar um dos pacotes ROS que contêm um node para o MPU6050 indicados na lista abaixo.

  • matpalm
  • brNX
  • fsteinhardt
  • chrisspen

Um aspecto importante é conseguir explorar o mpu6050 no modo DMP pois isso permite conhecer a orientação e preencher os campos orientation.(xyz) das mensagens (sensor_msgs/imu).

matpalm

https://github.com/matpalm/ros-mpu6050-node

Directo. Usa lib WiringPi.

Funciona (isolada)

  • Sem DMP
  • Sem TF
  • Sem Valores de covariancia

Launch parameters: (none)

Apenas angular_velocity e linear_acceleration com base nos raw values.

brNX

https://github.com/brNX/ros_mpu6050_node

Branch: rpi-mpu6050-hmc5883l

Directo. Usa lib linux-mpu9150.

Funciona (isolada)

Caracteristicas:

  • Com DMP
  • Com tf
  • Com magnetometro (HCM5883)
  • etc

Launch parameters:

  • frequency
  • i2c_bus
  • yaw_mix_factor
  • frame_id

 

MPU 6050 + hmc5883 node for ROS using the /dev/i2c-x device

Para este node funcionar no Raspberry Pi Na linha 39, ou perto, trocar:

pn.param<int>("i2c_bus",i2c_bus,0);

para

pn.param<int>("i2c_bus",i2c_bus,1);

O valor 1 corresponde ao bus i2c utilizável no Raspberry Pi.

fsteinhardt

https://github.com/fsteinhardt/mpu6050_serial_to_imu

Indirecto, via serial com um arduino a controlar o MPU6050 com a biblioteca do Jeff Rowberg.

Não experimentei.

chrisspen

https://github.com/chrisspen/ros_mpu6050_node

Directo. Usa I2CdevLib (Jeff Rowberg) e Bcm2835 (requer a instalação destas bibliotecas; instruções no endereço acima)

Funciona (isolada)

Caracteristicas:

  • Com DMP
  • Com tf
  • Com magnetometro (HCM5883)
  • etc

Launch parameters:

  • frequency
  • ado
  • frame_id
  • ax
  • ay
  • az
  • gx
  • gy
  • gz
  • linear_acceleration_stdev
  • angular_velocity_stdev
  • pitch_roll_stdev
  • yaw_stdev

 

Necessita de ser executado como root

sudo bash -c “source /opt/ros/kinetic/setup.bash; source /home/ubuntu/catkin_ws/devel/setup.bash; roslaunch ros_mpu6050_node mpu6050.launch”

Outros

https://github.com/mdleiton/MPU9255

Aplicações do IMU no ROS.

O IMU pode pode ser usado para melhorar a odometria, pela fusão dos seus dados com os encoders.

 

Problemas com o MPU6050 no ROS

Muitos…

Usando a lib i2cdevlib, o mpu6050 no modo dmp tem problemas de estabilidade no arduino.

https://forum.arduino.cc/index.php?topic=199671.0

https://forum.arduino.cc/index.php?topic=279431.0

 

Outras ligações

https://forum.arduino.cc/index.php?topic=394691.0 (GY-521 com condensador errado)

hhttp://wiki.ros.org/imu_filter_madgwick

ttp://docs.ros.org/melodic/api/robot_localization/html/index.html

https://answers.ros.org/question/312290/how-to-fuse-encoder-ticks-imu-for-odometry/

http://www.pibits.net/code/raspberry-pi-mpu6050-python-example.php

https://learn.sparkfun.com/tutorials/raspberry-pi-spi-and-i2c-tutorial/all

https://github.com/jrowberg/i2cdevlib/tree/master/RaspberryPi_bcm2835

https://github.com/richardghirst/PiBits/tree/master/MPU6050-Pi-Demo

https://github.com/mdleiton/MPU9255

https://github.com/matpalm/ros-mpu6050-node

https://github.com/chrisspen/ros_mpu6050_node

 

ROS camera and IMU synchronization