嘿!您似乎在 United States,您想使用我们的 English 网站吗?
Switch to English site
Skip to main content

给您的机器人装上真正的火星探测器上使用的移动控制:第 1 部分

机器人,尤其是轮式机器人,可分为两种:一种完全通过感应并躲避障碍物行驶,另一种通过内部电子地图沿着既定路线行驶。多数“业余”移动机器人基本仅凭借障碍物感应进行移动。这是一种有些过于简单化的应用,如此设计的原因是认为四处移动、躲避事物比沿着预定路线行驶有趣得多(同时也简单得多)!

移动控制

一个“专业”机器人,例如火星探测器 Curiosity,则需要精准导航,同时还要躲避大型石块和小型凹坑。

Mars_rover1_6cf614bb787b064157b411df30c3f60a33383cde.jpg

如需了解移动控制硬件/软件可能达到的复杂程度,请阅读这篇介绍 Curiosity 的前款探测器所使用的移动系统的论文《火星探险漫游者的机遇与精神》。论文第 3 页中的图 2 以方框的形式描述了基本导航系统:本文以及下一篇文章将介绍方框重点标注的 MOT 中的内容,以及基于 PID 算法的导航功能用于地球上行驶的机器人的方法以及可用的原因。

PID 控制

PID 控制的基本原理简单易懂,并可用于任何内含机电执行器(例如电机),并且需要以设定速度行驶或移动至准确位置的系统。所需的额外硬件包括一个可探测实际速度或执行器位置的传感器,以及一个可运行控制算法的处理器单元。处理器将对比理想机械输出(设定值)和感测的实际值,然后生成修正控制信号来消除任何差异(误差)。尽管如此,这种算法并不仅限于移动系统:它还完全适用于工业化学过程中的精确温度控制,或确保水槽中的液体保持在特定的液位。这里我只涉及电机的控制。

我的小型机器人为何需要移动控制呢?

业余机器人经常采用“轻量小车”的式样,底盘两侧各有一只独立驱动的轮子,并且在一端或两端装有脚轮。考虑这种最基本的要求:这种机器人需要沿着绝对直线行驶一段距离。听起来相当容易,不是吗?然而为实现这一点,必须满足两点要求:

  1. 两只轮子转动的速度必须完全相等,并且
  2. 两只轮子上必须都装有传感器,用于提供已行驶距离数据

满足要求 (1) 并不容易,因为两台看似相同的电机在输入相等的情况下,转动速度将稍有不同。如果是这样,您的机器人将沿渐变弧线行驶,而非直线。这就是为什么我们需要闭环控制的车轮转动传感器提供反馈的原因。对于我们的小车来说,每个轮子都需要独立的闭环。幸运的是,装在轮子上的传感器还能提供相关信息,支持各车轮行驶距离的计算,从而满足要求 (2)。

PID 控制理论

PID 表示比例、积分、微分,分别代表用于闭环控制系统的误差反馈信号的三种计算方法,从而得出消除误差所需的系数。让我们来看看该算法的微分/积分方程:

PID_blog_2_b76b5cf1bf8d4f3fe24b3cf187f54756dadf95e0.png

其中第一项为比例反馈分量,第二项为积分分量,第三项是微分分量。e(t) 是理想输出(设定值)与实际输出之间偏差。c(t) 是校正后的执行器控制输出。

使用全部三项的闭环控制系统如图所示 ( 1):

PID_blog_11_32080f6d05e05ec5ab9d7d53fe229585b8fe0934.png

就我的移动机器人而言,执行器是连续转动伺服电机,而传感器则是反射式红外线感应装置,利用车轮的割缝进行工作。这类传感器通常称为转速计,能通过变量脉冲序列反馈出实际的车轮转速数据:转速越高,脉冲频率越快。控制程序代码将对比实际转速和理想值(设定值),两者之差即为 PID 算法中的误差输入 e(t)。结果是控制输出 c(t) 推动电机使误差缩小至零(最终)。三个常数 KP、KI 和 KD 通常先给定估值(猜测值),然后在模拟程序或实际系统硬件上进行优化,此过程称为“调校”。

PID 控制实际操作

好了,我相信大家并不期待进行实时运行的积分和微分编程。幸运的是,大家无需惊慌,因为以上公式适用于连续时间,而“数字”应用意味着我们处理的是离散时间采样数据。更棒的是,根据所需的控制“精度”,可以省去 I 和 D 项中的一个或两个!为了确定特定任务所需的完整 PID 算法控制项数量,必须先了解各控制项的作用。

比例(或增益)控制项

P 项是必须使用的,也是最容易理解和实施的控制项:它的作用是使控制信号与测定误差形成比例关系,比例大小由 KP 决定。因此 KP < 1。那么为何不使 KP= 1,从而立即消除所有误差呢?原因是电子装置可将误差信息转换为校正后的控制信息,且速度远超机械系统的响应速度。结果可能造成持续振荡,电机先加速再减速。这也是为什么每个周期间隔内都要反馈一定比例的误差,使速度缓慢达到设定值的原因。另一方面,如果反馈值太小,那么从启动到达到一定速度需要花费很长的时间。因此对于离散时间系统:

