正常来说,ros2 bag从ros1的rosbag升级过来,变规范了之后也变僵硬了,少了许多方便的服务。直接输出文本的服务没了,只有一种输出格式,db3。长这样,一个bag文件夹里面两个文件,db3和yaml。
一开始想看看有没有成熟的转文本工具,试了试鱼总(鱼香ROS)的ros2bag_convert,(https://github.com/fishros/ros2bag_convert.git),报错:
FileNotFoundError: [Errno 2] No such file or directory: 'bag_bigmama03060517_0.db/rosout.csv'
然后试了试疑似官方的ros2 bag convert,(https://github.com/ros2/rosbag2.git)
藏在很深的地方,
仔细一看,从包倒包,压包分包,压根就没想让你转格式,得,找半天最后还得靠自己。
打蛇七寸,擒贼擒王,饮水思源,你ros2 bag record是用来计数据的,数据哪里来,topic处来,
那我为啥非得从你bag一中间商那拿货,我直接上ros2 topic批发不香吗,而且人家ros2 topic echo有--csv选项,支持直接将消息以CSV格式输出。到这总体思路就清晰了,后面是琐碎步骤。
因为我本来是想bag一个机器人的关节运动过程的,bag已经有了所以偷懒不想再操作一遍机器人,于是直接一终端ros2 bag play,另一终端ros2 topic echo 了。
先启动机器人,
ros2 topic list 检查看到/joint_states有在,
那么在开头的bag文件夹里新开终端,输入
ros2 topic echo <你的topic名> --csv > <你的目标文本文件名>.csv,
新开另一终端
ros2 bag play <你的纪录文件名>.db3
先在echo的那个终端enter,再play。
安静等他跑完。
Play那里跑完会自己退出,echo 那得自己手动Ctrl+C。
回去文件夹里看看,多了个csv,这个复制到Windows里面自动识别为Excel表格。
想要变txt的话,右键用text editor 打开,
再新建一个文件,把csv内容全选复制过去,
保存的时候文件名以txt为后缀,
拿到Windows里面发给师兄,完事!!!