自动标定正传
书接上回🧐
眼在手外情况的二维视觉自动标定(一)
回忆之前遗留的两个问题
1直接对应公式写代码会发现缺少旋转中心的世界坐标
2如果中途将带mark点的工具更换为不同的抓取工具,希望通过直接示教抓取点解决
首先在手眼标定中上下左右五点走完之后,回到中心点,正负旋转一定角度得到额外的两点(这两点的世界坐标与中心点一致,因为法兰只旋转了角度,没有位移),然后根据三点的像素坐标拟合圆心得到旋转中心的世界坐标,俯视图大概如下图
图中的
A
,
B
A,B
A,B是老演员了,复习一下,白色小圆代表法兰末端,
A
A
A点代表法兰中心点;黑色大圆表示需要匹配识别的mark标志,
B
B
B点代表mark点的中心点。加入的
W
A
,
W
B
W_A,W_B
WA,WB其实是为了区分像素坐标和世界坐标,
W
A
,
W
B
W_A,W_B
WA,WB分别代表
A
,
B
A,B
A,B两点根据手眼标定转换矩阵计算成的世界坐标,但是此时我们仍不清楚
A
A
A点的像素坐标,所以需要根据
B
,
B
′
,
B
′
′
{B},{B}',{B}''
B,B′,B′′拟合圆心(这部分不会的话可以去搜索引擎转一圈😉)
到这一步就可以忘记
W
A
W_A
WA和
W
B
W_B
WB了,因为
A
,
B
A,B
A,B和
W
A
,
W
B
W_A,W_B
WA,WB的相对关系一致,所以后续只使用
A
A
A和
B
B
B计算,主要是引入太多符号容易混乱
到这里,
A
A
A、
B
B
B以及
α
\alpha
α都有了,代入公式可以得到相对位移
d
x
{dx}
dx和
d
y
{dy}
dy
计算公式如下:(注意全部使用世界坐标)
d
x
=
B
x
−
cos
α
∗
(
B
x
−
A
x
)
−
sin
α
∗
(
B
y
−
A
y
)
+
A
x
dx={{B}_{x}}-\cos \alpha *({{B}_{x}}-{{A}_{x}})-\sin \alpha *({{B}_{y}}-{{A}_{y}})+{{A}_{x}}
dx=Bx−cosα∗(Bx−Ax)−sinα∗(By−Ay)+Ax
d
y
=
B
y
−
cos
α
∗
(
B
y
−
A
y
)
+
sin
α
∗
(
B
x
−
A
x
)
+
A
y
dy={{B}_{y}}-\cos \alpha *({{B}_{y}}-{{A}_{y}})+\sin \alpha *({{B}_{x}}-{{A}_{x}})+{{A}_{y}}
dy=By−cosα∗(By−Ay)+sinα∗(Bx−Ax)+Ay
到这一步,解决了遗留的第一个问题,好耶😆
其实第二个问题才是省时省力的核心方案,更换工具时只需要示教一次抓取点就行,懂不懂什么是工业自动化啊(战术后仰)🤣
仔细想想其实这就是一个针对默认工具计算相对偏移的过程,当拍照匹配到模板,工具1(带mark点)经过旋转中心补偿之后,可以输出世界坐标移动机器人将mark点在对应角度下移动到识别点 C C C,然后更换工具2(实际使用),将工具2末端手动示教到希望的抓取位姿 D D D上,需要考虑的就是 C C C和 D D D之间的相对关系,在角度不断变化的过程中,始终计算出相对位移 d x 1 {dx_1} dx1和 d y 1 {dy_1} dy1能将 C C C移动到 D D D点
或者直接抛掉两个工具的概念,可能更有助于理解,只需要想怎么实现在不同角度下将末端点平移和旋转到一个相对位置就行,例图如下
首先可以借用旋转补偿将
A
A
A移动到
A
′
{A}'
A′,然后根据示教时
C
C
C和
D
D
D之间的相对关系,计算不同相对旋转角度下
A
′
{A}'
A′移动到
A
′
′
{A}''
A′′的补偿
d
x
1
{dx_1}
dx1和
d
y
1
{dy_1}
dy1
因为业余时间有限,只记录了主体实现思路
自己动手丰衣足食😶
完结撒花🤣