kalibr标定realsense鱼眼相机

这几天项目需要使用realsense相机,正好实验室有realsense t265和d435i,在这里介绍一下realsense相机驱动安装和kalibr功能包标定相机的方法。

博主以 realsense T265作为测试目标,D435i的驱动和T265一样。

1.安装ros环境下相机驱动

添加服务器公钥

sudo apt-key adv --keyserver keys.gnupg.net --recv-key C8B3A55A6F3EFCDE || sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key C8B3A55A6F3EFCDE

将服务器添加到存储库列表:

sudo add-apt-repository "deb http://realsense-hw-public.s3.amazonaws.com/Debian/apt-repo xenial main" -u

安装库文件

sudo apt-get install librealsense2-dkms 
sudo apt-get install librealsense2-utils

安装ddynamic_reconfigure 

sudo apt-get install ros-kinetic-ddynamic-reconfigure

创建工作空间 

mkdir -p ~/catkin_ws/src

cd ~/catkin_ws/src/

git clone https://github.com/IntelRealSense/realsense-ros.git 

cd realsense-ros/ 

git checkout `git tag | sort -V | grep -P "^\d+\.\d+\.\d+" | tail -1` 

cd .. 

catkin_init_workspace 

cd .. 

catkin_make clean 

catkin_make -DCATKIN_ENABLE_TESTING=False -DCMAKE_BUILD_TYPE=Release 

catkin_make install echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc source ~/.bashrc

测试realsense T265

roslaunch realsense2_camera rs_t265.launch

打开rviz,订阅topic,观看图像效果,注意离USB远的是1图。

T265会发布如下话题

/camera/odom/sample

/camera/accel/sample /

camera/gyro/sample

/camera/fisheye1/image_raw 

/camera/fisheye2/image_raw

2.标定功能包kalibr

2.1kalibr简介

Kalibr工具箱解决以下标定问题:

(1)多摄像机校准:具有非全局共享重叠视野的摄像机系统的内部和外部校准

(2)视觉惯性校准校准(摄像机-IMU):IMU的空间和时间校准w.r.t相机系统

(3)滚动快门相机校准:滚动快门相机的全内在校准(投影,失真和快门参数)

为了使校准任务更加方便和可重复,可以使用以下工具:

(1)相机对焦:以可重复的方式设置相机对焦的工具

(2)校准验证器:验证工具,用于计算校准摄像机系统在实时ROS图像流上的重投影误差统计

多相机校准

(1)多摄像机校准工具估计多摄像机系统的内部和外部参数,要求相邻摄像机具有重叠的视野。

(2)图像数据作为包含所有相机的图像流的ROS包提供。 校准程序将遍历所有图像并基于信息理论测量选择图像,以便获得对系统参数的良好估计。

(3)投影和失真模型的任意组合可以在一次校准运行中组合。 查看“支持的模型”页面以获取可用模型的列表。

2.2 编译功能包

mkdir -p kalibr_workspace/src 

cd kalibr_workspace/src 

catkin_init_work 

git clone https://github.com/ethz-asl/Kalibr.git cd kalibr_workspace 

catkin_make

此处等待半个小时。。。。。功能包作者说去喝个咖啡再回来0.0

2.3使用功能包

博主只标定的相机,没有标定realsense 中的 IMU,所以只介绍标定相机的方法,如果想要一起标定请参考官方教程

第一步:标定之前先要准备一块标定板,并记录其参数,博主用的是棋盘标定板(某宝买的GP340 12*9),参数如下:

target_type: 'checkerboard' #gridtype
targetCols: 8               #number of internal chessboard corners
targetRows: 11               #number of internal chessboard corners
rowSpacingMeters: 0.025      #size of one chessboard square [m]
colSpacingMeters: 0.025      #size of one chessboard square [m]

第二步:录制功能包

录制之前先按照上述方法启动运行相机的launch文件,但是官方建议频率最好为4HZ,可是realsense不支持在launch文件中修改频率为4HZ,否则启动不了节点,因此此处用到ROS中的throttle,他可以更改topic发布频率,我们把相机话题的发布频率更改为4HZ即可。

ROS中的throttle使用方法:

rosrun topic_tools throttle messages [outtopic]

可见前面的rosrun topic_tools throttle messages 是指我使用的是throttle 下面的messages模式,其中 intopic是指你想要改变频率的那个topic,msgs_per_sec是指你想要它发布的频率,而outtopic是指改变发布频率后的topic的名称,可以省略,如果省略则自动在原来topic的名字上后缀throttle。

更改相机发布话题频率:

rosrun topic_tools throttle messages /camera/fisheye1/image_raw 4.0 /image_raw1_th
rosrun topic_tools throttle messages /camera/fisheye2/image_raw 4.0 /image_raw2_th

然后录制rosbag

rosbag record -o fisheye.bag /image_raw1_th /image_raw2_th 

(realsense T265 是双目鱼眼相机,所以会产生两个topic)

第三步:标定相机

这里涉及到鱼眼相机投影模型,在vins-mono中使用的是球形投影,先是把成像点投影到归一化球面上,然后在投影到平面上,由于依然假设满足径像畸变和切向畸变,所以在这里投影模型选择omni-radtan.

kalibr_calibrate_cameras --target src/kalibr/checkerboard.yaml --bag src/kalibr/bag/fisheye_2019-07-15-21-52-12.bag --models omni-radtan omni-radtan --topics /image_raw1_th /image_raw2_th

最后即可得到标定数据。

猜你喜欢

转载自blog.csdn.net/HUST_lc/article/details/96144499