こんにちは、shotaです。
アールティが開発・販売しているUSB出力9軸IMUセンサモジュールのROSパッケージを更新しました。
- アスキー、バイナリ出力を切り替えなくても使える
- ROS 2 Dashingに対応
- ROS 2で追加された新機能を実装
これらの更新点を紹介します。
USB出力9軸IMUセンサモジュールとは?
USB出力9軸IMUセンサモジュール(以降、IMUモジュール)は、アールティが開発・販売している3 cm x 3 cmサイズのモジュールです。
USBケーブルでPCに接続するだけで加速度・角速度・地磁気のセンサ値を取得できます。
センサ値を表示するためのプログラミングは一切不要です。
PCに接続してターミナル等の端末を使えば、センサ値を表示できます。
センサ値はアスキーとバイナリの2種類の出力形式を設定できます。
# アスキー出力形式 # タイムスタンプ,角速度(X, Y, Z),加速度(X, Y, Z), 地磁気(X, Y, Z),温度 0,0.014899,0.029798,-0.013835,-0.307617,-0.174805,-0.983398,10.050000,-11.100000,-7.950000,35.712315 1,0.015963,0.004257,-0.011706,-0.304199,-0.173828,-0.990234,9.450000,-10.950000,-8.100000,35.811153 2,0.008514,-0.004257,-0.011706,-0.305176,-0.176270,-0.974121,8.850000,-9.450000,-9.150000,35.727287 3,0.012771,0.002128,-0.014899,-0.299805,-0.175293,-0.981934,10.800000,-10.800000,-9.000000,35.745258 # バイナリ出力形式 0xffff525439411064ccff3400a4f75915fffffdff120021033c0268fdffff525439411065cdff3200a4f7681502
アスキーはセンサ値が文字列として出力されるので、人に扱いやすい出力形式です。
バイナリはコンピュータに扱いやすい出力形式です。
IMUモジュールにはUART用のコネクタもあるので、USB通信が扱えないデバイスやマイコンにバイナリ形式のセンサ値を送ることが可能です。
IMUモジュールをロボットに組み込んで動かす際にはプログラミングが必要ですが、ROSを使うことで簡単になります。
ROSパッケージの紹介
IMUモジュールをより便利に扱うために、ROSパッケージ(rt_usb_9axisimu_driver)をGitHubに公開しています。
rt_usb_9axisimu_driverパッケージはIMUモジュールのセンサ値をROSのメッセージ(sensor_msgs/Imu、MagneticField)に変換してパブリッシュします。
アスキー、バイナリの出力切替が不要になりました
ここからROSパッケージ更新点の紹介です。
まず1つめ。
アスキー、バイナリの出力形式を自動で判別するようになりました。
以前はバイナリ出力形式のみに対応していたため、IMUモジュールの設定を変更してからROSパッケージ(ノード)を実行していました。
今後はその作業が不要になります。
出力形式を気にせずIMUモジュールをPCに接続して、ノードを起動できます。
# 実行例(バイナリ出力のIMUモジュールを接続した場合) $ roslaunch rt_usb_9axisimu_driver rt_usb_9axisimu_driver.launch --- 省略 --- [ INFO] [1599459791.032006443]: Format check has completed. [ INFO] [1599459791.033252652]: Data format is binary. # 実行例(アスキー出力のIMUモジュールを接続した場合) $ roslaunch rt_usb_9axisimu_driver rt_usb_9axisimu_driver.launch --- 省略 --- [ INFO] [1599459870.663116974]: Format check has completed. [ INFO] [1599459870.663654889]: Data format is ascii.
ROS 2に対応しました
続いて2つめ。
ROS 2 Dashingに対応しました。
パッケージ自体はROS 1と同じで、ブランチをdashing-develに切り替えると使用できます。
使用方法はパッケージのREADMEに記載しています。
ROSメッセージの形式は変更されていないので、ROS 1パッケージと同じようにアプリケーションを構築できると思います。
ROS 2で追加された新機能を実装しました
最後に3つめ。
ROS 2で追加された新機能を実装しました。
ROS 2にはROS 1に無い機能がいくつかあります。
新しい機能のうち、Lifecycle(ライフサイクル)とComponent(コンポーネント)をパッケージに取り入れました。
ライフサイクル機能を使うことで、ノード実行中に、モジュールを抜き差ししたり、パブリッシャーを稼働/停止することができます。
このパッケージはコンポーネントとして実装されているため、他のROS 2パッケージに共有ライブラリとして組み込むことができます。
ライフサイクル、コンポーネント機能の使用例はパッケージのREADMEに記載しています。
次回の記事
rt_usb_9axisimu_driverのREADMEに使用方法は書かれていますが、本当に実行できるか不安があると思います。
また、具体的にどのようにロボットに取り付けて使用するのかも気になることでしょう。
次回以降の記事で、rt_usb_9axisimu_driverの使い方や、ロボットに取り付けて動かす例を紹介します。