技術情報・開発日誌

USB出力9軸IMUセンサモジュールのROSパッケージを動かす

技術情報・開発日誌

こんにちは、shotaです。

この記事では、アールティが開発・販売しているUSB出力9軸IMUセンサモジュールのROSパッケージをインストールし、実行する方法を紹介します。

前回の記事について

前回の記事では、USB出力9軸IMUセンサモジュールのROSパッケージ更新内容について紹介しました。
こちらもご覧頂けるとうれしいです。

ROS 1パッケージの使い方

これからインストールして実行するパッケージはrt_usb_9axisimu_driverです。

rt_usb_9axisimu_driver(以下IMU ROSパッケージ)は、ROSのKineticMelodic、ROS 2のDashingに対応しています。

今回はROS Melodicで動かします。実行するPCのOSはUbuntu 18.04です。

ROSのインストール方法についてはROS Wikiを参照してください。

aptによるIMU ROSパッケージインストール

IMU ROSパッケージのインストール方法はaptによるバイナリインストールと、ソースビルドの2種類あります。

aptでインストールする場合は次のコマンドを実行します。

$ sudo apt update
$ sudo apt install ros-$ROS_DISTRO-rt-usb-9axisimu-driver

2020年9月時点ではROS Kineticパッケージのみaptでインストール可能です。
MelodicとROS 2 Dashingについては次回のSyncまでお待ちください。

パッケージのsync時期についてはROS Discourseでアナウンスされます。参考リンク

IMU ROSパッケージのソースビルド

それでは、IMU ROSパッケージをダウンロードして、ビルド&インストールします。
今回はROS Melodicで使用するので、melodic-develブランチに切り替えて作業します。

ターミナルを開き、次のコマンドを実行します。

# パッケージのダウンロード(clone)と、依存関係のインストール
$ cd ~/catkin_ws/src
$ git clone -b melodic-devel https://github.com/rt-net/rt_usb_9axisimu_driver.git
$ rosdep install -r -y --from-paths . --ignore-src      

# パッケージのビルド
$ cd ~/catkin_ws
$ catkin_make

# インストール
$ source ~/catkin_ws/devel/setup.bash

これでビルド&インストール完了です。

センサの出力(トピック)をコマンドで確認する

パッケージがインストールされたので、パッケージを動かし(ノードを起動し)、センサ値を表示します。
つぎの動画のようにコマンドを入力していくので、作業前に参照してみてください。

まず、IMUモジュールをPCに接続します。

IMUモジュールをmicro-USBケーブでPCに接続する。

次のコマンドを実行してノードを起動します。

$ roslaunch rt_usb_9axisimu_driver rt_usb_9axisimu_driver.launch

[ INFO] [1600238359.987710947]: Format check has completed.
[ INFO] [1600238359.988397069]: Data format is ascii.

Data format is ascii.またはData format is binary.と表示されたら起動完了です。

[ERROR] Error opening sensor device, please re-check your devices. と表示される場合は、$ sudo chmod 666 /dev/ttyACM0を実行してポート権限を変更してください。

つづけて、ノードがパブリッシュしているセンサ値(トピック)を確認します。
ノードは実行したまま、新しくターミナルを起動してrostopic listコマンドを実行します。

$ rostopic list

/imu/data_raw
/imu/mag
/imu/temperature
/rosout
/rosout_agg

パブリッシュされているトピックの一覧が表示されます。
/imu/data_rawは加速度・角速度のトピックです。/imu/magは地磁気のトピックです。/imu/temperatureはモジュール温度のトピックです。

rostopic echoコマンドを実行して、加速度・角速度のトピックの中身を見てみます。

$ rostopic echo /imu/data_raw

--- 省略 ---
header: 
  seq: 16853
  stamp: 
    secs: 1600240656
    nsecs: 933728054
  frame_id: "imu_link"
orientation: 
  x: 0.0
  y: 0.0
  z: 0.0
  w: 0.0
orientation_covariance: [-1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
angular_velocity: 
  x: 0.00851380122924
  y: 0.00638535092193
  z: -0.0127707018439
angular_velocity_covariance: [1.1280564100000001e-06, 0.0, 0.0, 0.0, 1.1280564100000001e-06, 0.0, 0.0, 0.0, 1.1280564100000001e-06]
linear_acceleration: 
  x: -5.35343491211
  y: 0.0574608398438
  z: 7.92480749512
linear_acceleration_covariance: [0.0005356910249999999, 0.0, 0.0, 0.0, 0.0005356910249999999, 0.0, 0.0, 0.0, 0.0005356910249999999]
---
header: 

--- 省略 ---

トピックの内容がリアルタイムで出力され続けます。このうち、linear_accelerationが加速度のセンサ値で、angular_velocityが角速度のセンサ値です。
終了するときはCtrl+Cを入力します。

ノードを起動してトピックが出力されていることはわかりました。
しかし、数字だけ見てもセンサ値の変化がわかりにくいので、グラフに表示してみましょう。

rqtでセンサ値を表示

rqt_plotパッケージを使って、センサ値をグラフに表示します。
つぎの動画のようにコマンドを入力していくので、作業前に参照してみてください。

まずIMU ROSパッケージのノードを起動します。

$ roslaunch rt_usb_9axisimu_driver rt_usb_9axisimu_driver.launch

ノードは起動したまま新しくターミナルを開き、rqtコマンドを実行します。

$ rqt

rqtの実行①

Plugins→Visualization→Plotを選択します。

rqtの実行②

rqt_plotが起動します。
Topicの欄に/imu/data_raw/linear_accelerationと入力してプラスボタンを押します。

rqtの実行③

加速度センサの値がリアルタイムで描画されます。

十字の矢印を押し、マウスでドラッグするとグラフを移動できます。
右クリックでドラッグすると拡大縮小できます。

rqtの実行④

Topicに/imu/data_raw/angular_velocityをセットすると角速度が描画されます。

rqtの実行⑤

/imu/mag/magnetic_fieldをセットすると、地磁気が描画されます。

rqtの実行⑥

/imu/temperatureをセットするとモジュール温度が描画されます。

rqtの実行⑦

ターミナルで数値を見るより、グラフに描画したほうがセンサ値の変化がわかりやすいですね。

このようなGUIツールを自分で作るのは大変です。
rqt_plotのようなROSパッケージを使えば、プログラミング無しで簡単にデバッグできます。

IMU ROSパッケージの応用例

ラズパイマウスのROSサンプル集(raspimouse_ros_examples)に、IMU ROSパッケージを用いたサンプルがあります。

こちらの動画のように、IMUモジュールの角速度センサ値を活用することで、ラズパイマウスの姿勢を推定し、制御できます。

このサンプルプログラムはROS 2版も用意されているので、次回以降の記事で使い方を紹介します。

まとめ

USB出力9軸IMUセンサモジュールは、USB接続するだけで加速度・角速度・地磁気が取得できるモジュールです。
ROSと組み合わせることで、より簡単にIMUモジュールを活用できます。

次回はROS 2パッケージの使い方を紹介します。

タイトルとURLをコピーしました