使用rosbag录制包只有color信息没有imu信息问题解决

跟着大佬的教程做d435i的标定,原博客链接:RealSense-D435i相机与IMU之间的外参标定-使用kalibr工具箱(完整版)_realsense d435i rgb相机到imu的参数-CSDN博客

过程遇到了几个问题 想着记录下来 方便以后自己重做的时候避坑

文章一 二部分的完成都没有什么问题,作者写的很详细,但是后面第三部分自己开始弄的时候遇到了如下这个情况

1. 使用如下命令在kalibr_ws文件夹里录制包

rosbag record -O d435i /color /imu

2. 录制包后按ctrl+c暂停录制,继续在这个终端里运行如下标定代码(记得先进入kalibr_ws文件夹,并运行source ./devel/setup.bash)

rosrun kalibr kalibr_calibrate_imu_camera --target checkerboard.yaml --cam camchain.yaml --imu imu.yaml --bag d435i.bag --bag-from-to 5 45 --show-extraction

3. 发现报错说RuntimeError: Could not find topic /imu in d435i.bag. 并使用rostopic info d435i.bag查看信息,发现确实topics里没有imu信息只有color信息

4. 使用rostopic list查看发现主题为camera/imu 而不是imu

5. 于是更改录制包的命令如下

rosbag record -O d435i_with_imu.bag /color /camera/imu

6. 完成录制后再用rosbag info d435i_with_imu.bag查看信息就可以发现有camera/imu主题了

7. 然后相应的,肯定也要修改标定命令,先是改为如下:

rosrun kalibr kalibr_calibrate_imu_camera --target checkerboard.yaml --cam camchain.yaml --imu imu.yaml --bag d435i_with_imu.bag --bag-from-to 5 45 --show-extraction --imu-topics /camera/imu

出现报错:[ERROR] [1716182835.034524]: unrecognized arguments: --imu-topics /camera/imu

也就是说kalibr_calibrate_imu_camera工具不接受 --imu-topics这个参数,所以要修改.bag文件中的主题名称。但尝试直接通过命令行参数更改imu主题也行不通,那么就只能通过编辑.bag文件来将imu主题名从/camera/imu改为/imu,可通过以下步骤实现:

(1)创建一个python脚本

打开一个文本编辑器,创建一个新的python文件,叫"change_topic_name.py",内容如下:

import rosbag
import sys

if len(sys.argv) != 3:
    print("Usage: python change_topic_name.py input.bag output.bag")
    sys.exit(1)

input_bag_path = sys.argv[1]
output_bag_path = sys.argv[2]

with rosbag.Bag(output_bag_path, 'w') as outbag:
    for topic, msg, t in rosbag.Bag(input_bag_path).read_messages():
        if topic == "/camera/imu":
            topic = "/imu"  # 修改主题名
        outbag.write(topic, msg, t)

我直接把这个文件放在了kalibr_ws文件夹里

(2)运行这个脚本

python3 change_topic_name.py d435i_with_imu.bag d435i_with_correct_imu.bag

注意这个python3是因为我的linux装的是这个版本,可自行更改

(3)标定新的.bag文件

rosrun kalibr kalibr_calibrate_imu_camera --target checkboard.yaml --cam camchain.yaml --imu imu.yaml --bag d435i_with_correct_imu.bag --bag-from-to 5 45 --show-extraction

这里注意,是checkboard.yaml,大佬文章里这一句命令写成了checkerboard(但前面让我们写的是checkboard.yaml),会导致报错说无法读取,注意一下

最后就可以成功得到标定数据了!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值