Modern Robotics机器人的构型空间
机器人的构型(configuration)是一个机器人所有点的位置。描述机器人构型的最小实数坐标的个数n是机器人的自由度的数目。这个n维空间包括着机器人所有可能的构型(configurations)称为机器人的构型空间(configuration space,C-space)。机器人的构型可以由它的构型空间里的一个点描述。
机器人的自由度
机器人常见的关节如下图所示
旋转关节(revolute joint,R),平移关节(prismatic joint,P),螺旋关节(Helical joint,H)都是只有一个自由度。关节也可以有多个自由度,例如圆柱关节(cylindrical joint ,C)有两个自由度,万向节(Universal joint,U)有两个自由度,球形关节(spherical joint,S)有三个关节,其功能与人体的肩关节很像。
G r u ¨ b l e r ′ s Gr\ddot {\text u}bler's Gru¨bler′s公式
考察一个又
N
N
N个连杆构成的机械系统,地面也看做一个连杆。假设
J
J
J是关节的数量,
m
m
m是刚体的自由度(对于平面刚体
m
=
3
m=3
m=3,对于空间刚体
m
=
6
m=6
m=6),
f
i
f_i
fi为第
i
i
i个关节具有的自由度数目,
c
i
c_i
ci是第
i
i
i个关节具有的约束数目,这里对所有
i
i
i都有
f
i
+
c
i
=
m
f_i+c_i=m
fi+ci=m。那么
G
r
u
¨
b
l
e
r
′
s
Gr\ddot {\text u}bler's
Gru¨bler′s计算机器人的自由度数目为
d
o
f
=
m
(
N
−
1
)
−
∑
i
=
1
J
c
i
=
m
(
N
−
1
)
−
∑
i
=
1
J
(
m
−
f
i
)
=
m
(
N
−
1
−
J
)
+
∑
i
=
1
J
f
i
(2.4)
dof=m(N-1)-\sum_{i=1}^J c_i\\ =m(N-1)-\sum_{i=1}^J (m-f_i)\\ =m(N-1-J)+\sum_{i=1}^J f_i \tag{2.4}
dof=m(N−1)−i=1∑Jci=m(N−1)−i=1∑J(m−fi)=m(N−1−J)+i=1∑Jfi(2.4)
这个公式成立的条件是所有的关节约束是独立的。
下面是计算该公式的C语言模块。
/**
*@brief Description:使用GrublersFormula公式计算机构的自由度.
*@param[in] N 连杆的数目(包括大地).
*@param[in] m 连杆(刚体)的自由度(平面刚体m=3,空间刚体m=6).
*@param[in] J 关节的数量.
*@param[in] f 数组,每个关节的自由度.
*@return 返回输入该机构的自由度.
*@note: 各个关节的约束是独立的才能使用该函数计算机构的自由度.
*@waring:
*/
int GrublersFormula(int m, int N, int J, int *f)
{
int i;
int dof;
int c = 0;
for (i=1;i<=J;i++)
{
//计算自由度的约束
c = c + f[i-1];
}
dof = m*(N - 1 - J) + c;
return dof;
}
Example 2.4使用 G r u ¨ b l e r ′ s Gr\ddot {\text u}bler's Gru¨bler′s公式计算下面的平面机构自由度
这些连杆是平面刚体,因此m=3
(a) d o f = 3 ∗ ( 5 − 1 − 4 ) + 4 = 4 dof=3*(5-1-4)+4=4 dof=3∗(5−1−4)+4=4
(b) d o f = 3 ∗ ( 5 − 1 − 5 ) + 5 = 2 dof=3*(5-1-5)+5=2 dof=3∗(5−1−5)+5=2
© d o f = 3 ∗ ( 6 − 1 − 7 ) + 7 = 1 dof=3*(6-1-7)+7=1 dof=3∗(6−1−7)+7=1
(d) d o f = 3 ∗ ( 6 − 1 − 7 ) + 7 = 1 dof=3*(6-1-7)+7=1 dof=3∗(6−1−7)+7=1
Example2.5 计算如下图有重叠关节的平面机构自由度。
大连杆左端三个连杆连接于一点,可以各自转动。关节的定义为两个连杆的连接,因此这不能算作一个关节,而是两个关节。因此自由度为
d
o
f
=
3
∗
(
8
−
1
−
9
)
+
9
=
3
dof=3*(8-1-9)+9=3
dof=3∗(8−1−9)+9=3
构型空间拓扑
一个点在球面上运动,这个点的构型空间(C-space)是2维的,因为可以用两个坐标表示,纬度和经度。一个点在平面上运动,具有一个2维构型空间(C-space),有坐标(x,y)。一个平面和一个球面都是2维,但是它们的形状不同,平面无限延伸,而球面互相连在一起。一个椭圆的美国足球与球面有类似的形状,它们具有相等的拓扑。例如一条线段可以把它弯曲成一个开口的半圆,一个开口的半圆也可以直为一条线段,因此它们由相等的拓扑结构。不那么严格地,如果一个空间可以不进行粘合或剪切,通过连续变形得到另一个空间,我们说这两个空间具有相等的拓扑。
圆数学上写为 S S S或$ S^1 , 是 1 维 “ 球 ” , 直 线 写 为 ,是1维“球”,直线写为 ,是1维“球”,直线写为\mathbb E 或 或 或\mathbb E^1 , 意 味 1 维 欧 拉 空 间 , 因 为 一 个 点 在 ,意味1维欧拉空间,因为一个点在 ,意味1维欧拉空间,因为一个点在\mathbb E^1 上 可 以 写 成 一 个 实 数 , 因 此 通 常 写 为 上可以写成一个实数,因此通常写为 上可以写成一个实数,因此通常写为\mathbb R 或 或 或\mathbb R^1$。
拓扑是空间的属性,与我们选择则怎样的坐标来描述是无关的。例如一个圆,确定一个零角度后,可以选择一个角度 θ \theta θ来描述,也可以在圆心建立一个坐标系,用坐标(x,y)和约束 x 2 + y 2 = 1 x^2+y^2=1 x2+y2=1.无论选择怎样的坐标来描述,该空间没有发生改变。
一些C-space可以表示成两个或多个低维的笛卡尔积。例如一个平面刚体的C-space可以写成 R 2 × S 1 \mathbb R^2\times S^1 R2×S1,因为其构型可以用坐标(x,y)表示 R 2 \mathbb R^2 R2,一个角度 θ \theta θ表示 S 1 S^1 S1,这两个坐标串在一起表示刚体构型。
构型空间表示
如下图是四个拓扑不同的二维C-space及表示
选择 n n n个坐标或参数表示一个 n n n维空间叫做空间的显式参数化。
使用纬度和经度两个坐标表示球面,在两个极点会出现奇异。解决奇异的方法有:
- 使用多个坐标图表示该空间。每个坐标图只是空间一部分的显式参数化,在每个坐标图都没有奇异性。多个坐标图重叠覆盖要表示的空间,当在某个坐标图出现奇异时,切换到另一个坐标图表示。
- 使用隐式表示而不是显式参数化。一个隐式表示把 n n n维空间看成是内含与大于n维的空间的欧拉空间。例如2维球面可以看成是包含于3维欧拉空间的一个面。一个隐式表示使用的坐标数高于该空间的维度,当需要约束冗余的自由度。例如使用 ( x , y , z ) (x,y,z) (x,y,z)和一个约束 x 2 + y 2 + z 2 = 1 x^2+y^2+z^2=1 x2+y2+z2=1表示单位球面。
在机器人学里通常使用隐式表示,例如使用9个数值,6个约束,表示刚体在空间的3个方向自由度,该表示称旋转矩阵.
构型和速度约束
一般的机器人包含一个或多个闭环,构型空间可以通过一个列向量
θ
=
[
θ
1
,
.
.
.
,
θ
2
]
T
∈
R
2
\mathbf \theta=[\theta _1,...,\theta_2]^T\in\mathbb R^2
θ=[θ1,...,θ2]T∈R2和闭环方程隐式表示
g
(
θ
)
=
[
g
1
(
θ
1
,
.
.
.
,
θ
n
)
⋮
g
k
(
θ
1
,
.
.
.
,
θ
n
)
]
=
0
,
(2.5)
g(\mathbf \theta)= \left [ \begin{matrix} g_1(\theta_1,...,\theta_n)\\ \vdots\\ g_k(\theta_1,...,\theta_n)\\ \end{matrix}\right] =0,\tag{2.5}
g(θ)=⎣⎢⎡g1(θ1,...,θn)⋮gk(θ1,...,θn)⎦⎥⎤=0,(2.5)
闭环方程是
k
k
k个独立的方程,
k
≤
n
k\le n
k≤n.这样的约束称为完整约束(holomomic contraints).C-space可以看成一个包含于
R
n
\mathbb R^n
Rn中的
n
−
k
n-k
n−k维的面.
假设
θ
\theta
θ是关于时间的轨迹,两边求导有
d
d
t
g
(
θ
(
t
)
)
=
0
(2.6)
\frac{d}{dt}g(\mathbf \theta (t))=0\tag{2.6}
dtdg(θ(t))=0(2.6)
因此
[
∂
g
1
(
θ
)
∂
θ
1
θ
˙
1
+
.
.
.
+
∂
g
1
(
θ
)
∂
θ
n
θ
˙
n
⋮
∂
g
k
(
θ
)
∂
θ
1
θ
˙
1
+
.
.
.
+
∂
g
k
(
θ
)
∂
θ
n
θ
˙
n
]
=
0
\left [ \begin{matrix} \frac{\partial g_1 (\theta)}{\partial \theta _1}\dot \theta _1+...+\frac{\partial g_1 (\theta)}{\partial \theta _n}\dot \theta _n\\ \vdots\\ \frac{\partial g_k (\theta)}{\partial \theta _1}\dot \theta _1+...+\frac{\partial g_k (\theta)}{\partial \theta _n}\dot \theta _n\\ \end{matrix}\right] =0
⎣⎢⎢⎡∂θ1∂g1(θ)θ˙1+...+∂θn∂g1(θ)θ˙n⋮∂θ1∂gk(θ)θ˙1+...+∂θn∂gk(θ)θ˙n⎦⎥⎥⎤=0
即
[
∂
g
1
(
θ
)
∂
θ
1
θ
˙
1
…
∂
g
1
(
θ
)
∂
θ
n
θ
˙
n
⋮
⋱
⋮
∂
g
k
(
θ
)
∂
θ
1
θ
˙
1
…
∂
g
k
(
θ
)
∂
θ
n
θ
˙
n
]
[
θ
˙
1
⋮
θ
˙
n
]
=
0
\left [ \begin{matrix} \frac{\partial g_1 (\theta)}{\partial \theta _1}\dot \theta _1& \dots & \frac{\partial g_1 (\theta)}{\partial \theta _n}\dot \theta _n \\ \vdots & \ddots &\vdots \\ \frac{\partial g_k (\theta)}{\partial \theta _1}\dot \theta _1& \dots & \frac{\partial g_k (\theta)}{\partial \theta _n}\dot \theta _n\\ \end{matrix}\right] \left [ \begin{matrix} \dot \theta_1\\ \vdots \\ \dot \theta_n\\ \end{matrix}\right] =0
⎣⎢⎢⎡∂θ1∂g1(θ)θ˙1⋮∂θ1∂gk(θ)θ˙1…⋱…∂θn∂g1(θ)θ˙n⋮∂θn∂gk(θ)θ˙n⎦⎥⎥⎤⎣⎢⎡θ˙1⋮θ˙n⎦⎥⎤=0
可以继续写成
∂
g
(
θ
)
∂
θ
θ
˙
=
0
(2.7)
\frac{\partial g(\theta)}{\partial \theta}\dot \theta=0\tag{2.7}
∂θ∂g(θ)θ˙=0(2.7)
这里
∂
g
(
θ
)
∂
θ
∈
R
k
×
n
\frac{\partial g(\theta)}{\partial \theta}\in\mathbb R^{k\times n}
∂θ∂g(θ)∈Rk×n,
θ
,
θ
˙
∈
R
n
\theta,\dot {\theta}\in \mathbb R^n
θ,θ˙∈Rn,又可以写成
A
(
θ
)
θ
˙
=
0
(2.8)
A(\mathbf \theta)\dot \theta=0 \tag{2.8}
A(θ)θ˙=0(2.8)
这里
A
(
θ
)
∈
R
k
×
n
A(\theta)\in\mathbb R^{k\times n}
A(θ)∈Rk×n.速度的这种约束形式称为Pfaffian约束。
g
(
θ
)
g(\theta)
g(θ)可以由
A
(
θ
)
A(\theta)
A(θ)积分得到,因此完整约束
g
(
θ
)
g(\theta)
g(θ)又称为积分约束–速度约束可以积分得到构型约束。对于不能通过速度约束积分得到构型约束的Pfaffian约束称为非完整约束.
任务空间和工作空间
机器人的任务空间是机器人任务自然表达的一个空间(与机器人的构型空间无关)。机器人的工作空间是机器人末端能够到达的构型。
小结
- 一个机器人由一系列关节连接的连杆构成。连杆通常建模为刚体。末端执行器,例如抓手常常会固定到机器人的连杆上。驱动器传递力或扭矩给关节,驱动机器人运动。
- 最常用的单自由度关节是旋转关节,可以绕关节轴线转动,以及平移关节,可以沿关节轴线平移。圆柱关节有两个自由度,由一个旋转关节和移动关节串联组成,万向节由两个正交的旋转关节组成,球形关节有三个自由度,其功能与人的肩关节相似。
- 一个刚体的构型其所有点的位置。在平面运动的刚体,需要3个独立参数表示其构型。在空间运动的刚体需要6个参数表示其构型。
- 一个机器人的构型是其所有连杆的构型。机器人的构型空间是其一系列所有可能的构型。机器人构型空间的维数是其自由度数目。
- 机器人自由度数目可以通过 G r u ¨ b l e r ′ s Gr\ddot ubler's Gru¨bler′s公式计算
dof = m ( N − 1 − J ) + ∑ i = 1 J f i \text {dof}=m(N-1-J)+\sum _{i=1}^J f_i dof=m(N−1−J)+i=1∑Jfi
对于平面机构 m = 3 m=3 m=3,空间机构 m = 6 m=6 m=6, N N N是连杆的数目(包括地面连杆), J J J是关节数目, f i f_i fi是第 i i i个关节的自由度数目。如果关节的约束不是相互独立, G r u ¨ b l e r ′ s Gr\ddot ubler's Gru¨bler′s提供的是自由度数目的一个下界。
- 机器人的C-space可以显式参数化或隐式参数化。对于 n n n个自由度的机器人,显示参数化至少使用 n n n个坐标,隐式表示则需要 m m m个坐标, m ≥ n m\ge n m≥n,这 m m m个坐标受 m − n m-n m−n个约束方程约束。使用隐式表示,机器人的C-space可以看做是包含于高维数的 m m m维空间的一个 n n n维表面。
- n n n个自由度的机器人的C-space,结构的一个或多个闭环约束,可以隐式地使用 k k k个闭环方程表示,其形如 g ( θ ) = 0 g(\theta)=0 g(θ)=0, θ ∈ R m \theta \in\mathbb R^m θ∈Rm,且 g : R m → R k g:\mathbb R^m\to \mathbb R^k g:Rm→Rk。这样的约束方程称为完整约束。假设 θ \theta θ随时间 t t t变化,完整约束 g ( θ ( t ) ) g(\theta(t)) g(θ(t))对 t t t微分得到
∂ g ( θ ) ∂ θ θ ˙ = 0 , \frac{\partial g(\theta)}{\partial \theta}\dot \theta=0, ∂θ∂g(θ)θ˙=0,
这里 ∂ g ( θ ) / ∂ θ \partial g(\theta)/\partial \theta ∂g(θ)/∂θ是 k × m k\times m k×m的矩阵。
- 机器人的运动可以通过速度约束的形式表示
A ( θ ) θ ˙ = 0 , A(\theta)\dot \theta =0, A(θ)θ˙=0,
这
A
(
θ
)
A(\theta)
A(θ)是
k
×
m
k\times m
k×m矩阵,不能表示为某个函数
g
(
θ
)
g(\theta)
g(θ)的导数,即不存在a任何的
g
(
θ
)
,
g
:
R
m
→
R
k
g(\theta),g:\mathbb R^m \to R^k
g(θ),g:Rm→Rk,使得
A
(
θ
)
=
∂
g
(
θ
)
∂
θ
.
A(\theta)=\frac{\partial g(\theta)}{\partial \theta}.
A(θ)=∂θ∂g(θ).
这样的约束称为非完整约束,或不可积约束。这些约束减少可行速度的维度,单数不会减少可达C-space的维度。在动量守恒或滚动而不滑动的机器人系统中会出现非完整约束。
- 机器人的任务空间是机器人任务自然表达的一个空间(与机器人的构型空间无关)。机器人的工作空间是机器人末端能够到达的构型。
参考文献
Kenvin M. Lynch , Frank C. Park, Modern Robotics Mechanics,Planning , and Control. May 3, 2017