赞
踩
本文介绍机器人力矩控制的一种方法——动力学前馈加反馈线性化,将机器人各关节的目标角度、角速度与实际角度、角速度的偏差构成线性误差,并引入到前馈分量中,从而跟踪期望的轨迹。核心内容源于Modern Robotics这本书的第11章第4节,笔者重在实践该部分理论。
轨迹控制的策略之一是使用机器人的动力学模型来产生力矩,机器人的动力学模型如下:
τ
=
M
~
(
θ
)
θ
¨
+
h
~
(
θ
˙
,
θ
¨
)
\tau = \tilde M(\theta )\ddot \theta + \tilde h(\dot \theta ,\ddot \theta )
τ=M~(θ)θ¨+h~(θ˙,θ¨)
上式中,
τ
\tau
τ为机器人的力矩,当
M
(
θ
)
=
M
~
(
θ
)
M(\theta ) = \tilde M(\theta)
M(θ)=M~(θ)且
h
(
θ
)
=
h
~
(
θ
)
h(\theta ) = \tilde h(\theta)
h(θ)=h~(θ)时,模型是完美的,即机器人的动力学模型是精确的,那么,在没有初始状态误差的前提下,机器人是可以准确的跟踪轨迹的。但在现实中,始终存在建模误差和外界干扰,完全精确的动力学模型是无法获得的。而所有实用的控制器中都使用反馈,所以将前馈控制和反馈一起使用会有更好的效果。
将PID控制与机器人动力学模型结合起来,使其能沿着任何轨迹:
θ
¨
e
+
K
d
θ
˙
e
+
K
p
θ
e
+
K
i
∫
θ
e
(
t
)
d
t
=
0
(
1
)
{\ddot \theta _e} + {K_d}{\dot \theta _e} + {K_p}{\theta _e} + {K_i}\int {{\theta _e}(t)dt = 0} (1)
θ¨e+Kdθ˙e+Kpθe+Ki∫θe(t)dt=0(1)
通过上式并选取适当的PID增益能够确保轨迹误差的指数衰减,由于
θ
¨
e
=
θ
¨
d
−
θ
¨
{\ddot \theta _e} = {\ddot \theta _d} - \ddot \theta
θ¨e=θ¨d−θ¨,其中
θ
¨
e
\ddot \theta _e
θ¨e角加速度误差,为实现误差动力学,为机器人选取如下指令加速度:
θ
¨
=
θ
¨
d
−
θ
¨
e
{\ddot \theta} = {\ddot \theta _d} - \ddot \theta_e
θ¨=θ¨d−θ¨e
代入(1)式中:
θ
¨
=
θ
˙
d
+
K
d
θ
˙
e
+
K
p
θ
e
+
K
i
∫
θ
e
(
t
)
d
t
(
2
)
{\ddot \theta}=\dot \theta _d+ {K_d}{\dot \theta _e} + {K_p}{\theta _e} + {K_i}\int {{\theta _e}(t)dt }(2)
θ¨=θ˙d+Kdθ˙e+Kpθe+Ki∫θe(t)dt(2)
将(2)式代入机器人的动力学模型中,可得到反馈加前馈线性化控制器:
τ
=
M
~
(
θ
)
(
θ
˙
d
+
K
d
θ
˙
e
+
K
p
θ
e
+
K
i
∫
θ
e
(
t
)
d
t
)
+
h
~
(
θ
˙
,
θ
¨
)
(
3
)
\tau = \tilde M(\theta )(\dot \theta _d+ {K_d}{\dot \theta _e} + {K_p}{\theta _e} + {K_i}\int {{\theta _e}(t)dt }) + \tilde h(\dot \theta ,\ddot \theta ) (3)
τ=M~(θ)(θ˙d+Kdθ˙e+Kpθe+Ki∫θe(t)dt)+h~(θ˙,θ¨)(3)
该控制器的框图如下图所示:
本文基于simulink实现上述控制率,基于Simcape实现两连杆机械臂的模型搭建,从而完成轨迹跟踪。本文仅对简单的两连杆机械臂的实现,6自由度甚至更高自由度原理近似,有兴趣的读者可尝试去实现,不过高自由度机械臂动力学模型非常复杂,很难直接写出动力学方程表达式,可能需要递归逆运动学算法,其中包括正向迭代和逆向迭代阶段。
如图设2连杆的质心分别位于杆的中心处(图中质心为端点处,笔者设为了中心处),m1=m2=1kg,l1=l2=1m,2连杆动力学模型可基于拉格朗日方程推导出,详细推导过程见Modern Robotics第8章第1节,推导出方程为:
τ = M ( θ ) θ ¨ + c ( θ , θ ˙ ) + g ( θ ) ⏟ h ( θ , θ ˙ ) \tau=M(\theta) \ddot{\theta}+\underbrace{c(\theta, \dot{\theta})+g(\theta)}_{h(\theta, \dot{\theta})} τ=M(θ)θ¨+h(θ,θ˙) c(θ,θ˙)+g(θ)
M ( θ ) = [ 1 4 m 1 L 1 2 + m 2 ( L 1 2 + L 1 L 2 cos θ 2 + L 2 2 ) 1 2 m 2 ( L 1 L 2 cos θ 2 + 1 4 L 2 2 ) − 1 2 m 2 ( L 1 L 2 cos θ 2 + 1 4 L 2 2 ) 1 4 m 2 L 2 2 c ( θ , θ ˙ ) = [ − m 2 L 1 L 2 sin θ 2 ( θ ˙ 1 θ ˙ 2 + 1 2 θ ˙ 2 2 ) 1 2 m 2 L 1 L 2 θ ˙ 1 2 sin θ 2 ] g ( θ ) = [ ( 1 2 m 1 + m 2 ) L 1 g cos θ 1 + 1 2 m 2 g L 2 cos ( θ 1 + θ 2 ) 1 2 m 2 g L 2 cos ( θ 1 + θ 2 ) ] M(θ)=[14m1L21+m2(L21+L1L2cosθ2+L22)12m2(L1L2cosθ2+14L22)−12m2(L1L2cosθ2+14L22)14m2L22c(θ,˙θ)=[−m2L1L2sinθ2(˙θ1˙θ2+12˙θ22)12m2L1L2˙θ21sinθ2]g(θ)=[(12m1+m2)L1gcosθ1+12m2gL2cos(θ1+θ2)12m2gL2cos(θ1+θ2)] M(θ)=[41m1L12+m2(L12+L1L2cosθ2+L22)21m2(L1L2cosθ2+41L22)21m2(L1L2cosθ2+41L22)−41m2L22c(θ,θ˙)=[−m2L1L2sinθ2(θ˙1θ˙2+21θ˙22)21m2L1L2θ˙12sinθ2]g(θ)=[(21m1+m2)L1gcosθ1+21m2gL2cos(θ1+θ2)21m2gL2cos(θ1+θ2)]
如图3所示,输入为关节力矩,输出为实时测量的角度、角速度和角加速度
图5为simulink的仿真图,联系了各关节的目标角度、角速度、角加速度与实际测得的角度、角速度,并将计算得到的力矩值输入到物理模型中产生所需的运动。
笔者所给的期望角度、角速度、角加速度为
θ
d
=
[
π
10
t
−
π
10
t
]
;
θ
d
˙
=
[
π
10
−
π
10
]
;
θ
d
¨
=
[
0
0
]
\theta_d=\left[π10t−π10t\right] ; \dot{\theta_d}=\left[π10−π10\right] ; \ddot{\theta_d}=\left[00\right]
θd=[10πt−10πt];θd˙=[10π−10π];θd¨=[00]
仿真的效果:
图7为关节1和关节2的角度跟踪:
图8为关节1和关节2的角速度跟踪:
图6与图7可看出,该控制率能较好的实现轨迹跟踪。
为更好的验证该控制律的适用性,故意将动力学模型部分的错误的写成m2=0.9kg,其他不变,图8和图9为非精确模型下的控制效果:
可知基本实现了轨迹跟踪,在t=12s附近角度上出现稍许的不稳定,角速度出现了大的浮动,原因有待研究,可见,任何控制率都不是完美的,也希望大家能够一起积极探讨!
但在误差非常大的情况下,比如增大m1的误差,令m1=m2=0.9kg,结果为:
此时轨迹跟踪效果欠佳,这个现象说明了此控制率的局限性,但笔者觉得可有更多的挖掘,比如PID增益的调整,欢迎大佬指点和讨论,笔者不胜感激!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。