Linux使用rostopic echo将rosbag文件转换成csv或txt文件以及sh脚本批量化操作

文章目录

  • 1 csv是什么格式,怎么打开
  • 2 用rosbag echo命令转换格式
    • 2.1 用rosbag命令查看bag信息
    • 2.2 用rqt_bag命令打开rosbag
    • 2.3 用rostopic echo 命令转换格式
    • 2.4 写sh脚本批量化操作
      • 2.4.1 写一个sh脚本
      • 2.4.2 chmod 777赋予可执行权限

1 csv是什么格式,怎么打开

csv本质上是一种逗号分隔符语言,栏目和每一行的值都用逗号分割开来,如图:

Linux使用rostopic echo将rosbag文件转换成csv或txt文件以及sh脚本批量化操作_第1张图片

和Excel共同的特征为:

  • 都能被Excel表格软件打开,例如Libre office,WPS office等
  • 都是有行和列的表格数据
  • 都可以在Excel软件中进行函数操作(或在MATLAB和Python中)

csv文件在Excel中打开形式如图:

Linux使用rostopic echo将rosbag文件转换成csv或txt文件以及sh脚本批量化操作_第2张图片

有时候topic里面的东西一行有很多内容,放在一起非常杂乱,可以在弹出的Text Import选项卡中,自定义分隔符Separator Options中勾选Other,添加分隔符

Linux使用rostopic echo将rosbag文件转换成csv或txt文件以及sh脚本批量化操作_第3张图片

Excel一般能处理256*256=65536行,超过这些行就只能用MATLAB或者Python等其他工具打开了


2 用rosbag echo命令转换格式

2.1 用rosbag命令查看bag信息

rosbag数据查看回放保存等基本操作

# 查看.bag中包含的信息 : 
rosbag info
# 回放.bag中包含的信息: 
rosbag play
# 以某一频率发布消息 : 
rosbag play -r 2				#可以理解为倍速播放
# 从某一时间节点开始发布消息 : 
rosbag play -s 2	 	 		#从特定的bagtime开始播放
# 记录所有topic信息: 
rosbag record -a
# 记录部分信息 : 
rosbag record -o subset /turtle1/cmd_vel /turtle1/pose # 生成subset.bag的文件,记录的是 /turtle1/cmd_vel和/turtle1/pose两个信息

这里,主要用到的是rosbag info命令,可以查看到rostopic的结构信息。

使用方法:

$ rosbag info bag_name.bag

2.2 用rqt_bag命令打开rosbag

使用方法:

$ rqt_bag bag_name.bag

在弹出的Bag窗口中可以查看topic,并且绘制图像,使用方法:

在左侧的目录树中右击topic/sub_topic,弹出菜单中选择view-plot,勾选相应的topic查看。

小结:

rosbag info 和rqt_bag 两个命令都能查看一个bag的信息,区别为

  • rosbag info 是在命令行下查看bag信息,只能看到话题信息和头文件信息,不能看到里面的内容
  • rqt_bag 命令是在可视化窗口中查看bag信息,可以看到所有的数据,并且可以绘图查看
  • rosbag info 的有点是执行速度特别快,可以快速查看信息,rqt_bag 优点是可视化信息丰富

2.3 用rostopic echo 命令转换格式

提取bag文件中的数据并保存为csv格式,提取topic的标准格式为

rostopic echo -b <BAGFILE> -p <TOPIC> > <output>.csv 
# 是bag文件,为数据所在的topic

rostopic echo命令一次只能提取一个topic,如果想提取一个topic目录中的若干个文件,也可以将TOPIC中的路径改为上一层目录,生成一个yaml的格式化文本

2.4 写sh脚本批量化操作

2.4.1 写一个sh脚本

新建一个bash脚本文件,命名为bag2csv.sh,然后添加:

# save into .csv files
rostopic echo -b rosbag.bag -p /topic/sub_topic1 > topic1.csv
rostopic echo -b rosbag.bag -p /topic/sub_topic2 > topic2.csv
rostopic echo -b rosbag.bag -p /topic/sub_topic3 > topic3.csv

或者转换成txt格式,新建一个bash脚本文件,命名为bag2txt.sh,添加:

# save into .txt files
rostopic echo -b rosbag.bag -p /topic/sub_topic1 > topic1.txt
rostopic echo -b rosbag.bag -p /topic/sub_topic2 > topic2.txt
rostopic echo -b rosbag.bag -p /topic/sub_topic3 > topic3.txt

2.4.2 chmod 777赋予可执行权限

在终端中给bag2csv.sh赋予可执行权限,然后执行脚本

Linux的shell编程参考:linux中的sh脚本语法

$ chmod 777 bag2csv.sh
$ ./bag2csv.sh 

最终得到如下3个文件:

1. topic1.csv
2. topic2.csv
3. topic3.csv

你可能感兴趣的:(ROS,Linux)