環境
デバイス:JetsonTX2
Jetpackバージョン:3.2
ROS:Kinetic
OS:Ubuntu16.04
加速度センサ:RT-USB-9AXIS-00(https://www.rt-shop.jp/index.php?main_page=product_info&products_id=3416)
カーネル再コンパイル
JetsonTX2にはUSBデバイス認識するデバイスドライバのうちttyACM*などを認識するドライバがデフォルト入っていない。そのため、今回の加速度センサを認識するためにはカーネルを再コンパイルする必要がある。
カーネルの再コンパイル方法
以下のベージを参考にカーネルを再コンパイルする。動画を参考にして実施すれば問題なくカーネルを再コンパイルすることができる。
https://www.jetsonhacks.com/2017/07/31/build-kernel-ttyacm-module-nvidia-jetson-tx2/
加速度センサのセットアップ
今回選定した加速度センサはROSパッケージがshutdowntest.bag.active 付属する。しかし、出荷時の状態ではバイナリー出力モードが設定されており、このモードではROSのパッケージを使ったロギングはできない。そのため、まずはバイナリモードからASCIIモードへ設定を変更し、ROSパッケージを実行する。
センサのマニュアル:https://github.com/rt-net/RT-USB-9AXIS-00/blob/master/manual/USB%E5%87%BA%E5%8A%9B9%E8%BB%B8IMU%E3%82%BB%E3%83%B3%E3%82%B5ver2.0%E3%83%9E%E3%83%8B%E3%83%A5%E3%82%A2%E3%83%AB.pdf
バイナリーモードからASCIIモードへ変更
まずはセンサーをJetsonへUSB接続する。上記のカーネルの再コンパイルを実施していれば、加速度センサはdev/ttyAMC0として認識されるはずである。
cat /dev/ttyACM0
を実行すると、センサーの出力値を確認することができる。工場出荷状態ではバイナリー出力モードに設定されているため、このままではROSを使ってセンシングすることができない。この状態でマニュアルのP12に従ってセンサーの出力モードをASCIIモードへ変更する。
ROSを使ったロギング
ROSの環境構築
JetPack3.2に対応するROSバージョンはKinetic。以下のページを参考にROSをインストールする。動画を参考にして実施すれば問題なく環境を構築できる。
https://www.jetsonhacks.com/2017/03/27/robot-operating-system-ros-nvidia-jetson-tx2/
加速度センサー(RT-USB-9AXIS)用のROSパッケージのインストールと実行
本加速度センサーは提供元のRTがROSパッケージも提供しており、ROSパッケージを導入することで、ROSを使ってセンサー値をROSTopicとして扱うことができる。
https://github.com/rt-net/rt_usb_9axisimu_driver/wiki
に従い、パッケージの導入とパッケージを実行する。
パッケージのインストール
$ cd ~/catkin_ws/src
$ git clone https://github.com/rt-net/rt_usb_9axisimu_driver.git
$ cd ~/catkin_ws
$ catkin_make
$ source ~/catkin_ws/devel/setup.bash
ttyACM0(ポート)の権限変更
$ sudo chmod 666 /dev/ttyACM0
rosbagを使ったセンサのロギング及び可視化
センサー値のロギングにはrosbagを使う。
参考:https://qiita.com/srs/items/f6e2c36996e34bcc4d73
以下に実行例を示す。
前準備
$ roscore
$ rosrun rt_usb_9axisimu_driver rt_usb_9axisimu_driver
$ cd catkin_ws
$ mkdir rosbag
$ cd rosbag
ログをレコードする
bagファイルを保存したいディレクトリで以下を実行する。Ctrl + Cで停止。
/catkin_ws/rosbag$ rosbag record -a -O test_imu
[ INFO] [1572060408.228802091]: Recording to test_imu.bag.
[ INFO] [1572060408.229535499]: Subscribing to /imu/temperature
[ INFO] [1572060408.238371784]: Subscribing to /imu/mag
[ INFO] [1572060408.247299908]: Subscribing to /rosout
[ INFO] [1572060408.255613473]: Subscribing to /rosout_agg
[ INFO] [1572060408.283773046]: Subscribing to /imu/data_raw
rosbagの確認
rosbag infoコマンドでどのようなデータが保存されているか概要を確認することができる。以
下に実行例を示す。
~/catkin_ws/rosbag$ rosbag info test_imu.bag
path: test_imu.bag
version: 2.0
duration: 28.7s
start: Oct 26 2019 12:26:48.29 (1572060408.29)
end: Oct 26 2019 12:27:16.95 (1572060436.95)
size: 1.7 MB
messages: 8443
compression: none [3/3 chunks]
types: rosgraph_msgs/Log [acffd30cd6b6de30f120938c17c593fb]
sensor_msgs/Imu [6a62c6daae103f4ff57a132d6f95cec2]
sensor_msgs/MagneticField [2f3b0b43eed0c9501de0fa3ff89a45aa]
std_msgs/Float64 [fdb28210bfa9d7c91146260178d9a584]
topics: /imu/data_raw 2813 msgs : sensor_msgs/Imu
/imu/mag 2813 msgs : sensor_msgs/MagneticField
/imu/temperature 2813 msgs : std_msgs/Float64
/rosout 4 msgs : rosgraph_msgs/Log (2 connections)
rosbagの可視化
以下のコマンドを実行すると以下のようなウィンドウが出てきる。縦にrosbagに入っているROSトピックがならなんでいて、青い縦線はその時間にpublishされたことを示している。
$ rqt_bag test_imu.bag
各トピックを右クリックしてview-> plotを選択するとグラフの表示ができます。これで各データを見比べたりできる。
rosbagのCSV出力
以下のコマンド実行することで、加速度データ、速度、回転角度などのログをCSVファイルとして出力
できる。
rostopic echo -b test_imu.bag -p /imu/data_raw > test_imu_data_raw.csv
rosbag record中のコンピュータシャットダウン
rosbag record中にコンピュータがシャットダウンするもしくは、プロセスがKillされた場合、rosbagファイル正常に作成されない。そのため、本来取得できるはずの~.bagファイルは生成されず、~.bag.activeというファイルが生成される。
この状態では、bagファイルとして扱うことは出来ない。
しかしredindexコマンドを用いることで再度indexを付与し、bagファイルとして復活させることができる。
参考:https://answers.ros.org/question/40116/rosbag-file-cannot-be-made-bagactive/
rosbagの復元方法
Record中にシャットダウンが発生し、bag.activeファイルが生成されたいる状況を想定し、以下にシャットダウン後の復帰方法を示す。
まずは、rosbagファイルを保存したディレクトリへ移動し、以下のコマンドを実行
/catkin_ws/rosbag$ rosbag reindex shutdowntest.bag.active
shutdowntest.bag.active 100% 1.0 MB 00:00
実行すると、bag.orig.activeとbag.activeが生成される。
$ ls -artl
total 1876
-rw-rw-r-- 1 nvidia nvidia 1060864 Oct 8 20:05 shutdowntest.bag.orig.active
-rw-rw-r-- 1 nvidia nvidia 847507 Oct 8 20:05 shutdowntest.bag.active
このうち、bag.orig.activeではなく、bag.activeの方がリペアされたbagファイルとなるため、従来のbagファイルと同様に扱うことが可能となる。試しに以下のコマンドを実行してbagファイルを可視化してみると
、問題なくrogが可視化できることを確認できる。
$ rqt_bag shutdowntest.bag.active