二、双目相机标定
2.1 安装Kalibr
//安装依赖
sudo apt-get install python-setuptools python-rosinstall ipython libeigen3-dev doxygen libopencv-dev ros-melodic-vision-opencv ros-melodic-image-transport-plugins ros-melodic-cmake-modules 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 python-pyx
sudo apt-get install -y libigraph0-dev
sudo pip install python-igraph==0.7.0
//创建工作空间
mkdir -p ~/kalibr_ws/src
cd ~/kalibr_ws/src
//安装编译kalibr
git clone https://github.com/ethz-asl/Kalibr.git
cd ..
catkin_make -DCMAKE_BUILD_TYPE=Release
2.2 标定前准备
打印标定板,放在A4纸上打印出来,贴在固定白墙上。
建立标定文件
touch checkerboard.yaml
里面内容填写如下:
target_type: 'checkerboard' #gridtype
targetCols: 8 #number of internal chessboard corners
targetRows: 5 #number of internal chessboard corners
rowSpacingMeters: 0.030 #size of one chessboard square [m]
colSpacingMeters: 0.030 #size of one chessboard square [m]
我使用的为上图的棋盘格,数量为9列6行,checkerboard.yaml中对应的Cols和Rows需要写8和5 !!!否则报错[FATAL] [1612519163.722674]: No corners could be extracted for camera /left! ***
注意格子边长以你打印后实际测量长度为准!!!
2.3 打开相机录制话题
将rs_camera.launch复制粘贴重命名stere.launch。然后将里面的相关话题修改,需要改的有以下:
<arg name="infra_width" default="640"/>
<arg name="infra_height" default="480"/>
<arg name="enable_infra" default="true"/>
<arg name="enable_infra1" default="true"/>
<arg name="enable_infra2" default="true"/>
<arg name="infra_fps" default="30"/>
启动相机
roslaunch realsense2_camera stereo.launch
然后需要关闭结构光
rosrun rqt_reconfigure rqt_reconfigure
将emitter_enable设置为off
打开rviz,将左右目话题/camera/infra1/image_rect_raw 和/camera/infra2/image_rect_raw订阅出来:
然后先将图像发布频率降低到4Hz
rosrun topic_tools throttle messages /camera/infra1/image_rect_raw 4.0 /infra_left & rosrun topic_tools throttle messages /camera/infra2/image_rect_raw 4.0 /infra_right
开始录制
rosbag record -O mult_cam_d455 /infra_left /infra_right
然后相机的移动如下:首先前后、左右、上下各两个来回,然后俯仰、滚转、偏航三个方向两个来回,注意移动不要太快、需要保证标定板始终出现在图像中
2.4 开始标定
将bag、checkerboard.yaml放在kalibr_ws路径下
cd kalibr_ws
source devel/setup.bash
rosrun kalibr kalibr_calibrate_cameras --target checkerboard.yaml --bag mult_cam_d455.bag --models pinhole-radtan pinhole-radtan --topics /infra_left /infra_right
2.5 结果
其中 reprojection error如果在1个像素以下就算合理了,这里我的标定结果为0.03多,说明比较准确了