IT 개발/ROS

rosbag 파일에서 pcd와 image 추출하기(2)

KimDol2 2023. 11. 23. 14:50

 

 

이전 글에서 rosbag 파일에 저장된 토픽중 image 메세지 토픽을 저장하는 방법에 대해 설명했다.

그런데 그 방법의 단점은 바로 따로 rosbag play를 해줘야 한다는 것이었는데, 그렇게 할 경우 rosbag play 속도를 image_view extract_images 명령이 따라가지 못해 프레임 드랍이 생긴다는 것이다. :(

 

내가 원하는건 하나도 빠짐없이 전부 저장하는 것인데....

 

그래서 찾아보니 별도의 launch 파일을 만들어서 roslaunch 명령으로 실행하는 방법이 있다. :)

 

먼저 아래와 같이 save_image.launch 파일을 만들자.

<launch>

  <arg name="bag_path" default="/home/kbk/tmp/bagfiles/"/>
  <arg name="bag_file" default="zed_lidar"/>

  <arg name="image_topic" default="/zed/zed_node/left/image_rect_color"/>

  <node pkg="rosbag" type="play" name="rosbag" required="true" args="--clock $(arg bag_path)$(arg bag_file).bag"/>
  
  <node name="extract" pkg="image_view" type="extract_images" respawn="false" required="true" output="screen" cwd="ROS_HOME">
    <remap from="image" to="$(arg image_topic)"/>
    <param name="sec_per_frame" type="double" value="0.01" />
  </node>

</launch>

 

이제 save_image.launch 파일을 roslaunch 명령어를 사용해 실행시키자.

 

roslaunch save_image.launch bag_file:=zed_lidar_data_1

 

이렇게 실행하면 /home/kbk/tmp/bagfiles/zed_lidar_data_1.bag 파일의 /zed/zed_node/left/image_rect_color 메세지 토픽이 ~/.ros 경로에 frame####.jpg 파일명으로 저장된다. 

 

아래와 같이 .ros 경로에 저장된 파일을 홈 디렉토리의 frames 폴더로 이동시킨다.

 

$ mv ~/.ros/frame*.jpg ~/frames

 

 

 

반응형