记录一下自己的学习过程,仅供参考
1 IMU标定
IMU标定过程 含ceres-solver code_utils imu_utils安装
2 相机标定
2.1 录包
帧率改为4 曝光能看清就行(0.5)
source devel/setup.bash
roslaunch mvsua_ros_driver camera_driver.launch //驱动你自己的相机
rosbag record /mvsua_cam/image_raw1 //改为你自己相机的话题名
打开可视化界面
rqt_image_view
2.2 Kalibr标定相机
Kalibr官方wiki
1、创建checkerboard.yaml文件
这里是12*9 边长为3cm的棋盘格,一定要注意内角不是格子数
target_type: 'checkerboard' #gridtype
targetCols: 11 #number of internal chessboard corners 内角不是格子数 格子数为12*9
targetRows: 8 #number of internal chessboard corners
rowSpacingMeters: 0.03 #size of one chessboard square [m]
colSpacingMeters: 0.03 #size of one chessboard square [m]
2、运行Kalibr
rosrun kalibr kalibr_calibrate_cameras --bag cam.bag --topics /mvsua_cam/image_raw1 --models pinhole-equi --target checkerboard.yaml
models根据需要选择:
Kalibr supports the following projection models:
pinhole camera model (pinhole)1
(intrinsics vector: [fu fv pu pv])
omnidirectional camera model (omni)2
(intrinsics vector: [xi fu fv pu pv])
double sphere camera model (ds)3
(intrinsics vector: [xi alpha fu fv pu pv])
extended unified camera model (eucm)4
(intrinsics vector: [alpha beta fu fv pu pv])
Kalibr supports the following distortion models:
radial-tangential (radtan)*
(distortion_coeffs: [k1 k2 r1 r2])
equidistant (equi)**
(distortion_coeffs: [k1 k2 k3 k4])
fov (fov)5
(distortion_coeffs: [w])
none (none)
(distortion_coeffs: [])
运行完之后生成结果:重投影误差1以内比较好
3 联合标定
1、录包
同时录制imu和相机的topic
2、根据imu标定结果创建imu.yaml
#Accelerometers
accelerometer_noise_density: 4.84e-02 #Noise density (continuous-time)
accelerometer_random_walk: 4.67e-03 #Bias random walk
#Gyroscopes
gyroscope_noise_density: 1.44e-03 #Noise density (continuous-time)
gyroscope_random_walk: 6.26e-05 #Bias random walk
rostopic: /mobile_base/sensors/imu_data_origin #the IMU ROS topic
update_rate: 200.0 #Hz (for discretization of the values above)
3、cam.yaml可以使用上一步标定生成的结果
4、联合标定
rosrun kalibr kalibr_calibrate_imu_camera --bag imu_cam.bag --cam cam.yaml --imu imu.yaml --target checkerboard.yaml
4 标定结果
Normalized Residuals:
相机、IMU标定结果: