当前位置: 首页 > news >正文

利用D435i相机进行SLAM实现建图的关键环节-----Kalibr标定工具以及常见的问题调试

在SLAM系统中,相机标定是获取准确的空间信息和三维重建的关键步骤。对于Intel RealSense D435i这类双目相机,正确的内参和外参不仅能提高位姿估计精度,还能显著改善重建效果。本文将详细介绍如何使用Kalibr对D435i进行双目标定,并涵盖常见的问题与调试技巧。

 1. 环境准备

关于kalibr的工具安装网上有许多教程,这里我推荐一个个人认为较为完善的博客,大家可以参考进行下载,编译安装。链接:D435i标定摄像头和IMU笔记二-2(RGB+双目多摄像头标定篇)_d435i 双目+rgb标定-CSDN博客

 2. 启动相机并准备话题

首先,启动RealSense D435i相机并配置左右红外摄像头(如何开启D435i相机的双目模式,可以参考我往期的博客,有详细的配置介绍):

roslaunch realsense2_camera rs_stere_camera.launch

可以使用以下命令动态调整相机参数,例如曝光时间和增益(这一步可以省略,如果默认关闭状态):

rosrun rqt_reconfigure rqt_reconfigure

为了减少数据量并提高标定效率,可以使用topic_tools进行消息节流(分别打开窗口运行,也可以写成一行):

rosrun topic_tools throttle messages /camera/infra1/image_rect_raw 4.0 /infra_left
rosrun topic_tools throttle messages /camera/infra2/image_rect_raw 4.0 /infra_right

这会将红外相机的数据频率限制为4Hz,减少系统负载。

 参考如下:

3. 数据录制

接下来,开始录制用于标定的数据包。确保已经在ROS工作空间的根目录下,且已经执行了source devel/setup.bash

使用以下命令录制包含左右相机图像的话题:

rosbag record -o stere_calibr.bag /infra_left /infra_right

录制要点:

  • 丰富视角:从多个角度和距离采集数据。

  • 充分旋转和平移:确保相机有充分的运动轨迹。

  • 避免运动模糊:尽量减少快速移动,确保图像清晰。

  • 光照均匀:避免强光和阴影干扰。

 

4. Kalibr标定

准备好标定板(例如AprilGrid)并确保相机数据已经正确录制后,可以开始进行Kalibr标定。

首先,确保标定板参数文件aprilgrid.yaml已正确配置,例如:

target_type: 'aprilgrid'
tagCols: 6
tagRows: 6
tagSize: 0.08  # 标签的实际边长 (单位:米)
tagSpacing: 0.3  # 标签间的间隔比例 (tagSpacing / tagSize)

然后运行Kalibr标定命令:

rosrun kalibr kalibr_calibrate_cameras \--target aprilgrid.yaml \--bag stere_calibr.bag \--models pinhole-equi pinhole-equi \--topics /infra_left /infra_right \--show-extraction \后面回解读参数的作用--approx-sync 0.04

关键参数解释:

  • --target:标定板参数文件。

  • --bag:Bag文件路径。

  • --models:相机模型类型,这里选择了pinhole-equi以适应D435i广角镜头。

  • --topics:左右相机的ROS话题。

  • --show-extraction:在标定过程中显示角点提取结果。

  • --approx-sync:时间戳近似同步窗口(40ms),避免严格对齐失败。

 生成的标定文件:

标定txt文件:
 

Calibration results 
====================
Camera-system parameters:
cam0 (/infra_left):type: <class 'aslam_cv.libaslam_cv_python.EquidistantDistortedPinholeCameraGeometry'>distortion: [ 0.3135947   0.32455235 -0.52654756  0.58506327] +- [0.02050455 0.19255653 0.70592142 0.873231  ]projection: [661.4974262  662.56148611 635.82997386 361.51483888] +- [0.16035361 0.4681932  0.98190918 2.22391354]reprojection error: [0.000001, -0.000008] +- [0.266003, 0.297355]cam1 (/infra_right):type: <class 'aslam_cv.libaslam_cv_python.EquidistantDistortedPinholeCameraGeometry'>distortion: [ 0.34287689  0.19791578 -0.48234189  0.93543806] +- [0.01205634 0.07763847 0.16784572 0.21190066]projection: [629.89882172 631.59908506 635.52002364 353.59436006] +- [0.12344688 0.36096015 0.83769264 1.90513144]reprojection error: [-0.000000, 0.000003] +- [0.229563, 0.258023]baseline T_1_0:q: [0.00150385 0.00153018 0.00063099 0.9999975 ] +- [0.00267581 0.00270488 0.00063291]t: [-0.05021712  0.0024024  -0.01461257] +- [0.00105519 0.00173179 0.00038129]Target configuration
====================Type: aprilgridTags: Rows: 6Cols: 6Size: 0.03 [m]Spacing 0.009 [m]

