[相机标定]RealSense D435i相机标定

为了获得相机的内参,以及D435i各传感器坐标的外参,利用intel自带的Dynamic Calibrator进行标定。

Kalibr标定d435i内参、与IMU外参

1.标定内参

录制数据集:

rosrun topic_tools throttle messages /camera/color/image_raw 4.0 /color

利用throttle工具降低录制的RGB图像频率,降至4HZ,新发布的topic名字是/color

录制时需要准备标定板,这里建议TB直接买人家做好的,省去自己打印的不好。Kalibr支持tag和chessboard,博主这里借用了同学的棋盘格标定板,按照Kalibr的提示修改yaml文件,这里采用的标定板实际是9*12的,但是注意配置文件中是内角点:

target_type: 'checkerboard' #gridtype
targetCols: 8               #number of internal chessboard corners
targetRows: 11               #number of internal chessboard corners
rowSpacingMeters: 0.025      #size of one chessboard square [m]
colSpacingMeters: 0.025      #size of one chessboard square [m]

录制好数据集就可以开始进行标定了:

kalibr_calibrate_cameras --target ~/dev/kalibr_ws/src/kalibr/data/checkerboard.yaml --bag ~/dev/kalibr_ws/src/kalibr/data/kalibr_color.bag --models pinhole-equi --topics /color

这是官网的例子,修改为自己的具体对应的文件就行,我这里是直接输入的绝对路径。

*问题:

这里运行时卡在提取角点上 

然后在github的issue里到了答案:

在上述命令后加入--show-extraction

这样就能够运行了,参考链接

2.标定与IMU的外参

同样录制数据集,降低图像数据到20HZ,IMU数据至200HZ。

这里需要不同的配置文件,camchain.yaml和imu.yaml

camchain.yaml:

cam0:
  camera_model: pinhole
  intrinsics: [632.9640658678117, 638.2668942402212, 339.9807921782614, 243.68020465500277]
  distortion_model: equidistant
  distortion_coeffs: [0.366041713382057, 1.1433178097591097, -3.008125411486294, -3.1186836086733227]
  T_cam_imu:
  - [0.01779318, 0.99967549,-0.01822936, 0.07008565]
  - [-0.9998017, 0.01795239, 0.00860714,-0.01771023]
  - [0.00893160, 0.01807260, 0.99979678, 0.00399246]
  - [0.0, 0.0, 0.0, 1.0]
  timeshift_cam_imu: -8.121e-05
  rostopic: /color
  resolution: [640, 480]

imu.yaml:

rostopic: /imu
update_rate: 200.0 #Hz

accelerometer_noise_density: 0.01 #continous
accelerometer_random_walk: 0.0002 
gyroscope_noise_density: 0.005 #continous
gyroscope_random_walk: 4.0e-06


这里我用得到的相机内参替换了官方模板程序里面的数值,但是T_cam_imu和time_shift_imu并未修改,这里博主也不是很清楚。

然后运行:

kalibr_calibrate_imu_camera --target ~/dev/kalibr_ws/src/kalibr/data/checkerboard.yaml --cam ~/dev/kalibr_ws/src/kalibr/data/camchain.yaml --imu ~/dev/kalibr_ws/src/kalibr/data/imu.yaml --bag ~/dev/kalibr_ws/src/kalibr/data/color_imu.bag --bag-from-to 5 45 --show-extraction

这样就能够运行了。上述命令的5 45指的是采用的数据集的范围。


D435i的IMU的标定(用RealSense官方的)

参考文献:官网链接

首先到github上安装librealsense,本人直接下载了压缩包,然后解压缩后,在librealsense文件夹中新建了一个build文件夹,然后进入build文件夹,打开命令行,运行:

cmake ..

然后如果网络情况不好的话,会报错:

报的错是librealsense/third-party/libtm/resources/CMakeLists.txt中的第98行报错,可以将92行到94行注释掉。

然后:

make

sudo make install

然后按照pdf的教程安装各种python的东西,最后在tools/rs-imu-calibration中运行

python rs-imu-calibration.py

按照PDF的提示,一步步操作,最后输入footer按enter就能看到最后标定的结果,选择是否将结果写入到相机的eeprom中。


 

  • 6
    点赞
  • 91
    收藏
    觉得还不错? 一键收藏
  • 40
    评论
在 MATLAB 中进行 D435 相机的标定,你可以按照以下步骤进行操作: 1. 首先,确保你已经安装了 MATLAB 相机标定工具箱。如果没有安装,你可以在 MATLAB 中运行以下命令来安装它: ```matlab add-ons explorer ``` 然后搜索 "Camera Calibration Toolbox for MATLAB" 并进行安装。 2. 打开 MATLAB 并创建一个新的脚本文件。 3. 导入相机标定工具箱的函数和类: ```matlab addpath('路径/到/相机标定工具箱'); ``` 4. 设置标定板的尺寸。如果你使用的是标准的 D435 相机,可以将标定板尺寸设置为 9x6: ```matlab boardSize = [9, 6]; ``` 5. 创建一个 `cameraCalibrator` 对象,并设置标定板的尺寸: ```matlab cameraCalibrator = cameraCalibrator('squareSize', 1, 'boardSize', boardSize); ``` 6. 捕获一系列图像用于标定。你可以使用 `snapshot` 函数来获取图像,并使用 `addImage` 函数将图像添加到 `cameraCalibrator` 对象中: ```matlab image = snapshot(相机设备对象); addImage(cameraCalibrator, image); ``` 7. 重复步骤 6 多次,以便采集足够数量的图像。 8. 运行 `calibrate` 函数进行相机标定: ```matlab calibrate(cameraCalibrator); ``` 9. 标定完成后,你可以使用 `showReprojectionErrors` 函数查看重投影误差,并使用 `showExtrinsics` 函数显示相机的外参矩阵。 这些是基本的步骤,你可以根据具体的需求和情况进行进一步的调整和处理。希望对你有帮助!
评论 40
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值