ROS2 foxy 单目相机标定方法(笔记本电脑摄像头)
环境:Ubuntu20.04、ROS2 foxy
相机标定使用的是棋盘格的内部顶点,因此 "12x9" 的棋盘板,其内部顶点参数为 "11x8"。
安装 Image Pipeline
安装相机标定所需软件包:
sudo apt install ros-foxy-camera-calibration-parsers
sudo apt install ros-foxy-camera-info-manager
sudo apt install ros-foxy-launch-testing-ament-cmake
创建相机标定工作空间:
cd ~
mkdir -p camera_calibration/src
下载 Image Pipeline 源码:https://github.com/ros-perception/image_pipeline/tree/foxy
将下载的压缩包解压并放置于 camera_calibration/src 文件夹下。
编译软件包:
cd ~/camera_calibration
colcon build
下载打印标定板
打开链接:https://calib.io/pages/camera-calibration-pattern-generator
根据自己的需要设定标定板参数,然后下载下来打印在纸上,比如我的参数:
相机标定
启动相机节点,并将 topic 重映射为 /camera/iamge_raw:
cd ~/camera_calibration
source install/setup.bash
ros2 run image_tools cam2image --ros-args -p width:=640 -p height:=480 -p frequency:=30.0 -p device_id:=-1 -r /image:=/camera/image_raw
打开新终端,启动相机标定节点(标定板的参数需根据自己的实际情况设置):
cd ~/camera_calibration
source install/setup.bash
ros2 run camera_calibration cameracalibrator --size 11x8 --square 0.50 image:=/camera/image_raw camera:=/camera
窗口右侧的 x 对应左右方向的运动,y 对应上下方向的运动,size 对应接近/靠近相机,skew 对应倾斜姿态。
为了得到更好的标定结果,需要在相机视野范围内不断移动棋盘格,直到窗口右侧的 x,y,size,skew
显示条变绿,且 CALIBRATE
按钮变亮后,点击 CALIBRATE
按钮,大概会有一分钟左右的计算时间。
校准完成后,点击 SAVE
按钮保存标定文件,结果保存在 /tmp/calibrationdata.tar.gz 中。
根据标定数据配置单目相机参数
可以将 ORB_SLAM3/Examples/Monocular 文件夹下的 TUM1.yaml 文件复制一份,然后修改复制后的这个文件,这个文件就可以作为你的单目相机的配置参数文件。参数主要修改这些:
解压 /tmp/calibrationdata.tar.gz 压缩包,打开里面的 ost.yaml 文件,camera_matrix 参数下的 data 对应 Camera1 前四个参数,distortion_coefficients 下的 data: [k1 k2 p1 p2 k3] 参数对应 Camera1 后五个参数。对应关系如下图,自行修改即可:
camera_matrix 的 data 参数对应关系: