JetsonTX2でROSを使ったGPSセンシング

# 環境
デバイス：JetsonTX2
Jetpackバージョン：3.２
ROS：Kinetic
OS：Ubuntu16.04
加速度センサ：BU-353-S4（https://www.ida-japan.co.jp/GPS/BU353-S4(USB).pdf)

# GPSの接続
JetsonにGPSを接続する。USBポートに差し込むだけ。
接続したら以下のコマンドでGPSが認識されているか確認する。

```bash:bash

$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 005: ID 17ef:6047 Lenovo 
Bus 001 Device 006: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
Bus 001 Device 004: ID 05e3:0608 Genesys Logic, Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
```
Tecnnology, Inc. PL2303 Serial Portが表示されればOK。
次に/dev以下でシリアルポートとして認識されていることを確認する。

```bash:bash
$ ls /dev/ttyUSB*
/dev/ttyUSB0
```
この場合USB0として認識されていることが確認できる。

# GPSからの信号を確認
シリアルポートでの送受信を行うためのコマンドで確認する。インストールされいなければ以下のコマンドでインストールする。

```bash
$ sudo apt-get install cu 
```
以下のコマンドで受信データを確認できる。引数には、先程調べたUSBのシリアルポートを指定し、ボーレートはGPSモジュールの仕様に合わせて４８００とする。

```bash
$ cu -s 4800 -l /dev/ttyUSB0
Connected.
$GPGGA,052923.037,,,,,0,00,,,M,0.0,M,,0000*5D
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPRMC,052923.037,V,,,,,,,301119,,,N*4D
$GPGGA,052924.037,,,,,0,00,,,M,0.0,M,,0000*5A
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPGSV,2,1,08,24,75,007,32,57,79,173,22,01,62,020,,11,58,045,*72
$GPGSV,2,2,08,25,26,185,,04,19,064,,23,13,054,,16,01,328,*7D
$GPRMC,052924.037,V,,,,,,,301119,,,N*4A
$GPGGA,052925.037,,,,,0,00,,,M,0.0,M,,0000*5B
```

上記のようなデータが受信できればOK。
停止するためには”~”（チルダ）を打つ。

# ROSパッケージの導入
GPSデータを受信するROSパッケージの中でROS推奨の[nmea_navsat_driver](http://wiki.ros.org/nmea_navsat_driver)を利用する。またこのパッケージを利用するためには、[nmea_msgs](http://wiki.ros.org/nmea_msgs)も必要となる。
インストールには以下のコマンドを実行する。

```bash
$ cd ~/catkin_ws/src
$ git clone https://github.com/ros-drivers/nmea_msgs.git
$ git clone https://github.com/ros-drivers/nmea_navsat_driver.git
$ cd ~/catkin_ws
$ catkin_make
$ source ~/catkin_ws/devel/setup.bash
```


# GPSロギング
センサー値のロギングにはrosbagを使う。
参考：https://qiita.com/srs/items/f6e2c36996e34bcc4d73

### 実行方法
１つ目のターミナルでroscoreを立ち上げ、２つ目のターミナルでnmea_navsat_driverを立ち上げる。３つ目のターミナルではrosbagファイルを生成してログを出力する。

```bash:Tearminal1
$ roscore
```
```bash:Tearminal2
$ rosrun nmea_navsat_driver nmea_serial_driver
```
```bash:Tearminal3
$ cd catkin_ws
$ mkdir rosbag
$ cd rosbag
$ rosbag record -a -O test-gps
```

### 出力結果を確認する

```bash
$ rosbag info test-gps.bag 
path:        test-gps.bag
version:     2.0
duration:    2:27s (147s)
start:       Nov 30 2019 10:59:23.44 (1575079163.44)
end:         Nov 30 2019 11:01:50.50 (1575079310.50)
size:        80.2 KB
messages:    447
compression: none [1/1 chunks]
types:       geometry_msgs/TwistStamped [98d34b0043a2093cf9d9345ab6eef12e]
             rosgraph_msgs/Log          [acffd30cd6b6de30f120938c17c593fb]
             sensor_msgs/NavSatFix      [2d3a8cd499b9b4a0249fb98fd05cfa48]
             sensor_msgs/TimeReference  [fded64a0265108ba86c3d38fb11c0c16]
topics:      /fix              147 msgs    : sensor_msgs/NavSatFix     
             /rosout             6 msgs    : rosgraph_msgs/Log          (2 connections)
             /time_reference   147 msgs    : sensor_msgs/TimeReference 
             /vel              147 msgs    : geometry_msgs/TwistStamped
```
/fixが位置情報である。

# データの可視化
以下のコマンドを実行すると以下のようなウィンドウが出てきる。縦にrosbagに入っているROSトピックがならなんでいて、青い縦線はその時間にpublishされたことを示している。

```bash
$ rqt_bag test-gps.bag
```
![tegra 2019-11-30 11.08.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327375/e507ad0e-10c9-f703-7896-331144caf485.png)
各トピックを右クリックしてview-> plotを選択するとグラフの表示ができる。これで各データを見比べたりできる。

# CSV出力
以下のコマンド実行することで、加速度データ、速度、回転角度などのログをCSVファイルとして出力
できる。

```bash
rostopic echo -b test-gps.bag -p /fix > test-gps-data-raw.csv
```

CSVからグラフを作成してみた。以下のようにGPSでの位置情報をプロットできる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327375/8bac2b91-fcc8-1e8c-045b-9d67ce1943bd.png)

# その他
### ロギング中のコンピュータシャットダウンとログデータの復元方法
https://qiita.com/DrChickenGeorge/private/e143494f0d3df8cc6c37#rosbag-record%E4%B8%AD%E3%81%AE%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%82%B7%E3%83%A3%E3%83%83%E3%83%88%E3%83%80%E3%82%A6%E3%83%B3