相机的内外参
- 内参数 与相机自身特性有关的参数,焦距,像素大小
- 外参数, 相机的位置,旋转方向
为什么要内参标定
- 理想情况下,镜头会将一个三维空间中的直线也映射成直线(即射影变换),但实际上,镜头无法这么完美,通过镜头映射之后,直线会变弯,所以需要相机的畸变参数来描述这种变形效果。
- 理想情况下,相机对x方向和y方向的尺寸的缩小比例是一样的,但实际上,镜头如果不是完美的圆,传感器上的像素如果不是完美的紧密排列的正方形,都可能会导致这两个方向的缩小比例不一致。内参中包含两个参数可以描述这两个方向的缩放比例,不仅可以将用像素数量来衡量的长度转换成三维空间中的用其它单位(比如米)来衡量的长度,也可以表示在x和y方向的尺度变换的不一致性;
- 理想情况下,镜头的光轴(就是通过镜头中心垂直于传感器平面的直线)应该是穿过图像的正中间的,但是,实际由于安装精度的问题,总是存在误差,这种误差需要用内参来描述;
内参矩阵:
fx s x0
K = 0 fy y0
0 0 1
fx, fy为焦距,一般情况下,两者相等, x0,y0为主点坐标,s为坐标轴倾斜参数,理想情况下为0
外参数矩阵:包括旋转和平移矩阵
相机的位姿估计
参考链接:
即像素坐标 Px 乘以深度 zc =相机内参K乘以相机坐标 Pc .
相关链接:
- https://zhuanlan.zhihu.com/p/144307108
- https://www.cnblogs.com/singlex/p/pose_estimation_1.html
内参标定和估计
相关链接:
-
https://learnopencv.com/camera-calibration-using-opencv/
-
https://visp-doc.inria.fr/doxygen/visp-daily/tutorial-calibration-intrinsic.html
-
/home/jialiangfan/visp/build/example/calibration
-
/home/jialiangfan/visp/build/tutorial/grabber
-
mv /home/jialiangfan/visp/build/tutorial/grabber/chessboard-* /home/jialiangfan/visp/build/example/calibration
-
./calibrate-camera default-chessboard.cfg
通过ros_calibration获得较高精度的内参标定
- rosdep install camera_calibration
- 普通相机的话,安装usb-cam工具,realsense也可配置,usbcam的配置方法 为https://blog.csdn.net/qq_27865227/article/details/120975769
- realsense 或者安装 sudo apt-get install ros-kinetic-realsense2-camera,然后运行 roslaunch realsense2_camera rs_camera.launch align_depth:=true
- usb-cam配置下的校对命令:~/ rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.25 image:=/usb_cam/image_raw camera:=/usb_cam
- rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.028 image:=/usb_cam/image_raw
标定好的Realsense D455参数
[[400.50715871 0. 313.03444875]
[ 0. 413.68114326 234.14594096]
[ 0. 0. 1. ]]
opencv 标定Realsense D455参数
cameraMatrix : [392.716970864628, 0, 243.0185503073266;
0, 387.129884776694, 215.7363588792927;
0, 0, 1]
distCoeffs : [0.06146982267847866, -0.05119212933712309, -0.007642430456467396, -0.05887116845433386, 0.009214258584880468]
从realsense本身api获取的结果
p[319.435 241.826] f[380.528 380.19]
ros_calibration 标定结果
390.989992 0.000000 291.088402
0.000000 386.367613 236.286866
0.000000 0.000000 1.000000
distortion -0.030756 0.135162 -0.006918 -0.015546 0.000000
rectification
1.000000 0.000000 0.000000
0.000000 1.000000 0.000000
0.000000 0.000000 1.000000
projection
423.408600 0.000000 285.763055 0.000000
0.000000 418.590729 232.499668 0.000000
0.000000 0.000000 1.000000 0.000000
外参数标定
python camera_calibration_show_extrinsics.py --calibration camera.xml --scale_focal 20
通过对若干个图形的姿态确立,初始坐标一般确定为棋盘左上角,反向求解出相机在初始坐标系下的姿态。
参考链接:https://blog.csdn.net/jiaoyangwm/article/details/97752238
realsense 可视化界面
命令行输入:realsense-viewer
rgb相机 帧率最高 60, 画质424*240,帧率30,画质为640x480
深度相机 帧率最高90, 画质比较低, 画质会随着帧率的升高而降低
Realsense机械臂手眼标定
- 技术介绍 https://blog.csdn.net/yaked/article/details/77161160
- https://editor.csdn.net/md/?not_checkout=1&articleId=128649152
- https://zhuanlan.zhihu.com/p/576861119
手眼标定流程记录:
-
aruco_ros等功能包
-
easy_handeye功能包 Marker id: 6,大小: 5cm
-
改写 easy_hand_eye中的参数
技术教程
- Franka+realsense: https://zhuanlan.zhihu.com/p/576861119
- visp package: http://wiki.ros.org/visp_hand2eye_calibration
- Kinova hand-eye-calibration: https://blog.csdn.net/qq_39367282/article/details/89515338