只要照着这个流程做下来就行了。
当然首先要弄一个棋盘格做标定板,标定图片需要使用标定板在不同位置、不同角度、不同姿态下拍摄,最少需要3张,以10~20张为宜。
有两个独立轴坐标系模组,分别是 :
默认二者在垂直Z方向上在同一平面。
其中,Sb的轴上安装了一个相机,Sa没有相机。
其中,M' 是一个齐次矩阵,是P系到Sb系的变换,待定。
因为上式W值与相机拍照时的Sb轴位置无关,所以:
注意,这里是M'' (two primes),而不是M' (single prime)。M''也是一个齐次矩阵,值待定。
上两式可推得:
其中,M''' (three primes) 也是齐次矩阵,值通过九点标定确定.
可以看出,M'''相当于M''作用于P后,再平移beta,即:
这里,T()是代表平移的齐次矩阵。
以及beta的解法:
其中,A是最后所要求的Sa系的mark目的坐标,B是Sb系相机拍照mark时的实时XY轴坐标,P是相机拍照时所得的实时视觉定位像素坐标。
M''' 是Sb系的相机与轴的九点标定时的(Vision to Motion)的齐次仿射关系矩阵。
M 是 上文所述W到Sa系的齐次仿射关系矩阵。
Beta相当于,九点标定时,当mark位在相机视野相机P(0, 0)上时,拍照位的轴坐标。
先做相机所在模组Sb的相机九点标定,由九个像素坐标和九个对应的Sb轴坐标,得到仿射矩阵M''',令p0=(0, 0), 得到
Beta = M''' . p0,并存储以备用。
有了M'''和Beta,代入公式得到Sb系下的mark坐标表征向量W,多个位置不同的mark得到多个不同的W, 第i个W记为Wi。
使用适当的测量方式,得到Wi对应的Sa系下的坐标Ai,从而得到从W到A的仿射关系矩阵M。
至此,标定过程中的核心参数,M''', M, Beta 均得到了,代入公式,就能求得相机在任意位置B时,拍到的像素坐标为P,该点mark转移到Sa系下后,对应的坐标A了。
该坐标系统不算复杂,我用这个作为例子,是为了展示说明,如何比较严谨的用数学来论证坐标转换关系,尽量避免感性的推导想象。这样可以防止迷失在坐标转换中各种正负号的暴力试错上。
ros单目相机标定为啥xy到不了满格1、相机标定第一步,准备一张标定板,打印出来下载
2、打开相机
利用usb_cam驱动 ,参考ros.wiki.usb_cam因为相机启动时自动检查矫正文件
3、打开矫正窗口
一般来说正常安装ros都是包含了camera_calibration,输入命令检查一下, 之后执行相机矫正py文件,从Damondback版本开始,ROS就支持使用多个标定板来进行标定了,如果你使用多个标定板进行标定,请输入复数个–size和–square参数来说明各个标定板的大小
4、采集样本数据
为了得到一个好的标定结果,应该使得标定板尽量出现在摄像头视野的各个位置里:标定板出现在视野中的左边,右边,上边和下边,标定板既有倾斜的,也有水平的,离得近的远的都要有,最好保证所有的进度条都是绿色满格的 。如果没有的话检查你命令输入是否输入正确,例如:8x6,中间不能用 "*" ,是字母 "x",--size,--square前面是两个"-",还要注意你的相机发出的话题是不是usb_cam/image_raw
y:表示标定板在视野中的上下位置。
size:标定板在占视野的尺寸大小,也可以理解为标定板离摄像头的远近。
skew:标定板在视野上下左右中的倾斜位置。
5、计算矫正参数
点击CALIBRATE按钮,稍等1-2分钟,可以在命令窗中看到标定参数,点击COMMIT将结果保存到电脑路径:/home/sun/.ros/camera_info/head_camera.yaml,再次启动相机时就不会有Camera Calibration文件找不到的警告了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)