ROS Kineticで、bagファイル内の動画再生、情報取得

# 動機
Intel RealSense D435などで撮影した動画、デプス情報などは、bagファイルで出力することができる。そこで、bagファイルを、ROS上で再生したり情報を取得したりして、画像処理をしたいので、bagファイル周辺の備忘録を残しておく。
rosbagへの保存はできているものとして、ファイルがあるところからスタート。
保存方法などは、いずれ。

# 環境
- Ubuntu 16.04LTS
- ROS Kinetic Kame

# 参考情報
・ROSではじめるロボットプログラミング　小倉崇著　工学社


# bagファイルの確認

まずは、rosbag内の情報を確認する。

```
$ rosbag info xxxx.bag
```

と実行することで、以下のような情報が得られる。


```
$ rosbag info xxxx.bag
path:         xxxx.bag
version:      2.0
duration:     6:27s (387s)
start:        Jan 01 1970 09:00:00.00 (0.00)
end:          Jan 01 1970 09:06:27.47 (387.47)
size:         5.0 GB
messages:     25547
compression:  lz4 [4246/4246 chunks; 69.24%]
uncompressed: 7.3 GB @ 19.3 MB/s
compressed:   5.0 GB @ 13.3 MB/s (69.24%)
types:        diagnostic_msgs/KeyValue  [cf57fdc6617a881a88c16e768132149c]
              geometry_msgs/Transform   [ac9eff44abf714214112b05d54a3cf9b]
              realsense_msgs/StreamInfo [311d7e24eac31bb87271d041bf70ff7d]
              sensor_msgs/CameraInfo    [c9a58c1b0b154e0e6da7578cb991d214]
              sensor_msgs/Image         [060021388200f6f0f447d0fcd9c64743]
              std_msgs/Float32          [73fcbf46b49191e672908e50842a83d4]
              std_msgs/String           [992ce8a1687cec8c8bd883ec73ca41d1]
              std_msgs/UInt32           [304a39449588c7f8ce2df6e8001c5fce]
topics:       /device_0/info                                                       9 msgs    : diagnostic_msgs/KeyValue 
              /device_0/sensor_0/Depth_0/image/data                             1417 msgs    : sensor_msgs/Image        
              /device_0/sensor_0/Depth_0/image/metadata                         7085 msgs    : diagnostic_msgs/KeyValue 
              /device_0/sensor_0/Depth_0/info                                      1 msg     : realsense_msgs/StreamInfo
              /device_0/sensor_0/Depth_0/info/camera_info                          1 msg     : sensor_msgs/CameraInfo   
              /device_0/sensor_0/Depth_0/tf/0                                      1 msg     : geometry_msgs/Transform  
              /device_0/sensor_0/Infrared_1/image/data                          1413 msgs    : sensor_msgs/Image        
              /device_0/sensor_0/Infrared_1/image/metadata                      7065 msgs    : diagnostic_msgs/KeyValue 
              /device_0/sensor_0/Infrared_1/info                                   1 msg     : realsense_msgs/StreamInfo
              /device_0/sensor_0/Infrared_1/info/camera_info                       1 msg     : sensor_msgs/CameraInfo   
              /device_0/sensor_0/Infrared_1/tf/0                                   1 msg     : geometry_msgs/Transform  
              /device_0/sensor_0/info                                              1 msg     : diagnostic_msgs/KeyValue 

...
```
これを最初に確認することで、どのようなトピック、メッセージが保存されているか(保存できるのかも)確認できる。rosbag再生しながら、これらのトピック名を利用して、publishをしたり、subscribeすることができる。


# GUIでの確認、再生

次に、rosbagの再生を行うが、ここでは、rqt_bagを利用してみる。以下を実行すると、rosbag内の時系列の情報、位置が事前に確認できる（別端末でroscoreを起動しておく）。

```
$ rqt_bag xxxx.bag
```
左に、保存されている（保存可能な）トピック一覧があり、データのあるトピックはバーが表示されている。
次に、そのトピックをpublishして再生することを行おうとすると、たとえば、
/device_0/sensor_1/Color_0/image/data
のうえで、左クリック＞publishを選択して、チェックをつけ、メニューバー近くの再生ボタンを押下。

```
$ rostopic list 
```
で確認すれば、

```
$ rostopic list
/device_0/sensor_1/Color_0/image/data
/rosout
/rosout_agg
```
といった形で、指定したトピックが飛んでいることがわかる。
これが、画像である場合は以下のように、image_viewを使って確認してみる。
```
$ rosrun image_view image_view image:=/device_0/sensor_1/Color_0/image/data
```
と実行すれば、image_viewで動画を再生することができる。

# 今後・次回
つぎは、スクリプトからbagを再生して、publishするところにトライ。