WBC学习笔记(二):WBC控制的实际应用
本篇文章主要参考了以下的文章,目的是为了加深自己对WBC公式以及多优先级任务运用的理解。基于零空间方法(NUB)的全身控制(WBC)的简单实现控制系统输入:滑块在轨道上的位置yhy_hyh,机械臂各关节位置 θ=[θ1 θ2 θ3]T\boldsymbol{\theta}=[\theta_1\ \theta_2\ \theta_3]^Tθ=[θ1 θ2 
本篇文章主要参考了以下的文章,目的是为了加深自己对WBC公式以及多优先级任务运用的理解。
基于零空间方法(NUB)的全身控制(WBC)的简单实现
控制系统输入:滑块在轨道上的位置 y h y_h yh,机械臂各关节位置 θ = [ θ 1 θ 2 θ 3 ] T \boldsymbol{\theta}=[\theta_1\ \theta_2\ \theta_3]^T θ=[θ1 θ2 θ3]T。
控制系统输出:机械臂各个关节的速度 θ ˙ \boldsymbol{\dot{\theta}} θ˙。
控制任务1:让机械臂末端位置保持在世界坐标系下点 A = [ 2 0 ] T A=[2 \ 0]^T A=[2 0]T。
控制任务2:让机械臂末端朝向x轴。
1.无优先级的控制方案
(1)末端期望坐标
x
d
=
[
2
−
y
h
0
]
\boldsymbol{x}_{d}=\left[\begin{array}{c} 2 \\ -y_h \\ 0 \end{array}\right]
xd=⎣⎡2−yh0⎦⎤
(2)正运动学求解(末端相对于原点)
x
=
[
x
y
θ
]
=
[
l
1
c
1
+
l
2
c
12
+
l
3
c
123
l
1
s
1
+
l
2
s
12
+
l
3
s
123
θ
1
+
θ
2
+
θ
3
]
\boldsymbol{x}=\left[\begin{array}{l} x \\ y \\ \theta \end{array}\right]=\left[\begin{array}{c} l_{1} c_{1}+l_{2} c_{12}+l_{3} c_{123} \\ l_{1} s_{1}+l_{2} s_{12}+l_{3} s_{123} \\ \theta_{1}+\theta_{2}+\theta_{3} \end{array}\right]
x=⎣⎡xyθ⎦⎤=⎣⎡l1c1+l2c12+l3c123l1s1+l2s12+l3s123θ1+θ2+θ3⎦⎤
(3)求逆
将
l
1
=
l
2
=
l
3
=
1
m
l_1=l_2=l_3=1m
l1=l2=l3=1m代入
x
˙
=
J
θ
˙
↓
J
=
[
−
s
1
−
s
12
−
s
123
−
s
12
−
s
123
−
s
123
c
1
+
c
12
+
c
123
c
12
+
c
123
c
123
1
1
1
]
↓
θ
˙
=
J
†
x
˙
\dot{\boldsymbol{x}}=J\boldsymbol{\dot{\theta}}\\ \downarrow\\ J=\left[\begin{array}{ccc} -s_{1}-s_{12}-s_{123} & -s_{12}-s_{123} & -s_{123} \\ c_{1}+c_{12}+c_{123} & c_{12}+c_{123} & c_{123} \\ 1 & 1 & 1 \end{array}\right]\\ \downarrow\\ \dot{\theta}=J^{\dagger} \dot{\boldsymbol{x}}
x˙=Jθ˙↓J=⎣⎡−s1−s12−s123c1+c12+c1231−s12−s123c12+c1231−s123c1231⎦⎤↓θ˙=J†x˙
伪逆的性质:若
J
J
J有逆,则
J
†
J^{\dagger}
J†是
J
J
J的逆;若
J
J
J没有逆,则
J
†
J^{\dagger}
J†满足
θ
˙
=
J
†
x
˙
\dot{\theta}=J^{\dagger} \dot{\boldsymbol{x}}
θ˙=J†x˙的最小二乘解。
2.带优先级的控制方案
以位置优先级高于方向优先级为例
(1)任务分解
{
r
1
=
[
x
y
]
T
r
2
=
θ
↓
{
r
1
d
=
[
2
−
y
h
]
T
r
2
d
=
0
\left\{\begin{array}{l} \mathbf{r}_{1}=\left[\begin{array}{ll} x & y \end{array}\right]^{T} \\ \mathbf{r}_{2}=\theta \end{array}\right.\\ \downarrow\\ \left\{\begin{array}{l} \mathbf{r}_{1 d}=\left[\begin{array}{ll} 2 & -y_{h} \end{array}\right]^{T} \\ \mathbf{r}_{2 d}=0 \end{array}\right.
{r1=[xy]Tr2=θ↓{r1d=[2−yh]Tr2d=0
(2)雅可比矩阵求解
上面已经得到了矩阵的具体参数值,只需要做分解即可
{
J
1
=
[
−
s
1
−
s
12
−
s
123
−
s
12
−
s
123
−
s
123
c
1
+
c
12
+
c
123
c
12
+
c
123
c
123
]
J
2
=
[
1
1
1
]
\left\{\begin{array}{l} J_{1}=\left[\begin{array}{ccc} -s_{1}-s_{12}-s_{123} & -s_{12}-s_{123} & -s_{123} \\ c_{1}+c_{12}+c_{123} & c_{12}+c_{123} & c_{123} \end{array}\right] \\ J_{2}=\left[\begin{array}{lll} 1 & 1 & 1 \end{array}\right] \end{array}\right.
⎩⎨⎧J1=[−s1−s12−s123c1+c12+c123−s12−s123c12+c123−s123c123]J2=[111]
(3)代入WBC公式
θ
˙
=
J
1
†
r
˙
1
+
(
I
−
J
1
†
J
1
)
J
2
†
r
˙
2
\dot{\theta}=J_{1}^{\dagger} \dot{\mathbf{r}}_{1}+\left(I-J_{1}^{\dagger} J_{1}\right) J_{2}^{\dagger} \dot{\mathbf{r}}_{2}
θ˙=J1†r˙1+(I−J1†J1)J2†r˙2
实际控制中,将得到的速度值输入到关节的控制器中(如PID控制器)对关节电机进行控制即可
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)