#はじめに
ロボットや自動車で使うIMUに関するノウハウを書いていきます.また,最後にROSで使えるIMUを紹介します.書いている人は15年ぐらい自動車やロボットでジャイロ,加速度計,GNSS/IMU(GNSS/INS)を使ったり,GNSS/IMUの研究開発をしています.大学の教員になってから,どんなIMUを使ったらいいんですか?と聞かれることが多くなったので,IMUの選び方や実際に注意することを文章化しました.
GPS/GNSSに関しては,こんな解説記事(ロボティクスにおけるGNSS失敗学)も書いています.
研究室HP
Twitter(@mu_meguro)
#IMUの選定方法
IMUが欲しいとなった場合に,一番困るのは選定基準だと思います.ちょっとした趣味用途で電気工作をしたりマイコンを介したりする場合は,スイッチサイエンスとかで売っているInvenSenseやBoschの製品で十分ですが,
お金はもう少しかけていいから性能が欲しい場合には,IMUの仕様書を見て選ぶことになります.
しかし,
・仕様書の項目が非常に多岐に渡る
・メーカに寄って仕様の項目の名前が違う
ため,どのように選定をしていいかわからなくなることが多いかと思います.
私の経験上,IMUを選定にするにあたって重要になるポイントは,
・価格
・出力周期
・Bias Instability(バイアス不安定性,バイアス安定性)の性能
・出力方法(USB,CAN,RS232C,RS422, UART,I2C等)
・ローパスフィルタのカットオフ周波数
・自動0点補正の有無
・防水の有無
になると思います.
この中で直感的には分かり難いBias Instability,ローパスフィルタ,自動0点補正について解説をしていきます.
ただし,IMUに寄ってはBias Instabilityの性能や,ローパスフィルタの有無,自動0点補正の有無が仕様書を見ても記載がない場合が多くあります.多くのホビー用のIMUは仕様に性能が記載されていない場合が多いです.その場合は,残念ながら実際に使ってみて確認するしかありません.ただ,ホビー用だからといって性能が悪いわけではなく,あくまで性能を保証していないだけな場合が多いです.
一方,産業用途のIMUでは品質保証試験を行い,選別を行って良品だけを出荷します.その有無によって価格も変わります.
なお,以下ではIMUの中でもジャイロに注目して説明をしていきます.
##アラン分散とBias Instability(BI), Angle Random Walk(ARW)
ジャイロは角速度を計測するセンサで,その値を積算することで相対的な角度変動量を計算することができます.
ただしジャイロにも誤差がありますので,そのまま積算するだけでは積分誤差が発生してしまいます.
そのため,ジャイロの誤差補正が必用となります.よく取られる手法としては,停止時で0点の補正(オフセット補正)をする手法です.しかし,時々刻々とジャイロの誤差は変動するため,ある瞬間に0点の補正をしたからといって,長時間のセンサ性能が保証されるわけではありません.
そのため,ジャイロの開発者は誤差が変動しないジャイロの開発を目指します.
光ファイバジャイロやリングレーザジャイロといった,そもそもの計測原理で誤差が変動し難いジャイロの低価格化や,MEMS技術を利用したジャイロの高精度化が行われています.一般的に,性能が良いジャイロほど高く,値段が安くなるにつれて性能もそこそこになります.
そのためジャイロを選定するためには,何かしらの指標でジャイロの性能を示す必要があります.
そこでアラン分散を使うことで,それぞれのジャイロの性能を比較することが一般的です.
https://usermanual.wiki/Document/1998IEEE20Standard20Specification20Format20Guide.720453313
のFigure C.8—s(t) Sample plot of Allan variance analysis resultsがアラン分散の説明としてよく用いられます.
アラン分散は,ある長時間(数時間)のデータに対して,任意の時間の誤差の揺らぎを可視化したものになります.
例えば60秒ジャイロのデータを積算したときに,どのくらいの角度誤差になるのかがわかります.
アラン分散の中でも重要なパラメータは,Bias Instability(BI:バイアス不安定性,バイアス安定性)です.BIはアラン分散の値(deg/hour:DPH)が一番小さくなったときの値となります.(DPHは1時間でどのくらい角度がずれるかの値.1DPHなら,1時間で1度ずれる)
つまり,BIはジャイロの最高性能の値を示しています.日本語だとバイアス不安定や,バイアス安定性と呼ばれます.
実際にはBIに至るまでには数分程ジャイロの値を積算する必要があります.
そのため,実際の用途ではより短時間(~1分以下ぐらい)での誤差変動の指標であるAngle Random Walk(ARW)の方が関係がありますが,ARWはBIに影響を受けますので,実質としてはBIを見ていれば大きな支障はないということになります.
最近主流となっているMEMSのジャイロのBIは,10DPH~数DPHとなっています.
1DPH未満になると,一般的な用途では手が届かない光ファイバジャイロになることが多くなります.
(MEMSでも一部の製品では0.xDPHがありますが,光ファイバジャイロ同様に高価です.)
##自動0点補正
ではBIだけを見ていれば十分かというと,そうでもありません.見かけ上の性能を良くするために,自動的に0点を補正するアルゴリズムが搭載されているジャイロ/IMUが多くあるため,注意をする必要があります.
アラン分散は基本的には停止時の誤差の揺らぎを数値化しています.
そのため,自動0点補正が入っている場合には,停止時に自動的にセンサ出力が0(もしくは,平均が0となるようにオフセット補正がされる)となるため,BIの値が非常によくなります.頻繁に停止をするアプリケーションであればよいですが,ロボットや自動車ではそんな状態を仮定することはできません.なので,あるIMUでちょっとデータを取得してうまくいくと思っても,組み込んでみたら期待した動きをしない,ということが起きる可能性があります.
そのため,個人的には自動0点補正は不要だと思っています.必要であれば自分で0点補正のアルゴを組むことは難しくなく,かつ,センサ補正値が勝手に変更がされることは,後段のアルゴリズムの開発をし難くしていると考えています.
##ローパスフィルタと出力周期
近年のジャイロはデジタル出力がされるものがほとんどですが,もちろん最初はアナログで計測がされています.そのため最初にデジタル化されているところでは,数kHzでデータ変換がされている場合がほとんどと思われます.
ただし数kHzでデータを出力しても意味がないアプリケーションは多いため,データを間引く必要があります,そのため,ノイズ低減をする目的として一般的にはローパスフィルタが施されています.
ここで注意をしなければならないのは,必要以上にローパスフィルタが入っていないか?になります.極端な例ですが,数Hz~10Hzぐらいのローパスフィルタを施すと,ジャイロの出力は非常になめらかになり,見かけ上は性能が良くなったように見えます.しかし,その分高周波成分である早い動きに追従ができなくなっていることに注意をしなければなりません.
自動車やロボットでは,経験上50Hz~100Hz程度でデータを取得しないと,動きに対する追従性が悪くなると思っています.そのため,ローパスフィルタも追従性が悪くならない程度に施す必要があります.具体的には,データ取得周期をカットオフ周波数に設定するのがよいと考えています.おおむね,10Hz以上で,自動車だと30Hz~100Hzぐらいになると思います.
#ROSで使えるIMU
まず,ROS Wikiで公開されている情報を見ましょう.
いろいろIMUが掲載されているのですが,ノウハウがない人がここからすぐ選ぶことは難しいでしょう.
以下に,私の周りでよく使われているIMUを紹介しますので,選定の際の参考にしてください.
・AnalogDevices ADIS16470-1 BI:8DPH,ADIS16475-1 BI:2DPH
AnalogDevicesのIMUでUSBで取得可能になっているもの.IMU単体でも販売しているし,USBで取得可能なものもテクノロードから販売されている.日本支社がROS対応を積極的に実施しているので,今後ドライバのメンテナンスも期待できる?
https://www.mouser.jp/ProductDetail/Analog-Devices/ADIS16475-2-PCBZ?qs=BZBei1rCqCA3R2ROCmuQxg%3D%3D
https://techno-road.com/products/tr-imu.html
https://github.com/technoroad/ADI_IMU_TR_Driver_ROS1
https://github.com/technoroad/ADI_IMU_TR_Driver_ROS2
・Invensense MPU9250 (仕様書には記載が無いが,計測をしてみるとBI:10DPHぐらい)
よくアマゾンやスイッチサイエンスで販売されている安価(1000円ぐらい)なIMU.様々な機器に組み込みがされている.ただし,I2CやSPIのみなので,そのままだとPCやUSBで取得できない.SPI/I2C⇔USB変換を使ってもよいし,マイコン(Arduino)を介してもよい.
買い物で済ませたければ,RTからキットが販売がされている.
https://rt-net.jp/products/usb9imu/
https://github.com/rt-net/rt_usb_9axisimu_driver/
・XsensのIMU
ROS対応がされているIMUで,ROSの公式ページでも複数ドライバが掲載されている.例えば,MTI-630,(Digikey)とかは,BI:8DPHの性能で9万円ぐらいとなっている.通信はCAN、RS232, UART.他にもいろいろ販売されている
・多摩川精機 TAG300 BI:10DPH
航空宇宙や防衛用のセンサを開発している多摩川精機が販売しているMEMS-IMU.防水用のパッケージも販売されているのが特徴
https://mems.tamagawa-seiki.com/product/memsimu.html
https://github.com/MapIV/tamagawa_imu_driver
・IMUが搭載されたRealSense
例えばT265にはBosch BMI055が搭載されています.その値はRealSenseのROSドライバを介して取得することができます.ロボット系の研究室では一つぐらいRealSenseが転がっていると思うので,IMU替わりに使うのもありだと思います.ただし,RealSenseは自動0点補正が入っているので,値を使うときは十分注意してください.
#番外:お金がある人向け
ROS Wikiで公開されている情報にはGNSS/IMUが多いですが,その中でも自動車でよく使われているのは,
・Applanix POSLV
・Oxford Technical Solutions (OXTS) GPS/IMU products
と思います.
POSLVは測量や自動運転,OXTSは自動車の制御系でよく使われている印象があります.
両方ともとても高精度(POSLVのデータシート)であるが,値段もとても高いことが特徴でもある.高級車ぐらいします.
企業の方で開発予算が豊富にある人はこの辺から選びましょう.
他にもNovatel社のSPANがよく用いられています.SPANは直接ROSの対応はしていませんが,NMEAの出力ができるので,そこでROSとつなげることができます.
もしくはGNSS/IMUはいらない,IMUだけ,ジャイロだけ,加速度計だけが欲しい場合は,
・Honeywell HG4930
があります.
Digikeyでも売っています.ただし,100万円以上します.