相机标定
打印标定板和对应的aprilgrid.yaml
target_type: 'aprilgrid' #gridtype
tagCols: 6 #number of apriltags
tagRows: 6 #number of apriltags
tagSize: 0.038 #size of apriltag, edge to edge [m]
tagSpacing: 0.3 #ratio of space between tags to tagSize
录制.bag
使用rosbag record -O cam /color
录制bag包
也可以通过以下命令调整频率
rosrun topic_tools throttle messages /camera/color/image_raw 4.0 /color
录一分钟左右,录的时候对着标定板移动,按下ctrl+c 结束录制
标定
kalibr_calibrate_cameras --target aprilgrid.yaml --bag camd4.bag --models pinhole-radtan --topics /color --show-extraction
我调用出错,应该使用rosrun去运行:
rosrun kalibr kalibr_calibrate_cameras --target target.yaml --bag cam.bag --models pinhole-radtan --topics /color --show-extraction
IMU标定
标定加速度偏差和零偏
在realsense驱动目录下librealsense/tools/rs-imu-calibration运行:
python rs-imu-calibration.py
我的路径:~/MyCodes/realsense/librealsense
标定其噪声模型
- 安装imu标定工具到~/MyCatkinWs/imu_ws
- 建立对应的launch文件:(~/MyCatkinWs/imu_ws/src/imu_utils/launch/d455_imu_calibration.launch)
<launch>
<node pkg="imu_utils" type="imu_an" name="imu_an" output="screen">
<param name="imu_topic" type="string" value= "/camera/imu"/>
<param name="imu_name" type="string" value= "d455_imu_calibration"/>
<param name="data_save_path" type="string" value= "$(find imu_utils)/data2/"/>
<param name="max_time_min" type="int" value= "10"/>
<param name="max_cluster" type="int" value= "100"/>
</node>
</launch>
其中 是标定时间的意思
- 修改 rs_camera.launch:(/opt/ros/noetic/share/realsense2_camera/launch/rs_camera.launch)
<arg name="gyro_fps" default="200"/>
<arg name="accel_fps" default="200"/>
<arg name="enable_gyro" default="true"/>
<arg name="enable_accel" default="true"/>
<arg name="enable_sync" default="false"/> #这里存疑
<arg name="unite_imu_method" default="linear_interpolation"/>
- 静止录制bag
roscore
roslaunch realsense2_camera rs_camera.launch
rosbag record -O imu_calibration /camera/imu
- 标定
终端1:
终端2:source ~/MyCatkinWs/imu_ws/devel/setup.sh roslaunch imu_utils d455_imu_calibration.launch
看(1)的terminal,会有一串东西产生,而且该terminal已经可以输入命令了(意味着标定进程已经结束),说明已经标定好了,这时候要看结果source ~/MyCatkinWs/imu_ws/devel/setup.sh cd ~/MyCatkinWs/imu_ws //数据包在这个文件夹下 rosbag play -r 200 imu_calibration.bag
cd ~/MyCatkinWs/imu_ws/src/imu_utils/data2
里面有一个文件:
d455_imu_calibration_imu_param.yaml
联合标定
运行realsense后映射话题:
roslaunch realsense2_camera rs_camera.launch # 运行realsense
# 映射话题
rosrun topic_tools throttle messages /camera/color/image_raw 20.0 /color
rosrun topic_tools throttle messages /camera/imu 200.0 /imu
录制bag,要对着棋盘格(~/MyCatkinWs/kalibr_workspace/target.pdf),录制将近两分钟:
rosbag record -O dynamic /color /imu
根据第二部标定的imu(d455_imu_calibration_imu_param.yaml)。生成imu.yaml文件:
由于我们刚刚也是在kalibr工作环境下标定的,所以直接用刚刚标定好的相机yaml文件即可。
即上述所说的cam文件
camchain-…camd455i.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
标定:
rosrun kalibr kalibr_calibrate_imu_camera --target target.yaml --cam cam-camchain.yaml --imu imu.yaml --bag dynamic.bag --show-extraction
生成好多个文件,主要关注一个文件:
camchain-imucam-dynamic.yaml
并且确认重投影误差,我的误差为0.56个像素我看网上其他人能到0.15以下已经是很好的了。
参考:
https://blog.csdn.net/Hanghang_/article/details/103546033
https://zhuanlan.zhihu.com/p/396368225