首页 > 技术文章 > rosbag 那些事

lovebay 2019-07-16 10:40 原文

1、.bag文件转.txt
将file_name.bag文件中topic_name话题的消息转换到Txt_name.txt文件中:
rostopic echo -b file_name.bag -p /topic_name > Txt_name.txt

2、rosbag remap
 rosbag play ros.bag  /image_raw:=/camera/image_raw

3、使用rxplot画时间趋势曲线
在ROS系统中,标量数据可以根据消息中提供的时间戳作为时间序列绘制图形。
运行可以发布话题的节点后,可以通过rostopic list查看当前的发布的话题,现在,我们不再去使用rostopic echo <topic>,而是通过rxplot命令就能够看到随时间变化的值的曲线。
rqt_plot /topic/data //单个话题,单个数据
rqt_plot /topic/x:y:z //单个话题,向量数据
rqt_plot /topic/x /topic/y /topic/z
123
或是先打开GUI界面:
rosrun rqt_plot rqt_plot

4、运用ROS工具从bag文件中导出图像

1.首先到你的bag文件所在的文件夹下打开命令行运行以下命令获得bag中的文件信息:
rosbag info a.bag
其中a修改为自己的bag文件名字即可。还可看到topic名字。
2.调整到你需要存储图片的文件夹中,或者新建文件夹,执行以下命令,其中<>中为你的topic信息,将<>内的内容包括<>修改为想要转换的topic名字。
rosrun image_view extract_images _sec_per_frame:=0.05 image:=<IMAGE TOPIC IN BAGFILE>
3.新建一个终端,输入以下命令,打开ROS:
roscore
4.在存放bag文件夹的目录下新建一个终端,并输入以下命令,就可以在2中创建的终端中看到图像的转化进度了。
rosbag play -r 0.5  <BAG FILE>

 

5、从ROS bag文件中提取图像

创建launch文件,如下:
export.launch

    <launch>
    <node pkg="rosbag" type="play" name="rosbag" args="-d 2 $(find image_view)/test.bag"/>
    <node name="extract" pkg="image_view" type="extract_images" respawn="false" output="screen" cwd="ROS_HOME">
    <remap from="image" to="/camera/image_raw"/>
    </node>
    </launch>

将$(find image_view)/test.bag改为你自己的bag文件路径。
然后,运行launch文件。

    打开一个终端,运行
    roscore
     
    打开一个终端,cd到export.launch所在路径下,运行
    roslaunch export.launch

所提取的图片在~/.ros路径下,将其移到你的目标文件中,如:

    cd ~
    mkdir Example
    mv ~/.ros/*.jpg ~/Example

参考ROS wiki: How to export image and video data from a bag file,


 rosbag 命令

查看topic列表    
rostopic list

打印topic内容
rostopic echo /topic

将bag转为pcd
rosrun pcl_ros bag_to_pcd out.bag /velodyne_points ./pcd/

话题录制
录制所有发布出来的话题,此时默认将话题保存在一个以当时时间戳命名的文件夹中:
rosbag record -a

录制指定话题
rosbag record /topic1 /topic12 -o out.bag

话题回放
基本回放
rosbag play <your bagfile name>

等待一定时间之后发布bag文件中的内容
rosbag play <your bagfile name> -d <delay time>

按一定频率回放,-r选项用来设定消息发布速率,如下面命令则表示以3倍原始速率发布话题
rosbag play -r 3 <your bagfile name>

回放指定话题
rosbag play <your bagfile name> --topics <topics>

其他指令
显示bag文件中所包含话题的名称、类型和消息数量:
rosbag info <your bagfile name>

创建一个除了/tf消息的新包
rosbag filter file.bag file-no-tf.bag "topic != '/tf'"

查看topic发送接收图
rosrun rqt_graph rqt_graph

重映射topic信息(将out.bag中point_cloud转为velodyne_points)
rosbag play out.bag  /point_cloud:=/velodyne_points

将point_cloud转为laserscan

rosrun pointcloud_to_laserscan pointcloud_to_laserscan_node cloud_in:=/your_velodyne_points

查看bag中对应topic的frame_id
rostopic echo /topic | grep frame_id

查看tf树
rosrun rqt_tf_tree rqt_tf_tree

保存地图
rosrun map_server map_saver -f my_map

将cartographer生成的pbstream导出为ros标准地图
    首先新建offline_pbstream_to_rosmap.launch

<launch>
  <node name="cartographer_pbstream_to_ros_map" pkg="cartographer_ros"
      type="cartographer_pbstream_to_ros_map" args="
          -pbstream_filename $(arg pbstream_filename)
          -map_filestem $(arg map_filestem)
          -resolution $(arg resolution)"
      output="screen">
  </node>
</launch>

再输入如下命令 
roslaunch cartographer_ros offline_pbstream_to_rosmap.launch pbstream_filename:=/home/out.pbstream map_filestem:=/home/out resolution:=0.05

 

推荐阅读