こんにちは、shotaです。
この記事では、アールティが開発・販売しているUSB出力9軸IMUセンサモジュールのROSパッケージをインストールし、実行する方法を紹介します。
前回の記事について
前回の記事では、USB出力9軸IMUセンサモジュールのROSパッケージ更新内容について紹介しました。
こちらもご覧頂けるとうれしいです。
ROS 1パッケージの使い方
これからインストールして実行するパッケージはrt_usb_9axisimu_driverです。
rt_usb_9axisimu_driver(以下IMU ROSパッケージ)は、ROSのKineticとMelodic、ROS 2のDashingに対応しています。
今回はROS Melodicで動かします。実行するPCのOSはUbuntu 18.04です。
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までお待ちください。
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に接続します。
次のコマンドを実行してノードを起動します。
$ 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.と表示されたら起動完了です。
つづけて、ノードがパブリッシュしているセンサ値(トピック)を確認します。
ノードは実行したまま、新しくターミナルを起動して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
Plugins→Visualization→Plotを選択します。
rqt_plotが起動します。
Topicの欄に/imu/data_raw/linear_accelerationと入力してプラスボタンを押します。
加速度センサの値がリアルタイムで描画されます。
十字の矢印を押し、マウスでドラッグするとグラフを移動できます。
右クリックでドラッグすると拡大縮小できます。
Topicに/imu/data_raw/angular_velocityをセットすると角速度が描画されます。
/imu/mag/magnetic_fieldをセットすると、地磁気が描画されます。
/imu/temperatureをセットするとモジュール温度が描画されます。
ターミナルで数値を見るより、グラフに描画したほうがセンサ値の変化がわかりやすいですね。
このようなGUIツールを自分で作るのは大変です。
rqt_plotのようなROSパッケージを使えば、プログラミング無しで簡単にデバッグできます。
IMU ROSパッケージの応用例
ラズパイマウスのROSサンプル集(raspimouse_ros_examples)に、IMU ROSパッケージを用いたサンプルがあります。
こちらの動画のように、IMUモジュールの角速度センサ値を活用することで、ラズパイマウスの姿勢を推定し、制御できます。
このサンプルプログラムはROS 2版も用意されているので、次回以降の記事で使い方を紹介します。
まとめ
USB出力9軸IMUセンサモジュールは、USB接続するだけで加速度・角速度・地磁気が取得できるモジュールです。
ROSと組み合わせることで、より簡単にIMUモジュールを活用できます。
次回はROS 2パッケージの使い方を紹介します。