C/C++教程

launch文件中使用rosbag record报错

本文主要是介绍launch文件中使用rosbag record报错,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Record with rosbag from launch file

问题:
将rosbag命令包含到launch文件中:

在使用launch文件直接启动记录的时候,记录包文件会默认创建在~/.ros路径下,除非使用-o(前缀)或-O(全名)给文件命名。
[ERROR] [1605844387.924232167]: Error writing: Error opening file: ~/catkin_ws/data/_2020-11-20-11-53-07.bag.active
[record_rosbag-4] process has died [pid 31430, exit code 1, cmd /opt/ros/kinetic/lib/rosbag/record /imu/data -o ~/catkin_ws/data/ __name:=record_rosbag __log:=/home/dm/.ros/log/e629ec62-2ae3-11eb-b257-983b8f0113e6/record_rosbag-4.log].
log file: /home/dm/.ros/log/e629ec62-2ae3-11eb-b257-983b8f0113e6/record_rosbag-4*.log

报错原因:

如果ROS是通过Debian包安装,那么任何包的源目录都将归root用户所有,并且对普通用户来说是只读的,所以普通用户的启动文件将无法工作(?)。

解决办法:

在根目录/tmp下使用普通用户创建子目录data,并将bag文件保存路径保存在该目录


问题进一步:
使用cartographer代码保存文件时,传入“~”表示用户目录(如/home/dm)出现以下报错信息:
在这里插入图片描述
经过尝试后发现,不含“~”的相对路径或绝对路径以及在命令行传参时使用含环境变量${HOME},均可正常保存文件。

因此,同理,rosbag record命令的真实报错原因也是由于采用了“~”表示用户目录(如/home/dm),解决方法如上。

这篇关于launch文件中使用rosbag record报错的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!