资讯动态

Intel RealSense D435i 标定实战:从工具安装到VINS配置全流程解析

发布时间:2026/8/20 5:53:20 来源:尧图企业网站定制
1. 准备工作认识D435i与标定原理第一次拿到Intel RealSense D435i时我盯着这个火柴盒大小的设备看了半天——它凭什么能实现三维感知拆开包装后发现这玩意儿居然集成了双目红外相机、RGB彩色相机和IMU惯性测量单元。但问题来了这些传感器出厂时虽然做了基础校准但想要达到SLAM算法要求的精度必须重新标定。举个生活化的例子就像买了一把新吉他出厂时弦距和音准都是大概齐真要演奏就得自己调音。D435i的标定也是同理我们需要测量三个关键参数内参相当于乐器的音色特性包括相机焦距、畸变系数等固有属性外参类似多根琴弦的相对位置描述相机与IMU之间的空间关系IMU噪声参数好比演奏时的环境干扰需要量化传感器的随机误差实测发现未经标定的D435i直接跑VINS-Fusion轨迹漂移能达到每小时几十米。而经过完整标定后相同场景下漂移可以控制在米级以内。下面我就手把手带大家走完这个调音全过程。2. 工具安装与环境配置2.1 基础驱动安装首先确保你的Ubuntu系统版本在18.04以上推荐20.04然后按这个顺序安装# 添加RealSense官方源 sudo apt-key adv --keyserver keys.gnupg.net --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE || sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE sudo add-apt-repository deb https://librealsense.intel.com/Debian/apt-repo $(lsb_release -cs) main -u # 安装核心组件 sudo apt-get install librealsense2-dkms librealsense2-utils sudo apt-get install librealsense2-dev librealsense2-dbg安装完成后插上设备运行测试realsense-viewer你应该能看到彩色图像、深度图和IMU数据流。如果遇到权限问题记得把当前用户加入video组sudo usermod -a -G video $USER2.2 ROS驱动安装建议使用ROS Noetic版本对应Ubuntu 20.04安装命令如下sudo apt-get install ros-noetic-realsense2-camera sudo apt-get install ros-noetic-realsense2-description启动ROS节点测试roslaunch realsense2_camera rs_camera.launch rostopic list # 应该能看到/camera/color/image_raw等话题2.3 标定工具安装这里需要两个核心工具imu_utils用于IMU内参标定kalibr用于相机和联合标定安装imu_utils时有个坑要注意——必须先装code_utils# 先安装依赖 sudo apt-get install libdw-dev # 按顺序编译 mkdir -p ~/calibration_ws/src cd ~/calibration_ws/src git clone https://github.com/gaowenliang/code_utils.git cd .. catkin_make # 这里可能会报错需要先注释掉code_utils中的#include backward.hpp # 再编译imu_utils cd src git clone https://github.com/gaowenliang/imu_utils.git cd .. catkin_makekalibr的安装更复杂些推荐用docker方式# 安装docker sudo apt-get install docker.io sudo usermod -aG docker $USER newgrp docker # 拉取kalibr镜像 docker pull stereolabs/kalibr # 测试运行 docker run -it stereolabs/kalibr3. IMU内参标定实战3.1 数据采集准备先修改ROS启动文件确保IMU数据正确同步。创建rs_imu_calibration.launch文件launch include file$(find realsense2_camera)/launch/rs_camera.launch arg nameunite_imu_method valuelinear_interpolation/ arg nameenable_sync valuetrue/ /include /launch启动节点并检查数据roslaunch realsense2_camera rs_imu_calibration.launch rostopic hz /camera/imu # 应该看到200Hz左右的输出3.2 长时间数据录制IMU标定需要静止状态下至少2小时的数据是的就是这么久rosbag record -O imu_calib.bag /camera/imu我通常晚上开始录制第二天早上处理。如果时间不够可以用200倍速回放rosbag play -r 200 imu_calib.bag3.3 执行标定程序创建标定配置文件d435i_imu.launchlaunch node pkgimu_utils typeimu_an nameimu_an outputscreen param nameimu_topic value/camera/imu/ param nameimu_name valued435i/ param namedata_save_path value$(find imu_utils)/data// param namemax_time_min value120/ param namemax_cluster value200/ /node /launch启动标定roslaunch imu_utils d435i_imu.launch rosbag play -r 200 imu_calib.bag3.4 结果解读标定完成后会在~/calibration_ws/src/imu_utils/data/生成d435i_imu_param.yaml关键参数包括gyr_n: 1.23e-03 # 陀螺仪白噪声 gyr_w: 2.34e-05 # 陀螺仪随机游走 acc_n: 3.45e-02 # 加速度计白噪声 acc_w: 6.78e-04 # 加速度计随机游走这些值后续会填入VINS配置。实测发现D435i的IMU噪声参数比手机IMU高1-2个数量级这也是为什么必须标定的原因。4. 相机标定全流程4.1 标定板准备kalibr支持两种标定板AprilTag网格推荐6x6布局标签大小2cm棋盘格推荐8x11方格大小3cm我用A4纸打印AprilTag标定板生成命令kalibr_create_target_pdf --type apriltag --nx 6 --ny 6 --tsize 0.02 --tspace 0.3对应的yaml配置target_type: aprilgrid tagCols: 6 tagRows: 6 tagSize: 0.02 tagSpacing: 0.34.2 多相机数据采集先关闭红外发射器避免干扰realsense-viewer # 在设置中关闭Emitter Enabled选项然后启动相机节点roslaunch realsense2_camera rs_camera.launch由于kalibr处理高频图像会崩溃需要限流rosrun topic_tools throttle messages /camera/color/image_raw 20 /color rosrun topic_tools throttle messages /camera/infra1/image_rect_raw 20 /infra_left rosrun topic_tools throttle messages /camera/infra2/image_rect_raw 20 /infra_right录制数据时注意缓慢移动标定板约0.5米/秒覆盖整个视野范围保持标定板在所有相机中可见rosbag record -O multicam.bag /color /infra_left /infra_right4.3 执行标定准备相机链配置文件camchain.yamlcam0: camera_model: pinhole distortion_coeffs: [0, 0, 0, 0] distortion_model: equidistant intrinsics: [600, 600, 320, 240] resolution: [640, 480] rostopic: /infra_left cam1: camera_model: pinhole distortion_coeffs: [0, 0, 0, 0] distortion_model: equidistant intrinsics: [600, 600, 320, 240] resolution: [640, 480] rostopic: /infra_right运行标定kalibr_calibrate_cameras --target aprilgrid.yaml --bag multicam.bag --models pinhole-equi pinhole-equi --topics /infra_left /infra_right4.4 结果验证标定完成后会生成report-cam.pdf重点关注重投影误差应0.2像素各相机内参一致性双目基线距离D435i标称约5cm典型标定结果示例cam0: distortion_coeffs: [0.12, -0.23, 1.45, -2.67] intrinsics: [386.71, 387.18, 320.56, 239.82] cam1: distortion_coeffs: [0.10, -0.21, 1.38, -2.71] intrinsics: [386.95, 387.35, 321.07, 240.44]5. 相机-IMU联合标定5.1 数据采集技巧联合标定需要剧烈运动设备以激励IMU先静止5秒让IMU初始化依次进行绕X/Y/Z轴旋转各5秒前后/左右/上下平移各5秒8字形运动20秒全程保持标定板在视野内限流设置IMU 200Hz图像20Hzrosrun topic_tools throttle messages /camera/imu 200 /imu rosrun topic_tools throttle messages /camera/color/image_raw 20 /color rosbag record -O imu_cam.bag /imu /color5.2 配置文件准备IMU参数文件imu.yaml用之前标定结果rostopic: /imu update_rate: 200.0 accelerometer_noise_density: 2.38e-02 accelerometer_random_walk: 5.92e-04 gyroscope_noise_density: 2.17e-03 gyroscope_random_walk: 1.78e-05相机参数文件cam.yaml用之前标定结果cam0: camera_model: pinhole distortion_coeffs: [0.12, -0.23, 1.45, -2.67] distortion_model: equidistant intrinsics: [386.71, 387.18, 320.56, 239.82] resolution: [640, 480] rostopic: /color5.3 执行联合标定kalibr_calibrate_imu_camera --target aprilgrid.yaml --cam cam.yaml --imu imu.yaml --bag imu_cam.bag关键参数说明--show-extraction实时显示特征点--bag-from-to 10 100只使用10-100秒数据--max-iter 15限制优化迭代次数5.4 结果分析输出文件report-imucam.pdf中包含时空对齐误差应0.05相机到IMU的变换矩阵重力向量方向典型外参结果T_ic: rotation: [0.999, -0.001, 0.008, 0.001, 0.999, 0.011, -0.008, -0.011, 0.999] translation: [0.027, 0.008, -0.013] timeshift: -0.025这个变换矩阵表示相机坐标系原点在IMU坐标系中X轴右侧2.7cmY轴上方0.8cmZ轴前方1.3cm处。6. VINS-Fusion配置实战6.1 配置文件解析将标定结果转换为VINS格式的realsense_config.yaml# 相机内参 image_width: 640 image_height: 480 distortion_parameters: k1: 0.1036 k2: -0.1823 p1: 0.0023 p2: 0.0037 projection_parameters: fx: 601.226 fy: 601.343 cx: 332.172 cy: 240.510 # IMU-相机外参 extrinsicRotation: !!opencv-matrix rows: 3 cols: 3 dt: d data: [0.999, -0.003, -0.005, 0.003, 0.999, -0.012, 0.005, 0.012, 0.999] extrinsicTranslation: !!opencv-matrix rows: 3 cols: 1 dt: d data: [-0.013, -0.001, 0.015] # IMU参数 acc_n: 0.0238 gyr_n: 0.0022 acc_w: 0.0006 gyr_w: 0.000026.2 关键参数调优建议特征点参数max_cnt: 150 # 特征点数量室内可减少到100 min_dist: 20 # 特征点最小间距 freq: 10 # 结果发布频率优化器参数max_solver_time: 0.04 # 单次优化最大耗时(ms) max_num_iterations: 8 # 迭代次数 keyframe_parallax: 10 # 关键帧选择阈值(像素)时间补偿estimate_td: 1 # 启用时间标定 td: -0.025 # 初始时间偏移6.3 实测效果对比使用标定前后的参数运行VINS-Mono在相同场景下的轨迹误差对比指标未标定标定后10m轨迹误差2.3m0.8m高度漂移1.5m0.3m回环成功率62%89%特别提醒如果使用D435i的深度信息记得在VINS配置中关闭深度优化因为深度相机和彩色相机的外参也需要单独标定。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价