使用ros_readbagfile脚本提取感兴趣的话题
使用ros_readbagfile脚本轻松地提取感兴趣的话题
来源:这部分教程是根据本文件中首次发表的指引改编的,Python脚本来自:ros_readbag.py。
注意:您可以杀死任何正在运行的进程。比如说连roscore都不需要运行。
-
下载并安装`ros_readbag.py`:
# Download the file wget https://raw.githubusercontent.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles/master/useful_scripts/ros_readbagfile.py # Make it executable chmod +x ros_readbagfile.py # Ensure you have the ~/bin directory for personal binaries mkdir -p ~/bin # Move this executable script into that directory as `ros_readbagfile`, so that it will # be available as that command mv ros_readbagfile.py ~/bin/ros_readbagfile # Re-source your ~/.bashrc file to ensure ~/bin is in your PATH, so you can use this # new `ros_readbagfile` command you just installed . ~/.bashrc
-
通过rosbag info命令确定要从bag文件中读取的准确话题名,如上一篇文章的第一步所示。
-
然后使用ros_readbagfile,大体格式如下:
要阅读上一篇文章中显示的相同消息,请使用:ros_readbagfile <mybagfile.bag> [topic1] [topic2] [topic3] [...]
就是这样!你会看到它快速打印出所有70条信息。以下是终端输出的最后部分:time ros_readbagfile demo.bag /obs1/gps/fix /diagnostics_agg | tee topics.yaml
key: "Early diagnostic update count:" value: "0" - key: "Zero seen diagnostic update count:" value: "0" ======================================= topic: /obs1/gps/fix msg #: 30 timestamp (sec): 1490150297.770734310 - - - header: seq: 4028 stamp: secs: 1490150297 nsecs: 744347249 frame_id: "gps" status: status: 0 service: 1 latitude: 37.4007565466 longitude: -122.108159482 altitude: -6.35130467023 position_covariance: [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0] position_covariance_type: 0 ======================================= Total messages found = 70. DONE. real 0m2.897s user 0m2.457s sys 0m0.355s
现在用你喜欢的文本编辑器打开topics.yaml,看看它从bag文件中提取的所有消息。
请注意,尽管我给了这个文件一个“.yaml”扩展名,但并不代表所有部分都是正确的YAML格式。相反,尽管文件中存储的每条消息都是有效的YAML语法,但是消息之间的标题和行分隔符(例如=====)不是有效的。请记住这一点,避免试图将输出解析为YAML。如果你愿意,也可以很容易地修改ros_readbagfile这个Python脚本来删除这些非YAML特性。
为什么用ros_readbagfile而不是rostopic echo -b呢?
-
因为rostopic极其地慢! 举个例子,就算在高配计算机(4核8线程的奔腾i7和m.2固态硬盘)上运行这个命令,也需要11.5分钟才能读取一个18GB的bag文件!
time rostopic echo -b large_bag_file.bag /topic1
而用ros_readbagfile脚本,在相同计算机上只要花费1分钟37秒就能读取同样的话题和18GB的bag文件!因此ros_readbagfile比rostopic快了11.5/(1+37/60) = 大约7倍!
time ros_readbagfile large_bag_file.bag /topic1
-
因为rostopic一次只能读取单个话题,而ros_readbagfile可以同时读取任意多的话题!
ros_readbagfile <mybagfile.bag> [topic1] [topic2] [topic3] [...] [topic1000]
就酱。