launch文件中使用rosbag record报错

本文探讨了在使用Rosbag记录数据时遇到的错误,焦点在于在launch文件中使用用户目录(~)导致权限问题。解决方法是在tmp目录下创建子目录并指定绝对路径。同时,文章还提及其他编程环境中的类似问题及解决策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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),解决方法如上。

### 在 Ubuntu 20.04 上通过 ROS Kalibr 录制 Bag 文件 为了在 Ubuntu 20.04 和 ROS Noetic 中使用 Kalibr 工具包录制 bag 文件,可以遵循以下方法。这涉及设置工作区、安装依赖项以及执行特定的 ROS 命令来捕获传感器数据。 #### 设置 Kalibr 环境 首先,在创建的工作区内初始化并克隆 Kalibr 源码: ```bash mkdir -p kalibr_ws/src && cd kalibr_ws/ source /opt/ros/noetic/setup.bsh cd src/ catkin_init_workspace git clone https://github.com/ethz-asl/kalibr.git ``` 完成上述操作后,返回到 `kalibr_ws` 并构建项目: ```bash cd .. catkin_make -DCMAKE_BUILD_TYPE=Release -j4 ``` 在此过程中可能需要额外安装一些库,例如 `libv4l-dev`[^2]。 #### 安装必要的依赖项 确保已安装所有必需的软件包以支持摄像头驱动程序和其他硬件接口。可以通过以下命令安装这些依赖项: ```bash sudo apt-get update sudo apt-get install ros-noetic-image-transport \ ros-noetic-cv-bridge \ ros-noetic-camera-info-manager \ libv4l-dev ``` #### 配置摄像头节点发布话题 Kalibr 的校准过程通常依赖于来自摄像头的数据流。因此,需配置摄像头节点以便它能够正确地发布图像消息至 `/camera/image_raw` 或其他指定的话题名称下。如果尚未准备好合适的 launch 文件,则可以从官方文档或其他资源获取模板,并调整参数匹配实际使用的设备型号与分辨率需求。 假设已经有一个正常工作的摄像头驱动器正在广播图像帧序列给定主题名(比如 `/cam0/image_raw`),那么就可以继续下一步骤了——启动 rosbag 记录工具。 #### 启动 Rosbag 进行录制 打开一个新的终端窗口进入先前建立好的 catkin workspace 目录结构里去加载环境变量设定脚本后再输入如下所示形式化的指令来进行实时采集存储动作: ```bash roscore & roslaunch your_camera_package camera.launch # 替换为您的具体相机启动文件路径 sleep 5s # 给予时间让系统稳定下来再开始记录 rosbag record -O calibration_data.bag /cam0/image_raw /cam0/camera_info ... ``` 这里 `-O` 参数后面紧跟的是输出文件的名字;而后面的各个斜杠开头的部分代表您希望保存下来的那些不同种类的消息类型及其对应的主题地址列表。请依据实际情况增删修改它们的内容组合情况。 当完成了足够的运动轨迹覆盖之后按 Ctrl+C 键停止进程即可结束整个录像环节的操作流程啦! --- ### 注意事项 - 如果遇到任何错误提示,请仔细阅读报错信息尝试定位问题所在位置或者查阅相关资料寻求解决方案。 - 对于某些特殊类型的摄像装置来说,也许还需要单独编写自定义版本的驱动插件才能够满足兼容性的要求哦~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值