这几天项目需要使用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
最后即可得到标定数据。