CP(n) = KP x E(n)

请注意,控制信号与误差将同时减小至零,在一定程度上会弄巧成拙。有两种方法可以解决这个问题。第一种是通过“开环”运行硬件,找出理想设定速度所需的控制输入量,然后在以上方程式中以常数形式加入此“参考”值。第二种选择是加入以下描述的积分项,该控制项将自动达到目标值。

积分(或复位)控制项

误差信号的积分在时间间隔 t 内的累积误差上增加一个数值。在没有上述控制参考输入的情况下,其数值应从启动后开始增大,直到稳定在设定值。通常,它的作用是补偿传感器测量中的固定误差(稳态误差)。如果 KI 太大,会造成系统失稳。在离散时间系统中,该项算法简化为简单加法,或者更确切的说,简化为累积求和:

A(n) = A(n-1) + E(n)     这里 A(n) = 累积误差

CI(n) = KI x A(n)

微分(或变化率)控制项

该项非必要组成,可完全根据需要选择。它可在 KP 和/或 KI 数值较大时通过减弱瞬态振荡或“振铃”现象来改善系统性能。该项可测出输出变化率,并在输出接近设定值时减小控制信号。当 KD 值适当时,可防止超调和过度纠正。因此,当突然出现较大的瞬态变化时,我们将获得较大的初始控制响应,然后随着误差接近于零而逐渐减小。D 控制项可在一定情况下改善系统响应,例如在设定值出现急剧改变时。但是可能会因为反馈信息对噪声较为灵敏而出现问题。实际操作中,看起来很复杂的微分项可变为简单的减法,即从原来的误差中减去当前误差:

CD(n) = KD x (E(n-1) – E(n))

换句话说,该控制项在误差增大时为正数,增强 P 和 I 控制项的作用。而当测出的输出值超过设定值时,D 项将变为负数,减小总控制输入,直到误差再次减小为止。

PI D 控制项的不同组合

PID 控制算法并不一定要完整使用。设计师必须根据待控制系统的特点确定三个控制项的使用组合。这里必须考虑两点:

  1. 在初始启动和设定值变化时(例如下达操纵指令时),系统必须以多快的速度响应误差的骤然增大。这是“瞬时”响应。
  2. 系统输出相对设定值的波动程度。这是“稳态”响应。

一些常用的 P、I、D 控制项组合的性能曲线如 2 所示。每种组合中的蓝色曲线即为实际输出状态(速度、位置、温度等),与理想设定值(红色虚线)形成对比。让我们假设曲线代表的是电机随时间 t 的转速变化,启动时间 t = 0。

PID_blog_31_d1022596fd8b6254fefa6601287570e552980c51.png

(a) 比例控制和固定控制参数的组合。参数为估值或通过实验得出的数值。采用较大的 KP 系数,可确保上升速度快于其它情况,但缺点是出现严重超调和“振铃”现象。如果参数估值存在误差,也会造成稳态速度低于要求的设定值。

(b) 比例和积分控制的组合。保持 KP 值不变,但将固定参数替换为积分控制项。这样可以帮助我们最终达到设定值,但起初会出现更为严重的超调。

(c) 比例、积分和微分控制的组合。理论上说,只要 KD 值适当,就会出现“神奇”的现象:振铃几乎完全消除,并可在极短的时间内达到稳态。

回环调校

计算方法很简单,而且可在低成本微控制器(例如 Arduino)上运行移动机器人的基础控制程序。这里要注意的是 K 系数数值的选择。 当进行“手动”调校时,调试人员的经验起到很大作用。有时可对系统进行“开环”运行,并切断反馈,以此了解系统的特点。此外还可以运行模拟,结合经验和试错,获得较满意的数值。市面上也可以买到精密的调校程序。实际操作中,像这样的小型电机控制,只需一点预测,再加上一些小改动,就能得到满意的结果。

后期预告

为验证本文内容,我在我的忠实小伙伴 Parallax BoE-Bot 机器人上安装了转速计以及 Arduino 格式的 dsPIC33 微芯处理器(可提供处理能力)。dsPIC 等现代微控制单元内含特殊硬件,例如“输出比较”、“输入捕捉”和“正交编码”单元,适用于电机控制和感应。我将进一步探讨使用 Forth 语言、FORTHdsPIC 和“裸机式”汇编代码驱动程序编写的 PID 算法在电机控制和转速计传感器中的应用情况。

如果您暂时想不出做什么,可以关注我在 Twitter 上发布的文章。我会贴出关于新的电子产品和相关技术的文章链接,也会转发我读到的关于机器人、空间探索以及其它话题的文章

Engineer, PhD, lecturer, freelance technical writer, blogger & tweeter interested in robots, AI, planetary explorers and all things electronic. STEM ambassador. Designed, built and programmed my first microcomputer in 1976. Still learning, still building, still coding today.
DesignSpark Electrical Logolinkedin