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)出现以下报错信息:
launch文件中使用rosbag record报错
经过尝试后发现,不含“~”的相对路径或绝对路径以及在命令行传参时使用含环境变量${HOME},均可正常保存文件。

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

上一篇:树莓派Ubuntu20.04安装ros系统


下一篇:!!!如何在ROS中使用自己的功能包,如何修改ROS的功能包