2022年5月14日土曜日

BOSCH BNO055をROSで使ってみた。

 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のモジュールよりも安い。ケース無いけど。

秋月のこういったモジュールは結構DIPサイズに変換してくれるのが多い気がする。
ブレッドボードに挿しやすくて便利。
ジャンパは表面に全部揃ってる。最初から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 件のコメント:

コメントを投稿