LiDARをROSで使えるようにしたのはいいんだけど、SLAMのサンプルを試してみたらやっぱりIMUもあったほうが面白いんじゃないかということでROSで使えるIMUを探してみた。
MPU-6050(6軸)とかMPU-9250(9軸)はArduinoとかでもよく使われていて、DMPを使えばフィルタして安定しているデータを得られるんだけど、ラズパイとかだとI2Cで直結できたりするかもしれないけど、PCだとちょっと不便。WitMotionからカルマンフィルタ通したデータがワイヤレスやシリアル通信で得られるモジュールも出てるっぽいけど。
そこでカルマンフィルタ付きのIMUを探していたら、BoschのBNO055っていうセンサーがマイコン内蔵で出力がI2CとUARTが選べるという。これならUARTでUSB変換通せば簡単にPCに取り込めそう。更にはROSのドライバもあるようだ。
秋月だと1680円だし、WitMotionのモジュールよりも安い。ケース無いけど。
ブレッドボードに挿しやすくて便利。
ジャンパは表面に全部揃ってる。最初からI2Cモードになってる。ジャンパには0604のジャンパ抵抗が乗ってるぞ…
両面実装なので、ユニバーサル基板に装着する際もベタ付にはできなさそう。レベルコンバータとレギュレータも内蔵してるので5Vでも3.3Vでも使用できるみたい。入力した電圧にレベル変換されるっぽい。今回はUSBシリアル変換にCP2102を使用したので3.3Vで使用することに。
まずはROSでUARTで使用するためにI2CモードからUARTモードにジャンパを変更。J5のジャンパ抵抗をハンダで外して、J3にハンダを盛ってジャンパする。
あとはUSBシリアル変換アダプタにつなぐだけ。
まずはrivzでIMUを使用できるようなプラグインをapt-getでインストール。
sudo apt-get install ros-$(rosversion -d)-rviz-imu-plugin
ROS用のドライバにはros_imu_bno055を使用させてもらった。
インストールは説明されている通りのコマンドコピペでcatkinベースでビルドできた。
rivzでそのままセンサーの状態が表示できた。
さすが内蔵のマイコンでフィルターを掛けているだけあって安定している。ArduinoでMPU-6050の生データを見ていたときはZ回転がかなりドリフトしていたのでIMUは難しそうと感じていたけど(DMP使ったら問題なかったけど)、簡単にフィルタ後のデータをUARTで出せるBNO055は流石だ…最初はArduino+MPU-6050でDMPつかってUARTで出力とか考えていたけど、BNO055つかってみて正解だったかも。
0 件のコメント:
コメントを投稿