使用kalibr进行双目摄像头标定
- 前言
- 标定板
- 标定
- ①板端准备和录制
- ②上位机准备和标定
前言
本文不是纯用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:含有相机内参以及重投影误差