ArsenicLAB

ロボット工学がメイン

【入門】マイコンでIMUを使う

ここ数年でIMUを使った開発が多かったので、これからIMUを使ってみたいという人向けに(主にマイコンでの)IMUの使用方法等についてまとめたいと思います

 IMUとは?

IMUとはInertial Measurement Unit(慣性計測装置)の頭文字をとったもので、主に加速度と角速度を検出するための装置です。3次元空間上でのx軸,y軸,z軸上での加速度を検出できる加速度センサは、3軸加速度センサと呼ばれます。同じようにx軸,y軸,z軸まわりの角速度を検出できる角速度センサは、3軸角速度センサと呼ばれます。

IMUには6軸IMUや9軸IMUと呼ばれるものがありますが、6軸IMUは上記の(3軸加速度)+(3軸角速度)を検出できるセンサという意味になります。9軸のIMUはこれに地磁気センサを3軸追加したもので、厳密には地磁気は慣性ではありませんが、よく一緒に搭載されるためIMUでひとくくりにされて呼ばれることが多いです。

加速度センサ

  • センサが取り付けられた物体の加速度を検出できる
  • 重力加速度も同時に検出できるため、重力方向の検出等にも応用できる

角速度センサ

  • センサが取り付けられた物体の角速度を検出できる
  • 角速度を時間積分することで、角度の変化を検出できる
  • オフセット(一定量のノイズ)が乗りやすい特性がある

IMUと似た言葉でAHRSという言葉があります。これは、Attitude and Heading Reference System(姿勢方位参照システム)の略で、物体の3次元空間上における姿勢を測定するための装置のことです。ここで言う姿勢とは、物体がどのような回転具合(姿勢角)で存在しているか(ロール,ピッチ,ヨー等)を意味します。

加速度センサと、角速度センサの情報を統合すると物体の3次元姿勢が推定できるため、IMUはよくAHRSに用いられます。複数のセンサの情報を統合することをセンサフュージョンといいます。IMUの姿勢推定のためのセンサフュージョンアルゴリズムは様々なものがあります、これは後に紹介します。

マイコンでのIMUの利用

マイコンでIMUを使用する際に、選択肢として

  • 市販のセンサモジュールを使用する
  • IMUのチップを購入し、自分で基板実装する

等が挙げられます。前者は、購入したモジュールを仕様書通りに使えばよいので楽です。後者の場合少し工数がかかり面倒ですが、個人でも十分に作成可能だと思います。

センサモジュールを使用する

IMUのセンサモジュールは、様々な通販サイトで販売されているため、入手には困らないと思います。購入する際には、センサモジュールのインターフェイスを確認して、マイコンで使用可能かどうかをチェックしましょう。マイコンで利用する場合、I2CやSPI,UART等のインターフェイスを搭載したモジュールが便利です。
I2CやSPIをインターフェイスとして搭載したIMUでは、内部レジスタに書き込み、読み込みを行うことで、IMUの設定(センサ感度等)、センサデータの読み出しを行うものが多いです。

高精度で高価なIMUモジュールには、インターフェイスがUSBであるものもあります。この場合、PCに接続しROS等を用いてセンサデータを処理するのが一般的です。また、高価なIMUモジュールには姿勢推定が機能として既に内蔵されているものもあります。

チップを購入し、基板実装する

IMUのチップはGigiKeyやMouser,マルツ等の通販サイトで個人でも入手可能です。ただし、QFNパッケージのような手作業によるはんだ付けが困難なものが多いため、実装するためには、プリント基板を外注し、はんだペーストとステンシルを用いてリフロー等を行う必要があります。

 

f:id:Arsenic25:20200227005948p:plain

出典:mouser.jp

プリント基板を外注し、自作基板にIMUを実装する方法については、こちらの記事で解説しています。

arsenic.hatenablog.com

 

 IMUでの姿勢推定

IMUを使用する目的として一番多いのが姿勢推定としての使用だと思います。ここでは代表的なIMUを用いた姿勢推定手法について概要を話します。

 相補フィルタ

相補フィルタは、加速度センサの低周波成分と角速度センサの高周波成分を足し合わせて姿勢を推定する手法です。

加速度センサから姿勢を推定するには、重力加速度の向いている方向を検出すればよいですが、加速度センサなので、重力加速度以外の通常の加速も検出してしまいます。重力加速度は一定(低周波成分)なので、通常の加速度(高周波成分)が邪魔です。

一方、角速度センサから姿勢を推定するには角速度センサの出力値を積分すれば、姿勢角の変化が求まります、ただし角速度センサにはオフセットが含まれるため、単純に積分をしてしまうと、オフセットも一緒に積分してしまい、角度が発散してしまいます。角速度センサはオフセット(低周波成分)が邪魔です。

これらの二つのセンサのそれぞれ邪魔な成分を取り除き、姿勢推定に都合のいい部分だけを取り出して姿勢推定を行おうというのが相補フィルタです。実際の実装方法は以下資料がわかりやすかったです。(実装方法は39ページを参照)

自律型ホバリング・ヘリによる各種センサ説明

拡張カルマンフィルタ(EKF)

カルマンフィルタは、センサ測定システムに正規分布に従うノイズが入ると仮定した時に、センサ測定値から確率論的に最も確からしい状態を推定する手法です。

拡張カルマンフィルタは、カルマンフィルタの線形近似バージョンで、姿勢とセンサ入力の関係を表した状態方程式非線形な場合にも対応できるカルマンフィルタです。(通常のカルマンフィルタは線形システムのみ対応)

恐らくIMUの姿勢推定で最も有名な手法です。

Madgwickフィルタ

原論文曰く、拡張カルマンフィルタを用いた姿勢推定より高速で、かつ同等以上の精度で姿勢推定を行える手法。相補フィルタの一種らしいです。

原論文は"An efficient orientation filter for inertial andinertial/magnetic sensor arrays"

論文の最後にC言語での実装例が載っています。