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