参考资料:
一、如何实现机械臂的控制
- 在最常见的对机械臂动力学实现控制的问题中,我们会有一段机械臂末端的期望轨迹S,希望通过对机械臂关节处电机转矩的控制实现末端沿期望轨迹的完美运动。
- 控制问题主要分为镇定和跟踪两种,上面说的沿期望轨迹运动就是跟踪问题,目标点关于时间一直在变化。镇定问题就是目标点不变,只要快准稳的到达指定位置即可。后面的控制问题为了简化问题,都是讨论的镇定问题
- 最常用的机械臂控制框架如下:
被控对象的数学形式就是动力徐模型,即输入力输出加速度,之后通过两次积分得到速度和轨迹,这里没有将两次积分画出,在求误差时根据控制器的需要给出轨迹、速度、加速度全部或者部分的误差 - 关于上面这个图,让我比较疑惑的是工作空间期望轨迹通过逆运动学映射到关节空间期望轨迹这一步。因为这一步是离线的,无法规避运动学模型导致的误差,不知道有没有解决的办法。
- 最常见的机械臂动力学模型形式如下:
二、基础想法
- 面对机械臂控制的问题,比较容易的想法有两种,一种是基于逆动力学模型的开环控制,另一种就是基于误差的反馈控制。
逆动力学控制器
- 逆动力学可以通过关节的运动情况求出关节所需的力,如果我们的动力学模型和驱动器器都是完美的,就可以完成控制。但是,完美的模型和驱动器是不存在的,难免会出现误差。并且由于是开环控制系统,无法对产生的误差进行控制。
独立pid控制器
- 基于误差反馈的控制思路最常见的就是pid,通过期望加速度和实际加速度的差值进行控制
- 机械臂是非线性的时变系统,而pid是定常线性控制器。在pid进行独立控制时,将所有系统关于时间和非线性导致的变化全部认为是干扰,这些干扰的来源包括重力、其他关节速度导致的离心力和科氏力、角度变化导致模型参数的变化、摩擦力等,这导致固定参数的独立pid控制难以适应所有工况。
- 在仿真中,如果假设环境中没有重力,并且其他干扰较小的情况下,独立pid还勉强可以完成工作。
三、基于前馈的pid控制器
- 上面提到的两种方法都没办法很好的解决实际的控制问题,但如果将两种方法结合在一起就可以成为比较实用的方法了。
- 开环无法控制误差,反馈没法适应所有工况,将二者结合前馈+反馈即可分别解决系统变化时所需的控制量和剩余误差
1、基于重力补偿的pid控制器
- 上面提到在假设没有重力时,独立pd可以实现控制,这也说明机械臂姿态变化导致的重力受力情况的变化是较大的干扰量。如果在输出力之前,通过模型对重力进行补偿,则可以解决这一问题。
2、基于模型补偿的pid控制器
- 将重力补偿的思路继续扩展到整个动力学模型,就形成了基于模型补偿的pid控制器
四、基于计算力矩法的pid控制器
1、设计思路
- 前面的方法写出控制器后,都可以在结合被控对象模型后通过李雅普诺夫函数实现稳定判定。但是控制器设计和判定稳定之间没有联系,在设计控制器的过程中,主要源于简单直觉,不够"数学"。
- 计算力矩法的核心就是通过设置控制器,进而将系统(控制器+受控对象)的数学模型变成一个必然稳定的闭环系统,即系统模型的数学形式如下:
这种数学形式是齐次二阶微分方程,在特定的参数情况下,误差e必然指数级快速趋于0
2、控制器设计
- 不考虑模型参数误差
在忽略力矩输出误差情况下,被控对象动力学模型:
在忽略动力学模型参数误差的情况下,控制率如下:
将控制率带入动力学模型:
- 考虑模型参数和控制输出误差
被控对象动力学模型:
控制率如下:
将控制率带入动力学模型:
- 从上式可知,误差和扰动导致控制器性能下降。处理方式有很多,增加鲁棒项(滑模控制)、增加前馈项(rbf不确定性补偿)等