基于动力学前馈加反馈线性化的机器人动力学控制实现

本文介绍了机器人动力学控制的一种方法——前馈加反馈线性化,通过Simulink实现两连杆机械臂的轨迹跟踪。理论部分涉及动力学模型和PID控制,实践部分展示了在模型误差条件下的轨迹跟踪效果,揭示了控制律的局限性,并提出了进一步优化的方向。
摘要由CSDN通过智能技术生成

前言

  本文介绍机器人力矩控制的一种方法——动力学前馈加反馈线性化,将机器人各关节的目标角度、角速度与实际角度、角速度的偏差构成线性误差,并引入到前馈分量中,从而跟踪期望的轨迹。核心内容源于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=01
  通过上式并选取适当的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)dt2
  将(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
  该控制器的框图如下图所示:

图1 控制框图

图1 控制框图

实践

  本文基于simulink实现上述控制率,基于Simcape实现两连杆机械臂的模型搭建,从而完成轨迹跟踪。本文仅对简单的两连杆机械臂的实现,6自由度甚至更高自由度原理近似,有兴趣的读者可尝试去实现,不过高自由度机械臂动力学模型非常复杂,很难直接写出动力学方程表达式,可能需要递归逆运动学算法,其中包括正向迭代和逆向迭代阶段。

2连杆动力学模型

  如图设2连杆的质心分别位于杆的中心处(图中质心为端点处,笔者设为了中心处),m1=m2=1kg,l1=l2=1m,2连杆动力学模型可基于拉格朗日方程推导出,详细推导过程见Modern Robotics第8章第1节,推导出方程为:

在这里插入图片描述

图2 连杆模型

τ = 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 ) ] \begin{aligned} &M(\theta)=\left[\begin{array}{cc} \frac{1}{4} \mathfrak{m}_{1} L_{1}^{2}+\mathfrak{m}_{2}\left(L_{1}^{2}+L_{1} L_{2} \cos \theta_{2}+L_{2}^{2}\right) & \frac{1}{2} \mathfrak{m}_{2}\left(L_{1} L_{2} \cos \theta_{2}+\frac{1}{4} L_{2}^{2}\right)^{-} \\ \frac{1}{2} \mathfrak{m}_{2}\left(L_{1} L_{2} \cos \theta_{2}+\frac{1}{4} L_{2}^{2}\right) & \frac{1}{4} \mathfrak{m}_{2} L_{2}^{2} \end{array}\right.\\ &c(\theta, \dot{\theta})=\left[\begin{array}{c} -\mathbf{m}_{2} L_{1} L_{2} \sin \theta_{2}\left(\dot{\theta}_{1} \dot{\theta}_{2}+\frac{1}{2} \dot{\theta}_{2}^{2}\right) \\ \frac{1}{2} \mathfrak{m}_{2} L_{1} L_{2} \dot{\theta}_{1}^{2} \sin \theta_{2} \end{array}\right]\\ &g(\theta)=\left[\begin{array}{c} \left(\frac{1}{2} \mathfrak{m}_{1}+\mathfrak{m}_{2}\right) L_{1} g \cos \theta_{1}+\frac{1}{2} \mathfrak{m}_{2} g L_{2} \cos \left(\theta_{1}+\theta_{2}\right) \\ \frac{1}{2} \mathfrak{m}_{2} g L_{2} \cos \left(\theta_{1}+\theta_{2}\right) \end{array}\right] \end{aligned} 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)]

Simcape模型搭建

  如图3所示,输入为关节力矩,输出为实时测量的角度、角速度和角加速度
图3 Simcape搭建

图3 Simcape搭建
  实际搭建出的模型如图4所示:

图4 物理模型

图4 物理模型

simulink控制率实现

  图5为simulink的仿真图,联系了各关节的目标角度、角速度、角加速度与实际测得的角度、角速度,并将计算得到的力矩值输入到物理模型中产生所需的运动。

图5 控制率实现

图5 控制率实现

实践结果

  笔者所给的期望角度、角速度、角加速度为 θ d = [ π 10 t − π 10 t ] ; θ d ˙ = [ π 10 − π 10 ] ; θ d ¨ = [ 0 0 ] \theta_d=\left[\begin{array}{c} \frac{\pi}{10} t \\ -\frac{\pi}{10} t \end{array}\right] ; \dot{\theta_d}=\left[\begin{array}{c} \frac{\pi}{10} \\ -\frac{\pi}{10} \end{array}\right] ; \ddot{\theta_d}=\left[\begin{array}{l} 0 \\ 0 \end{array}\right] θd=[10πt10πt];θd˙=[10π10π];θd¨=[00]
  仿真的效果:
图6 动态轨迹追踪过程

图6 动态轨迹追踪过程

  图7为关节1和关节2的角度跟踪:
图7 角度跟踪

图7 角度跟踪

  图8为关节1和关节2的角速度跟踪:
图8 角速度跟踪

图8 角速度跟踪

  图6与图7可看出,该控制率能较好的实现轨迹跟踪。
  为更好的验证该控制律的适用性,故意将动力学模型部分的错误的写成m2=0.9kg,其他不变,图8和图9为非精确模型下的控制效果:
图9 非精确模型下的角度跟踪

图9 非精确模型下的角度跟踪

图10 非精确模型下的角速度跟踪

图10 非精确模型下的角速度跟踪

  可知基本实现了轨迹跟踪,在t=12s附近角度上出现稍许的不稳定,角速度出现了大的浮动,原因有待研究,可见,任何控制率都不是完美的,也希望大家能够一起积极探讨!
但在误差非常大的情况下,比如增大m1的误差,令m1=m2=0.9kg,结果为:
图11 大误差模型下的角度跟踪

图11 大误差模型下的角度跟踪

图12 大误差模型下的角速度跟踪

图12 大误差模型下的角速度跟踪

  此时轨迹跟踪效果欠佳,这个现象说明了此控制率的局限性,但笔者觉得可有更多的挖掘,比如PID增益的调整,欢迎大佬指点和讨论,笔者不胜感激!

展望与思考

  1. PID增益如何较好的设置,或有无动态调整的方法?
  2. 真实的机器人控制器是在离散环境下运算的,离散系统如何仿真并保证稳定性?
  3. 高自由度机器人动力学模型复杂情况下如何仿真?
  4. 真实机器人的动力学控制大多用的什么方法,怎么做到高效且稳定的?
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值