**
基于图像的视觉伺服与基于位置的视觉伺服
**
有关于机械手位姿问题的理解,可以去看我关于机械手正逆运动学分析的文章
首先说,基于图像的视觉伺服与基于位置的视觉伺服主要表现形式在于图像雅可比矩阵的构建及其表现形式。
其实,关于视觉伺服的一些知识,还是有必要了解的。不然文章和方法看了好多,最后还不知道人家用的是基于图像的方法,还是基于位置的方法,这样你会在圈里转,单纯通过数学的方法理解人家给出的雅可比矩阵,我相信在座的各位没几个有那个本事,所以如果是新手,还是建议看完这个。彻底理解这两个概念在去看论文,看代码。
1. 基础知识—视觉伺服的基本思想
------基于视觉的伺服控制方法的目的是最小化一个图像误差,该误差可以定义为:
---------------------------------
e
(
t
)
=
s
(
m
(
t
)
,
a
)
−
s
∗
e(t)=s(m(t),a)-s^{*}
e(t)=s(m(t),a)−s∗ --------------------------- (1)
------式(1)为视觉伺服控制方法的通用形式。其中
m
(
t
)
m(t)
m(t)是一系列的图像特征,如图像点特征、形状特征、位姿特征或频域特征等。
s
(
m
(
t
)
,
a
)
s(m(t),a)
s(m(t),a)表示通过特征
m
(
t
)
m(t)
m(t)与一些额外的系统参数构成的映射函数。将提取的特征
m
(
t
)
m(t)
m(t)映射至目标特征
s
∗
s^{*}
s∗的空间中,并与
s
∗
s^{*}
s∗进行比较,当两者差为零时,即系统误差
e
(
t
)
e(t)
e(t)为零,系统迗到稳定的收敛位置。
------视觉伺服方法的不同主要体现在设计不同的目标图像特征
s
s
s。其中最经典的方法包括基于图像的视觉伺服以及基于位置的视觉伺服。基于图像的视觉伺服方法通过从图像中获取的特征点直接控制机械臂的运动,而基于位置的伺服方法首先通过图像特征点计算目标的位姿,再根据机械臂与目标物体的相对位姿规划运动方案。一旦确定了图像特征
s
s
s的选择,即可确定控制器的设计形式。最筒单的控制方法是设计一个速度控制器来控制机械臂的移动。为了得到图像特征
s
s
s随时间的变化率与摄像机运动速度的关系,设摄像机在摄像机坐标系下的瞬时速度为
v
c
=
(
v
c
,
ω
c
)
\mathbf{\mathbf{}v}_{c}=(v_{c},\omega _{c})
vc=(vc,ωc),其中
v
c
v_{c}
vc为在摄像机坐标系下的瞬时线速度,
ω
c
\omega _{c}
ωc为摄像机坐标系下的瞬时角速度。则图像特征随时间的变化率
s
˙
\dot{s}
s˙与摄像机速度
v
c
\mathbf{\mathbf{}v}_{c}
vc的关系可以表示为:
------------------------------------
s
˙
=
L
s
v
c
\dot{s}=\mathbf{L}_{s}\mathbf{v}_{_{c}}
s˙=Lsvc ---------------------------- (2)
------其中
L
s
∈
R
k
×
6
\mathbf{L}_{s}\in \mathbb{R}^{k\times 6}
Ls∈Rk×6为图像雅克比矩阵。将式(2)代入(1)可得:
-----------------------------------
e
˙
=
L
e
v
c
\dot{e}=\mathbf{L}_{e}\mathbf{v}_{c}
e˙=Levc ---------------------------- (3)
------其中
L
e
=
L
s
\mathbf{L}_{e}=\mathbf{L}_{s}
Le=Ls,考虑将
v
c
\mathbf{v}_{c}
vc作为机械臂速度控制的输入,并保证图像误差的指数型下降,则可以通过对公式(3)中的雅克比矩阵求逆得到:
---------------------------------
v
c
=
−
λ
L
e
+
e
\mathbf{v}_{c}=-\lambda\mathbf{L}_{e}^{+}\mathbf{e}
vc=−λLe+e--------------------(4)
------其中
L
e
+
∈
R
6
×
k
\mathbf{L}_{e}^{+}\in \mathbb{R}^{6\times k}
Le+∈R6×k是
L
e
\mathbf{L}_{e}
Le的伪逆,即当矩阵
L
e
\mathbf{L}_{e}
Le为非方阵或奇异时,
L
e
+
=
(
L
e
T
L
e
)
−
1
L
e
T
\mathbf{L}_{e}^{+}=(\mathbf{L}_{e}^{T}\mathbf{L}_{e})^{-1}\mathbf{L}_{e}^{T}
Le+=(LeTLe)−1LeT。在实际的视觉伺服系统中,在控制阶段的每一时刻获得精确的
L
e
\mathbf{L}_{e}
Le或者
L
e
+
\mathbf{L}_{e}^{+}
Le+是十分困难的。因此需要对图像雅克比矩阵进行估计。因此实际的视觉伺服控制方程应改写为:
---------------------------------
v
c
=
−
λ
L
^
e
+
e
\mathbf{v}_{c}=-\lambda\mathbf{\hat{L}}_{e}^{+}\mathbf{e}
vc=−λL^e+e--------------------(5)
式(5)为视觉伺服控制的基本公式,在此公式的基础上,仅需要考虑三个问题来设计视觉伺服控制的方程:(1)如何选择图像特征
s
s
s。(1)基于图像特征
s
s
s的雅克比矩阵
L
s
\mathbf{L}_{s}
Ls如何推导;(3)
L
^
e
+
e
\mathbf{\hat{L}}_{e}^{+}\mathbf{e}
L^e+e如何估计
好了,这些都是小意思,下面开始讲重点了。
2. 基于图像的视觉伺服
------基于图像的视觉伺服,其误差信号直接用图像特征来定义图象平面坐标(非任务空间坐标)的函数。其基本原理是由该误差信号计算出控制量,并将其变换到机器人运动空间中去,从而驱动机械手向目标运动,完成伺服任务。对于抓取静止目标的任务,该误差仅是机械手图像特征的函数;对于运动目标,误差还是运动目标图像特征的函数。该方法无需估计目标在笛卡儿坐标系中的位姿,减少了计算时延,并可克服摄像机标定误差及关节位置传感器误差对定位精度的影响。然而,为了将图像特征参数的变化同机器人位姿变化联系起来,该方法必须计算图像雅可比矩阵(Image Jacobian Matrix)及其逆矩阵。基于图像的视觉伺服本质上是把伺服任务放在图像特征参数空间中进行描述和控制。
------基于图像的视觉伺服系统的定位精度对摄像机标定误差不敏感。与基于位置的视觉伺服相比, 具有较少的计算量。 文献通过仿真与实验表明, 对于 eye in hand 构型的机器人视觉伺服系统,在存在图像量化误差、摄像机标定误差和图像噪声的情况下,基于图像的伺服方式比基于位置的伺服方式有更好的定位与跟踪效果。
------传统的基于图像的视觉飼服方式使用一系列特征点作为图像控制特征来定义
s
s
s。对图像的测量
m
(
t
)
m(t)
m(t)通常是对应特征点对在图像上的像素距离,而系统参数
a
a
a为摄像机的内参数。基于这祥的设定,可定义在摄像机坐标系下的空间点
X
=
{
X
,
Y
,
Z
}
\mathbf{X}=\left \{ X ,Y,Z\right \}
X={X,Y,Z},它在摄像机二维成像平面上所映射的点为
x
=
{
x
,
y
}
\mathbf{x}=\left \{ x,y\right \}
x={x,y}。则可以得到:
-----------------------------------------------------------------------------------------(6)
------其中
m
=
(
u
,
v
)
m=(u,v)
m=(u,v)表示在图像坐标系下以像素为单位的点,
a
=
{
c
u
,
c
v
,
f
,
α
}
a=\left \{ c_{u} ,c_{v} ,f,\alpha \right \}
a={cu,cv,f,α}为摄像机的内参数。
c
u
c_{u}
cu和
c
u
c_{u}
cu分别表示图像坐标系下光心点的
x
x
x轴方向与
y
y
y轴方向的坐标,
f
f
f表示摄像机的焦距,
α
\alpha
α是摄像机像素长宽比因子。令
s
=
x
=
(
x
,
y
)
s=\mathbf{x}=(x,y)
s=x=(x,y),即以图像坐标系下特征点的坐标作为图像控制特征。对式(6)进行求导有:
--------------------------------------------------------------------------------------------------(7)
-------将三维空间点的速度与摄像机的速度联系起来有:
----------------------------------------------------------------------------------------------------------(8)
将式(8)代入式(7)可整理得到:
-----------------------------------------------------------------------------------------------------------(9)
基于上式的控制方程可写为:
------------------------------------------
x
˙
=
L
x
v
c
\mathbf{\dot{x}}=\mathbf{L_{x}}\mathbf{v_{c}}
x˙=Lxvc----------------------------------------------------------(10)
其中关于图像特征
x
\mathbf{x}
x的图像雅克比矩阵为:
-----------------------------------------------------------------------------------(11)
------在图像雅克比矩阵中,Z的值是特征点在摄像机坐标系下的深度。因此,任何使用基于图像特征点的视觉伺服控制方法均需要对Z进行估计。另一方面,
x
x
x和
y
y
y的计算涉及到了摄像机的内参数,因此不能直接将式(11)代入式(4)形成控制方程,而需要对
x
˙
\mathbf{\dot{x}}
x˙进行估计获得
L
x
^
\hat{\mathbf{L_{x}}}
Lx^
------为了控制机械臂的六个自由度,至少需要三个特征点组成秩为6的图像雅克比矩阵。例如使用特征向量
x
=
(
x
1
,
x
2
,
x
3
)
\mathbf{x}=\left ( x_{1},x_{2}, x_{3}\right )
x=(x1,x2,x3),则可获得图像雅克比矩阵:
------------------------------------------------------------------------(12)
------但在这种情况下,当控制点特征运动到特定位置时图像雅克比矩阵会出现奇异性问题。另外,对于仅依靠3个图像特征点的控制,在这个运动空间中存在4个全局最小值,并且难以相互区分。因此在实际应用中常考虑采用特征点的数目大于3。
------选择好控制特征后,另一个核心问题是如何估计控制方程中的
L
^
e
+
\mathbf{\hat{L}}_{e}^{+}
L^e+,最理想的情况是令
L
^
e
+
=
L
e
+
\mathbf{\hat{L}}_{e}^{+}=\mathbf{L}_{e}^{+}
L^e+=Le+,根据式(11)所得结果,需要在迭代控制过程中的每一步估计当前特征点深度的值Z。但在每次迭代时估计Z的值是十分耗时的方式,因此在设计控制方程时可以选择近似的图像雅克比矩阵。
------常用的雅克比矩阵估计的选择有:(1)
L
^
e
+
=
L
e
∗
+
\mathbf{\hat{L}}_{e}^{+}=\mathbf{L}_{{e}^{*}}^{+}
L^e+=Le∗+其中
L
e
∗
+
\mathbf{L}_{{e}^{*}}^{+}
Le∗+是当机械臂运动到基准位置时
L
e
\mathbf{L}_{e}^{}
Le的值,即
e
=
e
∗
=
0
e=e^{*}=0
e=e∗=0;
L
^
e
+
=
1
/
2
(
L
e
+
L
e
∗
)
+
\mathbf{\hat{L}}_{e}^{+}=1/2{(\mathbf{L_{e}+L_{{e^{*}}}})}^{+}
L^e+=1/2(Le+Le∗)+,虽然这种方法提供了更好的运动轨迹,但由于方程中包含了
L
e
\mathbf{L_{e}}
Le因此需要在每步迭代过程中估计目标特征点的深度信息。
3. 基于位置的视觉伺服
------基于位置的视觉伺服,其反馈信号在三维任务空间中以直角坐标形式定义。基本原理是通过对图像特征的提取,并结合已知的目标几何模型及摄像机模型,三维笛卡尔坐标系中对目标位姿进行估计,然后由机械手当前位姿与目标位姿(这里的目标位姿指的不是目标物体的位姿,而是下一步机械臂末端的期望位姿)之差,进行轨迹规划并计算出控制量,驱动机械手向目标运动,最终实现定位、抓取功能。目前,多数视觉伺服系统采用基于位置的控制方式
------基于位置的视觉伺服控制系统的定位精度在很大程度上依赖于目标位姿的估计精度,但位姿计算与手眼系统参数标定有关,因此要保证这一估计过程的准确度是十分困难的。在某些情况下,基于位置的控制对标定参数误差十分敏感。
------基于位置的视觉伺服方法利用摄像机与物体的相对位姿作为控制特征
s
s
s(该例子以eye in hand为例讲解)。因此控制特征
s
s
s可以参数化的表示为相机相对于目标物体的相对位姿。由于对位姿的估计需要目标物体的三维模型以及相机的内参数,因此基于位置的视觉伺服中的系统参数
a
a
a包含这两个部分。为表述方便,令当前相机坐标系为
F
c
\mathbf{{F}_{c}}
Fc,期望的相机坐标系为
F
c
∗
\mathbf{{F}_{{c}^{*}}}
Fc∗以及与目标物体坐标系为
F
o
\mathbf{{F}_{o}}
Fo。并采用标准的坐标系相关表示法对变换矩阵进行定义。令
c
t
o
_{}^{c}\textrm{t}_{o}
cto与
c
∗
t
o
_{}^{{c}^{*}}\textrm{t}_{o}
c∗to分别表示相对于当前摄像机坐标系与期望的摄像机坐标系下,观测到的目标物体坐标系的平动向量。同时,令
R
=
c
∗
R
c
\mathbf{R}=\mathbf{_{}^{{c^{*}}}\textrm{R}_{c}}
R=c∗Rc表示相机坐标系与基坐标系之间的旋转矩阵。
------在此基准下,可定义
s
=
(
t
,
θ
u
)
\mathbf{s}=\left ( \mathbf{t } ,\mathbf{\theta u }\right )
s=(t,θu)其中
t
\mathbf{t }
t是平移向量,
θ
u
\mathbf{\theta u }
θu是旋转角的参数化表示。若将
t
\mathbf{t }
t定义为相机坐标系对于物体坐标系之间的距离,则
s
=
(
c
t
o
,
θ
u
)
\mathbf{s}=\left ( \mathbf{_{}^{c}\textrm{t}_{o}} ,\mathbf{\theta u }\right )
s=(cto,θu),
s
∗
=
(
c
∗
t
o
,
0
)
\mathbf{s}^{*}=\left ( \mathbf{_{}^{{c}^{*}}\textrm{t}_{o}} ,\mathbf{0}\right )
s∗=(c∗to,0),
e
=
(
c
t
0
−
c
∗
t
0
,
θ
u
)
\mathbf{e= (_{}^{c}\textrm{t}_{0}-_{}^{{c}^{*}}\textrm{t}_{0},\theta u)}
e=(ct0−c∗t0,θu)。关于误差
e
e
e的图像雅克比矩阵可以表示为:
-----------------------------------------------------------------------------------------(13)
其中,
I
3
\mathbf{I}_{3}
I3为3x3单位矩阵则通过罗德里格斯公式推导得到:
--------------------------------------------------------------------------------------------------(14)
------其中,
s
i
n
c
sinc
sinc函数的定义为;
x
s
i
n
c
x
=
s
i
n
x
xsincx=sinx
xsincx=sinx 且
s
i
n
c
0
=
1
sinc0=1
sinc0=1。根据式(4)的形式可得基于位置视觉伺服的控制方程为:
由于图像雅克比矩阵为一个秩为6的方阵,可以直接计算图像雅克比矩阵的逆:
-----------------------------------------------------------------------------------------------------------(15)
由于
L
θ
u
−
1
=
θ
u
\mathbf{L_{\theta u}^{-1}=\theta u}
Lθu−1=θu,因此可以推得线速度与角速度的离散表达形式
------由此可见,视觉伺服技术的核心思想是通过选定一组特定的图像特征,并推导选定的图像特征与摄像机运动速度之间的关系,即图像雅克比矩阵,到图像特征达到基准的状态时,摄像机的运动速度也同时收敛至零,这时机械臂运动到指定的目标位置。基于图像特征点的视觉伺服方法虽然不需要估计目标物体的位姿,仅通过特征点的匹配即可控制相机的移动,但过于依赖特征点的获取,对于低纹理的目标难以适用。基于位置的视觉伺服方法重点在于目标物体位姿识别的一致性,若对不同的图像特征下的目标物体识别出同样的位姿,则会导致基于位置的视觉伺服的失败。
参考文献
[1]Chaumette F , Hutchinson S . Visual servo control, Part I: Basic approaches[J]. IEEE Robotics & Automation Magazine, 2006, 13.