rosbag 사용하기 : 토픽 녹화 및 재생 | winterblooom (EunGi Han)
rosbag 이란?
rosbag이란 ROS에서 제공하는 topic을 저장하고 저장한 topic 값을 다시 재생할 수 있는 도구
rosbag을 사용해야 하는 이유
연구를 진행하다보면 실시간을 코딩 테스트를 하며 결과를 확인하고 코드를 수정해야하는 일이 빈번하다.
하지만 그럴 때마다 매번 센서를 연결해서 실제로 구동시키기를 반복하고, 결과를 놓치게 되면 다시 테스트해야 하는 불편한 상황을 마주하게 된다.
이런 상황을 해소할 수 있는 도구가 바로 ‘rosbag’이다.
rosbag을 활용하여 테스트를 하는 과정에서 topic을 녹화하게 되면 이후 코드를 테스트 할때 실제로 센서를 연결하고 구동할 필요없이 명령어 하나로 녹화된 모든 센서의 topic이 그대로 publish 되는 것을 확인할 수 있다.
따라서 이를 활용하면 실제 차량이 없는 장소에서도 녹화된 bag 파일만 있으면 어디에서든 손쉽게 센서값을 실행하고, 확인해볼 수 있으므로 연구의 효율이 훨씬 향상될 수 있다.
rosbag 명령어
rosbag을 활용할 때 주로 사용하는 명령어들을 정리해 보겠다.
녹화 (bag파일 저장 경로 : 현재 디렉토리)
특정 토픽만 저장 : 특정 토픽들(만) 저장하려면 명령어 뒤에 토픽 이름을 나열한다. (이 방법 추천! 불필요한 토픽들까지 녹화하면 용량이 매우 커지기 때문!)
$ rosbag record <녹화할 토픽 이름1> <녹화할 토픽 이름2> <녹화할 토픽 이름3> ...
ex) rosbag record /usb_cam /ar_track_marker /scan
모든 토픽 저장 : 현재 발행되고 있는 모든 토픽을 저장하고자 하는 경우에 -a
옵션 혹은 —all
옵션 추가 (발행되는 모든 토픽을 녹화하는 것이기 때문에 무턱대고 -a 옵션을 넣는 경우 용량이 너무 커질 수 있음)
$ rosbag record -a
rosbag 정보 확인 (녹화된 bag 파일에 대한 상세 정보를 확인할 수 있다.)
$ rosbag info <bag파일 이름>
ex) $ rosbag info my_bag_record.bag
path: my_bag_record.bag
version: 2.0
duration: 1:03s (63s)
start: May 22 2022 19:31:40.79 (1653215500.79)
end: May 22 2022 19:32:43.80 (1653215563.80)
size: 3.2 GB
messages: 12945
compression: none [3692/3692 chunks]
types: dynamic_reconfigure/Config [958f16a05573709014982821e6822580]
dynamic_reconfigure/ConfigDescription [757ce9d44ba8ddd801bb30bc456f946f]
rosgraph_msgs/Log [acffd30cd6b6de30f120938c17c593fb]
sensor_msgs/CameraInfo [c9a58c1b0b154e0e6da7578cb991d214]
sensor_msgs/CompressedImage [8f7a12909da2c9d3332d540a0977563f]
sensor_msgs/Image [060021388200f6f0f447d0fcd9c64743]
theora_image_transport/Packet [33ac4e14a7cff32e7e0d65f18bb410f3]
topics: /image_view/output 1845 msgs : sensor_msgs/Image
/image_view/parameter_descriptions 1 msg : dynamic_reconfigure/ConfigDescription
/image_view/parameter_updates 1 msg : dynamic_reconfigure/Config
/rosout 1858 msgs : rosgraph_msgs/Log (3 connections)
/rosout_agg 1846 msgs : rosgraph_msgs/Log
/usb_cam/camera_info 1845 msgs : sensor_msgs/CameraInfo
/usb_cam/image_raw 1846 msgs : sensor_msgs/Image
(이하 생략)
단순 재생
$ rosbag play <bag파일 이름1> <bag파일 이름2> ...
ex) rosbag play my_bag_record.bag
**루프 재생 (반복 재생)**❗가장 많이 사용함! (한 가지 파일 무한 반복 재생 -l
혹은 —loop
옵션 사용
$ rosbag play -l <bag파일 이름>
배속 재생 (토픽 값을 배속을 지정해 재생하고 싶은 경우 -r 옵션 사용)
$ rosbag play -r <배속> <bag파일 이름>
ex) rosbag play -r 0.5 my_bag_record.bag
0.5 배속으로 재생