Kalibr安装与使用:camera + IMU标定

22 篇文章 3 订阅

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

  • 3
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值