9軸センサICM-20948、MPU9250、6軸センサMPU6050実験

6軸IMUセンサ MPU-6050をロボットに組み込もう

はじめに

6軸IMUのMPU-6050はTDK InvenSense社製I2Cインターフェースの3軸ジャイロセンサ+3軸加速度センサIC、amazonで格安販売されている。内蔵DMP(Digital Motion Processor)機能を使うことで、補正済みデータとしての4元数Quaternionまたはオイラー角、ロールRoll・ピッチPitch・ヨウYaw角の出力が選べる。本文は6軸MPU-6050 DMPから、4元数Quaternionを読み込んで可視化するまでの手順を以下のとおり示して、ROSドライバをGithubへ公開する。また、MPU-6050を本文のArduinoに接続ではなくMain BoardのI2Cポートへ繋ぐなどの方法がある。また、MPUシリーズはすでに新規設計非推奨になっているため、ICMシリーズは後継機種となっている。安価のため、MPU-6050サンプルの入手ルートはAliexpressにした。

mpu6050-mpu9250
mpu6050(6軸)-mpu9250(9軸)

I2Cインターフェースは、vcc、gnd、scl、sdaの4pinインターフェース

環境

・ubuntu 16.04 Tinker board(or Raspiberry Pi, PC)
・ROS kinetic
・DFRobot Romeo mini v1.1(or arduino uno互換)
・MPU-6050 GY-521

準備①

・ros-kinetic-rosserial-arduino、ros-kinetic-rosserial、rviz_imu_pluginを入れる

$sudo apt-get update
$sudo apt-get install ros-kinetic-rosserial-arduino
$sudo apt-get install ros-kinetic-serial
$cd ~catkin_ws/src/
$git clone -b kinetic https://github.com/ccny-ros-pkg/imu_tools
$cd ..
$catkin_make --pkg imu_tools

・mpu6050_imu_rosを入れる

$cd ~/catkin_ws/src/
$git clone https://github.com/soarbear/mpu6050_imu_ros.git
$cd ~/catkin_ws/
$catkin_make

準備②

・mpu6050_imu_driver/firmware/MPU6050_DMP6/MPU6050_DMP6.inoをArduino IDEでArduinoに書き込む。

imu/dataの可視化

・実に使われるポートtty????を確認する。
・rvizが自動起動して、画面にあるセンサの動きを観察する。

$sudo ls -l /dev/ttyACM*
$sudo chmod 777 /dev/ttyACM0
$roslaunch mpu6050_imu_driver mpu6050_imu.launch

・以下スクリーンショットをクリックすると、youtubeへ遷移する。

mpu6050_imu_ros
mpu6050_imu_ros

センサ融合について

MPU-6050内蔵DMPおよび、センサ融合またはデータ同化Fusionに定番アルゴリズムであるKalman Filterの他、Complementary Filter、Madgwick Filterがある。振動やシステム誤差によって測定値に大きな影響あり、フィルタリングが必須とは言える。

校正

ジャイロのドリフト、加速度センサのバイアスの校正が必要、i2cdevlibのArduino/MPU6050/examples/IMU_Zeroをarduinoに入れてオフセットを読み取り、MPU6050_DMP6.inoに盛り込む。またドリフトに対して、時間平均などキャンセリング手法の取り組みも必要だろう。

感想

「ないよりマシ」の観点から、マイナスにならないが、精度があまり追求しないロボットなどに使用可能と考えられる。ジャイロセンサの温度特性あり、またドリフトは時間とともに蓄積するので、一方加速度センサのバイアスが測定毎にあり、ただし蓄積しないので、最初から校正Calibrationの方法を講じることを考えれば、DMP機能まで用意されて可用性がある。Yaw方位角がジャイロから積分計算して合成していないので要注意で、他のセンサ例えばコンパスまたSlam Lidarなどとの組み合わせが可能である。

ソースコード

mpu6050_imu_rosソースコード(Github)

参考文献

Jeff Rowberg氏:I2C driver
ROS Repository:ROS imu_tools

関連記事

9軸IMU/AHRS 6軸&9軸回転ベクトル&3軸オイラー角 MAX1000Hz同時出力 ROS/ROS2対応 USB接続
9軸IMUセンサ 6軸/9軸フュージョン 低遅延 USB出力 補正済み ROS対応
9軸IMU ICM-20948をロボットに組み込もう
9軸IMU MPU-9250をロボットに組み込もう

ロボット・ドローン部品お探しなら
ROBOT翔・電子部品ストア