動機
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するところにトライ。