标定的yaml文件:

cam0:cam_overlaps: [1]camera_model: pinholedistortion_coeffs: [0.3135947033969634, 0.3245523536725653, -0.5265475626529273, 0.585063272337577]distortion_model: equidistantintrinsics: [661.4974261968929, 662.5614861133771, 635.8299738560407, 361.5148388773697]resolution: [1280, 720]rostopic: /infra_left
cam1:T_cn_cnm1:- [0.9999945208092658, 0.0012665781221903227, -0.003058452436623379, -0.05021711623497154]- [-0.0012573734817375377, 0.999994680572997, 0.0030096241686901823, 0.0024023984784722146]- [0.003062248091536979, -0.003005762061396358, 0.9999907939731525, -0.014612567870044153]- [0.0, 0.0, 0.0, 1.0]cam_overlaps: [0]camera_model: pinholedistortion_coeffs: [0.34287689294735485, 0.19791578378741437, -0.4823418924085219, 0.9354380622997973]distortion_model: equidistantintrinsics: [629.8988217210396, 631.5990850564253, 635.5200236409538, 353.59436006397107]resolution: [1280, 720]rostopic: /infra_right

 标定的评估pdf文件:

 

 

5. 常见问题与调试

Cameras are not connected through mutual observations, please check the dataset. Maybe adjust the approx. sync. tolerance.
Traceback (most recent call last):File "/home/nan/dev/kalibr_ws/devel/bin/kalibr_calibrate_cameras", line 15, in <module>exec(compile(fh.read(), python_script, 'exec'), context)File "/home/nan/dev/kalibr_ws/src/kalibr/aslam_offline_calibration/kalibr/python/kalibr_calibrate_cameras", line 444, in <module>main()File "/home/nan/dev/kalibr_ws/src/kalibr/aslam_offline_calibration/kalibr/python/kalibr_calibrate_cameras", line 201, in maingraph.plotGraph()File "/home/nan/dev/kalibr_ws/src/kalibr/aslam_offline_calibration/kalibr/python/kalibr_camera_calibration/MulticamGraph.py", line 308, in plotGraphedge_label=self.G.es["weight"],
KeyError: 'Attribute does not exist'
  • 原因:时间戳不同步导致图构建失败。

  • 解决方法:使用--approx-sync 0.04放宽时间对齐窗口。

6.总结

本文介绍了 Intel RealSense D435i 双目相机的标定流程,包括相机启动、数据录制和 Kalibr 工具的使用方法。重点涵盖了标定板配置、时间同步问题解决以及重投影误差优化等关键步骤,并提供了常见问题的调试技巧,如 时间戳不同步角点检测失败。通过合理的数据采集和参数设置,可以显著提高标定精度,为后续的 SLAM 任务打下坚实基础。

相关文章:

  • python实现usb热插拔检测(linux)
  • Webpack中Compiler详解以及自定义loader和plugin详解
  • 基于注意力机制与iRMB模块的YOLOv11改进模型—高效轻量目标检测新范式
  • 从零构建高性能桌面应用:GPUI Component全解析与实战指南
  • MYSQL 全量,增量备份与恢复
  • Hadoop的组成,HDFS架构,YARN架构概述
  • 5.11 - 5.12 JDBC+Mybatis+StringBoot项目配置文件
  • 跨时钟域(CDC,clock domain crossing)信号处理
  • 【课题推荐】基于改进遗传算法的公交车调度排班优化研究与实现方案
  • SPL做量化--MACD(指数平滑异同移动平均线)
  • 产品设计基石--用户体验要素--实战4
  • vue3配置element-ui的使用
  • 开启WSL的镜像网络模式
  • 从攻击者角度来看Go1.24的路径遍历攻击防御
  • IEEE出版|2025年算法、软件与网络安全国际学术会议(ASNS2025)
  • 【愚公系列】《Manus极简入门》034-跨文化交流顾问:“文化桥梁使者”
  • 制造业IT管理方法论:柔性变更与数据治理的融合实践
  • 星海智算云平台部署GPT-SoVITS模型教程
  • 电脑端实用软件合集:土拨鼠+Rufus+实时网速监控工具
  • OpenCV进阶操作:光流估计
  • 韩国大选连发“五月惊奇”:在野党刚“摆脱”官司,执政党又生“内讧”
  • 中国工程院院士、国医大师石学敏逝世
  • 武汉旅游体育集团有限公司原党委书记、董事长董志向被查
  • 看展览|2025影像上海艺博会:市场与当代媒介中的摄影
  • 新疆维吾尔自治区乌鲁木齐市米东区政协原副主席朱文智被查
  • 美众议院通过法案将“墨西哥湾”更名为“美国湾”