intel realsense D435i calibration
引言
- d435i简介:https://zhaoxuhui.top/blog/2020/09/09/intel-realsense-d435i-installation-and-use.html(写的很好)
- ref0:https://blog.csdn.net/fb_941219/article/details/104709049#12kalibr_Install_23
- ref1:https://blog.csdn.net/Hanghang_/article/details/103546033
准备工作
- ubuntu18.04(ros、opencv3(kalibr)、eigen and ceres(imu))
- librealsense-sdk2(库)
- realsense-ros(相机驱动)
- kalibr(eigen、opencv3 标定相机内参、imu与相机外参)
- code_utils—>imu_utils(ceres 标定imu)
- 注意:标定顺序:imu噪声、相机内参、imu与相机外参(前两个不分前后)
工具安装
- realsense:https://blog.csdn.net/qq_38337524/article/details/115311167
- kalibr:https://github.com/ethz-asl/kalibr/wiki/installation(ubuntu18.04选择kalibr-fix-18.04分支)
- imu_utils:https://blog.csdn.net/u012132666/article/details/123235930(先编译code_utils,在编译imu_utils,放在相同的工作空间)
imu标定
修改参数
使得IMU数据同步(针对vins_mono运行IMU时间戳混乱的情况imu message ins disorder)
具体步骤:
找到realsense-ros工作环境文件夹中的rs_camera.launch
位置:在 /realsense的catkin工作环境/src/realsense-ros/realsense2_camera/launch/
修改rs_camera.launch中的参数为“copy”或"linear_interpolation"
<arg name="unite_imu_method" default="copy"/>
安装imu标定工具
- 安装ceres(先安装eigen3),可参考:https://blog.csdn.net/weixin_44857882/article/details/119877566?spm=1001.2014.3001.5501
- 创建工作空间,一个工作空间,两个功能包
mkdir -p ~/imu_catkin_ws/src
cd ~/imu_catkin_ws/src
catkin_init_workspace
cd ~/imu_catkin_ws
catkin_make
source ~/imu_catkin_ws/devel/setup.bash
- 编译code_utils
cd ~/imu_catkin_ws/
git clone https://github.com/gaowenliang/code_utils.git
cd ~/imu_catkin_ws/
catkin_make
- 编译imu_utils
cd ~/imu_catkin_ws/src/
git clone https://github.com/gaowenliang/imu_utils.git
cd ~/imu_catkin_ws/src/
catkin_make
- 写标定参数文件
cd ~/imu_catkin_ws/src/imu_utils/launch
touch d435i_imu_calibration.launch
gedit d435i_imu_calibration.launch
复制A3.launch内容
<launch>
<node pkg="imu_utils" type="imu_an" name="imu_an" output="screen">
<!--TOPIC名称和上面一致-->
<param name="imu_topic" type="string" value= "/camera/imu"/>
<!--imu_name 无所谓-->
<param name="imu_name" type="string" value= "d435i"/>
<!--标定结果存放路径-->
<param name="data_save_path" type="string" value= "$(find imu_utils)/data/"/>
<!--数据录制时间-min,至少为10min-->
<param name="max_time_min" type="int" value= "120"/>
<!--采样频率,即是IMU频率,采样频率可以使用rostopic hz /camera/imu查看,设置为200,为后面的rosbag play播放频率-->
<param name="max_cluster" type="int" value= "200"/>
</node>
</launch>
录制bag包
插上相机(usb3.0),打开驱动launch文件
roslaunch realsense2_camera rs_camera.launch
静止相机,不要动!!!
// 指定想要存放的路径,开始录制
rosbag record -O imu_calibration /camera/imu
至少录制你刚刚设定的时间以上(max_time_min)
比如上面设定10,这里就要录足十分钟
录制完之后就按下ctrl+c,结束录制
你会发现当前目录有一个名为 imu_calibration.bag的文件
开始标定
- 打开一个终端,在imu_catkin_ws下
source ~/imu_catkin_ws/devel/setup.sh
roslaunch imu_utils d435i_imu_calibration.launch
- 再打开一个,到bag包的路径下
rosbag play -r 200 imu_calibration.bag #以200倍速度进行播放,因为IMU数据录制时间很长,如果就按照默认速度播放会播放过很久!
- 在imu_catkin_ws下出现好几个文件,关注imu_utils/data/d435i_imu_param.yaml
关注以下数据(平均):分别是陀螺仪和加速度计 随机游走和 高斯白噪声的平均值,是IMU噪声模型中的两种噪声
Gyr:
avg-axis:
gyr_n: 3.1820671461855504e-03
gyr_w: 3.0693398103399251e-05
Acc:
avg-axis:
acc_n: 2.6449533258549235e-02
acc_w: 7.2111910796954259e-04
相机标定
安装标定工具
kalibr:https://github.com/ethz-asl/kalibr/wiki/installation(ubuntu18.04选择kalibr-fix-18.04分支)
报错参考:https://blog.csdn.net/u010003609/article/details/104715475以及https://blog.csdn.net/ndwonduosk_/article/details/124718186
标定板yaml文件
标定板可打印,也可使用实验室现成的,测量格子并写成yaml文件,以下是我的
target_type: 'checkerboard' #gridtype
targetCols: 8 #number of internal chessboard corners
targetRows: 11 #number of internal chessboard corners
rowSpacingMeters: 0.03 #size of one chessboard square [m]
colSpacingMeters: 0.03 #size of one chessboard square [m]
录制bag包
- 打开2个终端,启动realsense和rviz(方便观察相机视野)
source devel/setup.bash
roslaunch realsense2_camera rs_camera.launch
rviz
- 在打开一个终端,修改话题
// 20为相机帧数,大于6,小于90,选择20
rosrun topic_tools throttle messages /camera/color/image_raw 20 /color
- 在打开一个终端,录制2min左右
rosbag record -O camd435i /color
开始标定
在Kalibr的工作空间,执行source devel/setup.sh
//26-100 指的是录制的第26秒到100秒这段时间,pinhole-radtan指的是针孔相机模型和畸变模型
kalibr_calibrate_cameras --target /位置/文件名.yaml --bag /位置/camd435i.bag --bag-from-to 26 100 --models pinhole-radtan --topics /color --show-extraction
标定完之后就可以发现当前目录下出现了三个文件,就是标定的结果。
camchain-…camd435i.yaml
results-cam-…camd435i.txt
report-cam-…camd435i.pdf
关注yaml文件,intrinsic 是内参
distortion_coeffs 是畸变参数
cam0:
cam_overlaps: []
camera_model: pinhole
distortion_coeffs: [0.11114194921960645, -0.2171600270591326, -0.0037942616908056637,
-0.004000340562604045]
distortion_model: radtan
intrinsics: [579.5589935482029, 578.1762234104125, 326.6772381912598, 243.3955018655041]
resolution: [640, 480]
rostopic: /color
imu、相机标定外参
录制bag包
- 打开一个终端,调节imu和相机话题的频率并修改话题
rosrun topic_tools throttle messages /camera/color/image_raw 20.0 /color
rosrun topic_tools throttle messages /camera/imu 200.0 /imu
- 再打开一个终端,开始录包(你想保存bag包的路径下)
rosbag record -O dynamic /color /imu
文件准备
- 文件准备:一个是相机的标定文件yaml,一个是IMU的标定文件yaml,一个是录制的数据包bag
- camchain-…camd435i.yaml
cam0:
cam_overlaps: []
camera_model: pinhole
distortion_coeffs: [0.11114194921960645, -0.2171600270591326, -0.0037942616908056637,
-0.004000340562604045]
distortion_model: radtan
intrinsics: [579.5589935482029, 578.1762234104125, 326.6772381912598, 243.3955018655041]
resolution: [640, 480]
rostopic: /color
- 新建imu.yaml
#Accelerometers
accelerometer_noise_density: 1.86e-03 #Noise density (continuous-time)
accelerometer_random_walk: 4.33e-04 #Bias random walk
#Gyroscopes
gyroscope_noise_density: 1.87e-04 #Noise density (continuous-time)
gyroscope_random_walk: 2.66e-05 #Bias random walk
rostopic: /imu0 #the IMU ROS topic
update_rate: 200.0 #Hz (for discretization of the values above)
开始标定
在kalibr工作目录下执行 source devel/setup.sh
kalibr_calibrate_imu_camera --target 标定板位置/标定板名称.yaml --cam 相机标定位置/相机标定名称.yaml --imu imu.yaml --bag dynamic.bag --bag-from-to 30 110 --imu-models scale-misalignment --max-iter 15 --show-extraction
生成很多文件,主要关注camchain-imucam-dynamic.yaml