• 使用kalibr标定工具进行单目相机和双目相机的标定


    1.下载和编译

    1.1 安装依赖项,如果中间报错,可以将下面一大托依赖分多次安装,对应的ros版本也要进行修改,我自己的是melodic

    sudo apt-get install python-setuptools python-rosinstall ipython libeigen3-dev libboost-all-dev doxygen libopencv-dev
    sudo apt-get install 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
    
    pip install python-igraph
    
    • 1
    • 2
    • 3
    • 4

    1.2 编译

    mkdir -p ~/kalibr_ws/src
    cd ~/kalibr_ws/src
    git clone --recursive https://github.com/ori-drs/kalibr
    
    cd ~/kalibr_ws
    source /opt/ros/noetic/setup.bash
    catkin init
    catkin config --extend /opt/ros/noetic
    catkin config --merge-devel # Necessary for catkin_tools >= 0.4.
    catkin config --cmake-args -DCMAKE_BUILD_TYPE=Release
    
    catkin build -DCMAKE_BUILD_TYPE=Release -j4
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    问题: 因为自己的电脑上安装了anaconda3,anaconda3其自带的python可能会影响到kalibr,貌似因为kalibr需要解析rosbag包,所以使用的python2,导致出现报错
    Failed to load Python extension for LZ4 support. LZ4 compression will not be availabl
    真是要哭了。。。

    解决办法:
    kalibr_workspace/src/kalibr/aslam_offline_calibration/kalibr/python/kalibr_calibrate_cameras.py 文件中
    更改 "#!/usr/bin/env python""#!/usr/bin/env python2"

    2. 数据准备

    2.1 bag数据录制

    将录制好的BAG标定文件重新录制一下,去掉不好的图片,同时将bag的频率改为4hz
    分别打开两个终端,输入一下命令并运行,等待topic的输入

    rosrun topic_tools throttle messages /cam_stereo_left/csi_cam/image_raw 4.0 /left
    rosrun topic_tools throttle messages /cam_stereo_right/csi_cam/image_raw 4.0 /right
    
    • 1
    • 2

    新打开一个终端,用来录制视频

    rosbag record -O stereo_calibra.bag /left /right
    
    • 1

    新打开一个终端,用来播放原数据集

    rosbag play 0620_1280x720.bag
    
    • 1

    2.2 标定板参数文件

    自己写一个,checkboard_8x6_10x10cm.yaml

    target_type: 'checkerboard'
    targetCols: 8
    targetRows: 6
    rowSpacingMeters: 0.1
    colSpacingMeters: 0.1
    
    • 1
    • 2
    • 3
    • 4
    • 5

    target_type:是标定板的类型,这里使用的棋盘格
    targetCols:标定版列方向的角点数量
    targetRows:标定办行方向的角点数量
    rowSpacingMeters:每个棋盘格的宽,单位米
    colSpacingMeters:每个棋盘格的高,单位米

    附上其他两种标定板对应的配置文件
    “二维码标定板”

    target_type: 'aprilgrid' #gridtype
    tagCols: 6               #number of apriltags
    tagRows: 6               #number of apriltags
    tagSize: 0.088           #size of apriltag, edge to edge [m]
    tagSpacing: 0.3          #ratio of space between tags to tagSize
                             #example: tagSize=2m, spacing=0.5m --> tagSpacing=0.25[-]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    “圆形标定板”

    target_type: 'circlegrid'  #gridtype
    targetCols: 6              #number of circles (cols)
    targetRows: 7              #number of circles (rows)
    spacingMeters: 0.02        #distance between circles [m]
    asymmetricGrid: False      #use asymmetric grid (opencv) [bool]
    
    • 1
    • 2
    • 3
    • 4
    • 5

    标定板pdf生成命令:
    根据需要修改下--nx,--ny,--tsize,--tspace

    rosrun kalibr kalibr_create_target_pdf --type apriltag --nx 6 --ny 6 --tsize 0.02 --tspace 0.3
    
    • 1

    3. 开始标定

    在工作空间目录下打开终端

    source YOUR_PATH/devel/setup.bash
    rosrun kalibr kalibr_calibrate_cameras --bag /home/lusx/data/stereo_calibra.bag --topics /left /right --models pinhole-radtan pinhole-radtan --target src/Kalibr/config/checkboard_8x6_10x10cm.yaml
    
    • 1
    • 2
    --bag:标定数据的名称
    --topics:左右目相机的topic
    --models:左右目相机模型
    #pinhole-radtan: 最常见的针孔模型+布朗畸变模型, 适用于大多数的角度小于120的相机, 其中畸变参数包含了径向畸变k1,k2和切向畸变p1,p2; 如果相机的畸变情况不是很严重,这个模型基本都可以; 比如我的DFOV为150的相机, 也可以用这个且去畸变效果很好;
    # pinhole-equi:针孔模型+等距畸变模型,也就是KB模型所需要选择的类型,该模型的使用范围也很广,大部分的鱼眼镜头也可以,注意8参数的KB模型的畸变参数为k1,k2,k3,k4,虽然也是四个数,但与前一个模型不同的是,这里只有径向畸变的参数,而没有切向畸变tangential distortion,投影时对应的公式也不同;同时这也是opencv中cv::fisheye使用的模型;
    --target:标定板参数配置文件
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    报错:
    Cameras are not connected through mutual observations, please check the dataset. Maybe adjust the approx. sync. tolerance.

    原因是两个相机不同步,既可以提高采集频率到20hz,也可以同时增加同步忍耐度 --bag-from-to 5 35 --approx-sync 0.04,
    完整参数如下:
    rosrun kalibr kalibr_calibrate_cameras --bag /home/lusx/data/stereo_calibra.bag --bag-from-to 5 100 --topics /left /right --models pinhole-radtan pinhole-radtan --target src/Kalibr/config/checkboard_8x6_10x10cm.yaml --approx-sync 0.04
    
    • 1
    • 2
    • 3

    3.3 标定结果

    生成3个文件,参数可以在stereo_calibra-camchain.yaml查看,细节可以在stereo_calibra-report-cam.pdf中查看
    在这里插入图片描述
    stereo_calibra-camchain.yaml内容:
    在这里插入图片描述

    4参数优化

    然而标定得到的内外参感觉有拉跨,不知道是不是使用的原始数据有问题,然后也没有找到两个相机的基线bf,继续优化吧。。

  • 相关阅读:
    排序算法-归并排序
    218. 扑克牌 - 记忆化概率dp
    C++ 命名空间-----namespace(超详细解析,小白必看系列)
    go 适配器模式
    网络安全(黑客)自学
    mybatis笔记 映射配置文件
    什么OKR,分明是中华田园KPI
    selenium自动化测试入门 —— 键盘鼠标事件ActionChains
    P2922 [USACO08DEC] Secret Message G - 字典树
    基于Spring Boot应用@FunctionalInterface注解
  • 原文地址:https://blog.csdn.net/guanjing_dream/article/details/125495516