机器守门员-控制

 

终于到了软件最后一部分: 控制

在这个场景下, 控制的目的是让守门员以最快的速度到达目标角度, 且尽量没有过冲(打到地上会大幅降低挡板的寿命)。 控制的指标有了, 那么接下来就设计控制器结构吧。

我购买的伺服电机驱动器有三种控制接口, 分别是角度控制、 速度控制、 扭矩控制。 能不能省点事, 直接使用伺服驱动的角度控制接口直接进行控制呢?  答案是不行, 因为伺服电机的编码器并不反馈守门员的绝对角度, 而是代表着走过的相对距离。 因此为了做位置控制, 我使用了一个角位移传感器装在转轴上, 这个角位移传感器的原理类似于旋转电位器, 旋转到不同角度, 输出的电压不同。 利用这个角度传感器, 重新设计角度控制器反馈回路, 输出期望速度给伺服驱动器是否能够满足要求呢? 可能可以, 我们试试看:

效果怎么样呢? 看看:

我没有打波形图出来, 但是目测很不错, 装上个短杆试试看:

非常快速, 没有什么抖动, 和空载看起来一样。 那么是不是意味着我们只做一个位置环的控制就可以解决问题了?  接下来我们来试试带完整负载, 看看系统是否照常工作?

抖动了, 而且是多次, 巨大的抖动(还是在我做了一些处理技巧后的效果)。这样会造成守门员挡板寿命减少, 并且回弹会让一些低平球漏入门中。 视频中的效果大大的落后于我们的设计指标(快速, 抖动小), 因此我们就需要分析一下问题处在哪里了, 为什么板子边长变重以后就会加剧抖动呢?

我们来详细分析一下这个运动模型:

´利用欧拉拉格朗日方程对该转动机构进行模型分析,得到模型如下:

最下面的一个式子就是我们的旋转模型。 这个代表什么意思呢? 等式的右边是外接输入的扭矩, 也就是电机施加给守门员板的扭矩, 等式的左边第一项是一个常数乘上角加速度(角度的二阶导), 第二项是一个常数乘以sin(角度), 实际上就是重力产生的扭矩。  一句话描述: 角加速度和(电机扭矩以及重力产生的扭矩的合扭矩)成正比。 听起来很像牛顿第二定律不是么, 其实他们之间有很多相似之处。

从这个式子能看出什么呢? 能不能解释上面的现象(空载, 短杆正常运行, 带完全负载时抖动)呢? 秘密就在重力产生的扭矩那一项。 电机能够产生的扭矩远远大于重力能够产生的扭矩时, 角加速度和电机扭矩成近似的线性关系。 当重力能产生的扭矩和电机能产生的扭矩在同一个数量级的时候, 电机就显得力不从心了。

这是不是意味着该换个扭矩更大的电机? 或者用个减速比更大的减速机? 其实不需要。 重力做功的的方向实际上是和我们扑救的方向相同的, 是帮助我们加速的, 只要利用好重力, 我们可以更快的达到目标点。 那怎么解决抖动的问题呢?

抖动源于非线性项增大, 只需要减小非线性项即可。 也就是说, 只需要在控制器中增加前馈去抵消非线性项, 就能够将系统线性化, 达到之前的效果。 这就要求我们对扭矩直接进行操作, 放弃之前使用的速度控制环。 而这就是开头那幅框图的用意。

为了说的更清楚, 我用matlab仿真一下这个系统, 然后将动态的响应打出来看一看。

简单的根据之前的方程搭建一个simulink模型, 做一个速度环, 将负载的长度和重量取0.5m, 0.4kg, 类似之前的轻载, 并将扭矩输出最大值限为171N.m(电机与减速机过载极限值), 大致调校PI参数, 得到一个比较好的控制效果。

响应很快, 没有什么抖振, 很快达到目标速度。 我们将负载扩大一倍, 看看什么效果。

和预想的一样, 全负载下的震荡出现了。 速度环的这种震荡最终也会影响到位置环, 出现之前的抖动现象。

接下来, 同样的限制下, 增加一个前馈, 看是否能够抵消震荡。

刻意给前馈项算的不准确, 看看效果如何:

好多了! 震荡大幅减小, 通过调节前馈的参数可以获得更加理想的效果。 那么这样一来, 抖动的问题就能够解决了。

That’s it, 最终的控制框图。 非线性串级PID完美解决我们的问题。

当然, 除了非线性串级PID, 也可以使用反馈线性化, backstepping等非线形控制方法来实现同样的效果。 不过既然此场景的非线性项如此明确, 就使用串级PID是最简单快捷的。 没有最牛的方法, 只有最适合的方法。

说点什么

avatar
  Subscribe  
提醒
error: Content is protected !!