1、安装Kalibr依赖项
sudo apt-get install python-setuptools python-rosinstall ipython libeigen3-dev libboost-all-dev doxygen libopencv-dev ros-kinetic-vision-opencv ros-kinetic-image-transport-plugins ros-kinetic-cmake-modules python-software-properties software-properties-common libpoco-dev python-matplotlib python-scipy python-git python-pip ipython libtbb-dev libblas-dev liblapack-dev python-catkin-tools libv4l-dev
sudo pip install python-igraph --upgrade
2、创建工作区间
mkdir -p kalibr_ws/src
cd kalibr_ws
source /opt/ros/kinetic/setup.bash
catkin init
catkin config --extend /opt/ros/kinetic
catkin config --merge-devel
catkin config --cmake-args -DCMAKE_BUILD_TYPE=Release
3、克隆源文件至kalibr_ws的src目录下
cd kalibr_ws/src
git clone https://github.com/ethz-asl/Kalibr.git
4、编译工具源码
cd kalibr_ws
catkin build -DCMAKE_BUILD_TYPE=Release -j4
5、刷新工作区间
source ~/kalibr_ws/devel/setup.bash
6、利用官方的标定bag文件进行标定测试
https://github.com/ethz-asl/kalibr/wiki/downloads 下载对应文件
对于Multiple camera calibration文件,可用如下命令测试:
source ~/kalibr_ws/devel/setup.bash
kalibr_calibrate_cameras --target /home/bruce/dataset/april_6x6.yaml --bag /home/bruce/dataset/static.bag --models pinhole-equi pinhole-equi omni-radtan omni-radtan --topics /cam0/image_raw /cam1/image_raw /cam2/image_raw /cam3/image_raw
注意:–target后面是指向yaml文件的路径,–bag后面指向bag文件所在的位置。
标定完成后在kalibr_ws文件夹中会生成对应的标定参数文件。
同理,对于IMU-camera calibration文件,可以用如下命令进行测试:
source ~/kalibr_ws/devel/setup.bash
kalibr_calibrate_imu_camera --target /home/bruce/dataset/april_6x6.yaml --cam /home/bruce/dataset/camchain.yaml --imu /home/bruce/dataset/imu_adis16448.yaml --bag /home/bruce/dataset/dynamic.bag --bag-from-to 5 45
7、(我使用的是小觅双目深度相机+IMU)这里首先进行双目标定
source ~/kalibr_ws/devel/setup.bash
kalibr_calibrate_cameras \
--target /home/bruce/kalibr_ws/yaml/checkerboard_11x8_30x30cm.yaml \
--bag /home/bruce/dataset/images.bag --bag-from-to 5 45 \
--models pinhole-radtan pinhole-radtan \
--topics /mynteye/left/image_mono /mynteye/right/image_mono
对于棋盘格yaml文件的格式,参考kalibr的github中给出的写法,一般只需替换对应的参数即可。
基本格式如下(我采用棋盘格方式):
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]
8、标定IMU
使用imu_utilsA ROS package tool to analyze the IMU performance, C++ version of Allan Variance Tool.
详细安装办法参见github上的介绍:
https://github.com/gaowenliang/imu_utils
对于安装过程中遇到的问题,在github上都可以找到解决办法。
具体使用办法如下:
rosbag play -r 200 imu_A3.bag
roslaunch imu_utils A3.launch
A3.launch文件写法如下:
<launch>
<node pkg="imu_utils" type="imu_an" name="imu_an" output="screen">
<param name="imu_topic" type="string" value= "/mynteye/imu/data_raw"/>
<param name="imu_name" type="string" value= "A3"/>
<param name="data_save_path" type="string" value= "$(find imu_utils)/data/"/>
<param name="max_time_min" type="int" value= "120"/>
<param name="max_cluster" type="int" value= "100"/>
</node>
</launch>
(根据自己录制的数据集的具体格式来写即可)
可得大致如下的标定参数:
type: IMU
name: A3
Gyr:
unit: " rad/s"
avg-axis:
gyr_n: 1.0351286977809465e-04
gyr_w: 2.9438676109223402e-05
x-axis:
gyr_n: 1.0312669892959053e-04
gyr_w: 3.3765827874234673e-05
y-axis:
gyr_n: 1.0787155789128671e-04
gyr_w: 3.1970693666470835e-05
z-axis:
gyr_n: 9.9540352513406743e-05
gyr_w: 2.2579506786964707e-05
Acc:
unit: " m/s^2"
avg-axis:
acc_n: 1.3985049290745563e-03
acc_w: 6.3249251509920116e-04
x-axis:
acc_n: 1.1687799474421937e-03
acc_w: 5.3044554054317266e-04
y-axis:
acc_n: 1.2050535351630543e-03
acc_w: 6.0281218607825414e-04
z-axis:
acc_n: 1.8216813046184213e-03
acc_w: 7.6421981867617645e-04
注:这里我没有进行实际的IMU标定,因为太费时了,关于IMU的数据集包的录制最起码要两小时以上,而且还必须保持IMU静止不动。我用另外的方法来获取IMU标定参数。不过具体流程如上述介绍,是没有错的。
我使用的小觅双目相机,通过其对应的SDK包来获得粗鲁的标定参数。
得出对应的参数后以及特定格式,修改相应的imu.yaml文件即可。
9、双目相机+IMU标定
source ~/kalibr_ws/devel/setup.bash
kalibr_calibrate_imu_camera \
--target /home/bruce/kalibr_ws/yaml/checkerboard_11x8_30x30cm.yaml \
--bag /home/bruce/dataset/images.bag --bag-from-to 5 30 \
--cam /home/bruce/kalibr_ws/yaml/camchain.yaml \
--imu /home/bruce/kalibr_ws/yaml/imu.yaml
这里IMU的参数事先已经标定好。
camchain.yaml的数据格式如下|(由双目标定结果得出):
cam0:
cam_overlaps: [1]
camera_model: pinhole
distortion_coeffs: [-0.010150156789702157, -0.009757530236106147, 0.02434468134268382,
-0.01558795259868536]
distortion_model: equidistant
intrinsics: [355.32638829038774, 355.41179725372837, 330.1460646757428, 248.4187787081769]
resolution: [640, 480]
rostopic: /mynteye/left/image_mono
cam1:
T_cn_cnm1:
- [0.9999988420841134, 0.0011474200220335142, 0.0009996287952506783, -0.11975459844332348]
- [-0.0011435503067978487, 0.999991884106743, -0.003863161056044641, 0.0003597981566024174]
- [-0.0010040533507141237, 0.0038620134570135837, 0.9999920383327707, -0.00014487979126542543]
- [0.0, 0.0, 0.0, 1.0]
cam_overlaps: [0]
camera_model: pinhole
distortion_coeffs: [-0.011087263790398852, 0.020262103365159687, -0.055058999221671526,
0.044488987691969434]
distortion_model: equidistant
intrinsics: [357.97010009128593, 357.972212549977, 327.47648107731993, 252.17044419126015]
resolution: [640, 480]
rostopic: /mynteye/right/image_mono
IMU.yaml的数据格式如下(对应填写即可):
rostopic: /mynteye/imu/data_raw
update_rate: 200.0 #Hz
accelerometer_noise_density: 0.0268014618074 #continous
accelerometer_random_walk: 0.00262960861593
gyroscope_noise_density: 0.00888232829671 #continous
gyroscope_random_walk: 0.000379565782927
对于IMU数据的更新频率,可以通过简单计算得出,找到录制的数据包所在位置,打开终端,命令窗口输入:rosbag info images.bag
即可看到IMU信息的总数目及录制的总时间,简单计算便可得出大致的频率信息。
参考博客:
https://cggos.github.io/pages5/
https://blog.csdn.net/weixin_43247057/article/details/101695333