1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

JetsonTX2でROSを使った加速度センシング

Last updated at Posted at 2019-12-07

環境

デバイス: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
以下に実行例を示す。

前準備

Tearminal1
$ roscore
Tearminal2
$ rosrun rt_usb_9axisimu_driver rt_usb_9axisimu_driver
Tearminal3
$ cd catkin_ws
$ mkdir rosbag
$ cd rosbag

ログをレコードする

bagファイルを保存したいディレクトリで以下を実行する。Ctrl + Cで停止。

Tearminal3
/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コマンドでどのようなデータが保存されているか概要を確認することができる。以
下に実行例を示す。

Terminal3
~/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

image.png
各トピックを右クリックしてview-> plotを選択するとグラフの表示ができます。これで各データを見比べたりできる。
image.png

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 
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?