打开roscore和相机
输入:
rostopic echo /camera/color/camera_info //查看相机内参
从而得到相机内参
这里使用了ros自带的标定工具
1、先下载标定工具
//安装包
rosdep install camera_calibration
此处可能会需要update rosdep,如果更新成功就可以顺利安装标定工具,但是也可能遇到更新超时的情况。可以参考以下文章进行改良解决rosdep update失败问题 - 知乎
也可以使用sudo来进行安装(我没有试过),来源如下
ROS系统 摄像头标定camera calibration_ros摄像头标定_飞同学的博客-CSDN博客
sudo apt-get install ros-melodic-camera-calibration
D435i标定_d435标定_awhuter的博客-CSDN博客
2、启动相机,打开话题
//启动相机
roslaunch realsense2_camera rs_camera.launch
rostopic list
//发布的话题名为
/camera/color/camera_info
3、进行标定
11x9,这里使用的是字母"x",不能使用*,11x9是除去最外面的角点后内部的角点的行列数,对于分不清楚行列的,建议生成行列相等的标定板
square 0.03,指的是方格边长3cm
关于image源的选择,我后面使用的是/camera/depth/color/points,也就是点云的话题,但此处不能对点云进行一个内参标定,因为点云实际上是计算得到的,相机获取的是color和depth两种数据,理论上对他们分别进行内参标定就可以。(深度相机的内参是否需要标定,此处我还没有弄明白,明白了再更新)
关于camera源的选择,选的是color的源,不是depth源,原因也很简单,depth看不出角点…………,但是按照1的方法是可以查出depth源的内参的,这个我也不是很明白。
--no-service-check一定记得要加,不加的话camera的源就不对,打不开标定的面板。
rosrun camera_calibration cameracalibrator.py --size 11x9 --square 0.03 image:=/camera/color/image_raw camera:=/camera/color --no-service-check
标定的过程,不断变换位置直到calibrate可以使用。 然后就可以在终端获取内参。可以和1中查看的内参矩阵进行对比。(有一定的差别)
写个python函数即可(单目相机无法反过来转换,下一次会使用imu标定等更工程的方法……明天再写吧我忘的差不多了)