【摄像头标定】使用kalibr进行双目摄像头标定(ros1、ros2)

前言

本文不是纯用ros1进行标定,需要ros1和ros2通信。给使用ros2进行开发,但又想用kalibr标定双目摄像头的小伙伴一个教程。本文双目摄像头的数据发布使用ros2,所以需要用到ros1_bridge功能包将ros2和ros1的话题进行适配,使得ros1环境中可以接收ros2的话题,然后使用rosbag录制话题数据,完成后将bag包放到虚拟机的ubuntu中,使用kalibr进行标定。
前提是自己已经写好了双目相机图像的发布节点。

标定板

标定板使用6×6的Aprilgrid,目前网上没找到这个标定板的pdf,可以参考下面这个博客自己制作:
https://blog.csdn.net/h1527820835/article/details/123397154
在这里插入图片描述

标定

①板端准备和录制

准备:
如果是使用ros1进行开发的不用看此教程。板端使用ros2进行开发的往下看,在板端再安装对应版本的ros1,一般就是noetic,可以之间使用鱼香ros的一键安装指令:wget http://fishros.com/install -O fishros && . fishros
新开一个终端,source ros2的环境变量,在ros2的环境下安装ros1_bridge:

source /opt/ros/foxy/setup.bash
sudo apt install ros-foxy-ros1-bridge

安装完成即可。

录制:
一共需要开启四个终端,分别是ros1环境下的roscore、ros1环境下的rosbag、ros1,ros2环境下的ros1_bridge、ros2环境下的发布图像节点。下面以小标号的形式展示,每个代表一个终端:

source /opt/ros/noetic/setup.bash
roscore

source /opt/ros/foxy/setup.bash
source /opt/ros/noetic/setup.bash
ros2 run ros1_bridge dynamic_bridge --bridge-all-topics

source /opt/ros/foxy/setup.bash
ros2 launch hobot_t1_cam mipi_cam.launch.py mipi_out_format:=bgr8 mipi_io_method:=ros mipi_framerate:=4             //这个是我的图像发布节点,发布图像数据话题:/image_raw_left,/image_raw_right

source /opt/ros/noetic/setup.bash
 rosbag record /image_raw_right /image_raw_left -O stereo_4hz.bag                                //两个话题分别对应自己发布双目相机图像数据话题

录制时固定相机,手持标定板移动,最好每个角落都要有图像,录个几十秒即可。这样板端就完成了,之后的操作都在虚拟机的ubuntu里。

②上位机准备和标定

准备:
这里上位机使用vmware安装ubuntu20.04,有条件的也可以双系统,比起虚拟机运行,性能会更好。ubuntu安装完成后,同样使用鱼香ros一键安装ros1-noetic:wget http://fishros.com/install -O fishros && . fishros,安装完ros1之后,顺便再使用这个命令安装一下rosdep。

依赖安装:

sudo apt-get install -y \
    git wget autoconf automake nano \
    libeigen3-dev libboost-all-dev libsuitesparse-dev \
    doxygen libopencv-dev \
    libpoco-dev libtbb-dev libblas-dev liblapack-dev libv4l-dev

标定:
⚪工作空间src中,下载Kalibr源码,编译:

mkdir -p ~/my_ws/src
cd ~/my_ws/src
git clone https://github.com/ethz-asl/kalibr.git
cd ..
source /opt/ros/noetic/setup.bash
catkin_make
source devel/setup.bash

⚪将录制得到的bag文件拷贝到/src/kalibr文件夹里,新建april_6_6.yaml也放在这个目录,yaml代码如下:

target_type: 'aprilgrid' #gridtype
tagCols: 6               #number of apriltags
tagRows: 6               #number of apriltags
tagSize: 0.021           #size of apriltag, edge to edge [m]
tagSpacing: 0.28          #ratio of space between tags to tagSize
codeOffset: 0            #code offset for the first tag in the aprilboard
6,6表示标定板是六行六列,0.021表示每个方块21mm,tagSpacing表示小黑方块长度除以大黑方块长度的值

⚪终端运行双目标定功能包:

rosrun kalibr kalibr_calibrate_cameras --bag src/kalibr/stereo_4hz.bag --topics /image_raw_right /image_raw_right --models pinhole-radtan pinhole-radtan --target src/kalibr/april_6_6.yaml --show-extraction

bag:录制的双目视频;topic:要和板端运行录制代码中话题的顺序一样;models:相机模型,我的是带畸变的针孔,所以是pinhole-radtan;target:标定板的配置文件,上面自己新建了;需要注意的是–models pinhole-radtan pinhole-radtan,表示的是摄像头的模型,我这里两个都是针孔摄像头,具体自己的型号需要问厂家.加上 --show-extraction即可可视化角点图

⚪运行可能会报错:“ImportError: No module named igraph”,安装以下即可:

1、sudo apt-get install -y libigraph0-dev
2、pip install python-igraph==0.7.1.post6
python2.7只支持0.8X以前的版本

安装完之后再次运行双目标定功能包,标定结束后在kalibr文件中会生成三个文件:

  • .yaml:保存着左右相机的内参,以及左相机到右相机的变换矩阵
  • .pdf:保存着各种图,比如重投影误差图
  • .txt:含有相机内参以及重投影误差
  • *加粗样式- 在这里插入图片描述
    **加粗样式
    我这里重投影误差大,大概率是因为录制的bag中棋盘格的位置不够丰富,从左边这个位姿图就能看出来,没有将棋盘格放置在各个角落,如果拍的够全面的话重投影误差是可以小于0.5的。像下面这样,来自其它博客的图:
    在这里插入图片描述
  • 15
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值