kalibr标定realsense鱼眼相机

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

博主以 realsense T265做为测试目标,D435i的驱动和T265同样。git

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

添加服务器公钥ubuntu

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

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

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 dom

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图。spa

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

最后便可获得标定数据。