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

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

1 部分介绍了 PID 控制的理论依据。 2 部分讨论了实际的测距问题和使用 PID 为移动机器人精确导航。现在让我们再了解一些代码和实际探测器设计中的其他特点。

Mars_Curiosity_wheels_28d1fcd7c0159c4a35e5b47479d99c31905cbd81.png

好奇号火星探测器的车轮损坏         来源:NASA/JPL

闭环轮速控制系统

我分两部分实施了控制系统:

  • 一部分是高级程序,在我的例子中是用 FORTHdsPIC 编写的,这是用于嵌入式控制的 Forth 语言的方言。该代码执行高级别“大脑功能”,例如,根据总体计划通过驱动电动机来监视和响应传感器输入。总体计划可能是探索和绘制一片地形,同时避免掉进洞里或撞到墙上。列表 1 中显示的基本演示程序除了等待车轮转速计系统的更新然后为电动机驱动系统计算新的控制值之外,没有什么多大作用。
  • 另一部分是低级裸机代码,该代码使用槽盘转速计提供的脉冲数据确定车轮的转速(请参见第 2 部分)。该代码是中断服务例程 (ISR) 的组成部分,ISR 使用 dsPIC 的输入捕获硬件来测量转速计脉冲之间的时间间隔。无需将时间间隔转换为速度,这只是意味着用于计算误差的设定值也被指定为时间间隔。ISR 还为电动机控制回路计算新的原始(尚未应用 K 系数)误差、I 值和 D 值,这些值保存在 RAM 中供高级程序读取。ISR 代码仅在转速计脉冲上升沿触发中断时运行。这意味着 RAM 中的原始数据值会在每个转速计脉冲后予以更新。

转速计 ISR 为 PID 算法执行所有繁重的工作,而 Forth 代码负责处理 K 系数的应用和数字标度变换,从而为 PWM 伺服电动机驱动器创建控制值。这种方式的分工可以实现最大的程序灵活性。ISR 是编程到目标系统闪存中的嵌入式 FORTHdsPIC 环境的组成部分。高级 Forth 代码由用户提供,通常作为文本文件从主机 PC 下载到 RAM 中。因此,用户代码可以指定要使用的 P、I 和 D 的组合、K 系数和设定值。

PID3_blog_11_201cc08b28697b30ae36b4baa4e48953ee8db7de.png

深入了解简单的高级程序

列表 1 中的前五行是稍后在程序中使用的新用语的“冒号定义”。LIMIT 用于限制顶部堆栈项目的数值范围。PROPINTLDERV 各自执行原始 P、I 和 D 变量的组合标度变换以及与 K 系数相乘,并将处理后的结果留在堆栈上。PID 执行这三个分量的求和。

接下来是对包含控制回路的顶级程序进行定义,在命令提示符处键入 MAIN <return> 后,控制回路将继续运行。MAIN 的前几行仅执行一次,用于初始化一些变量,并在回路“关闭”之前启动电动机并运行 60 ms。请参见下方的“实际问题”。

最后,我们在 BEGIN …..AGAIN 循环结构中包含了 PID 控制代码。请记住,只有当转速计 ISR 返回更新的值时,才会计算新的控制值。因此,当 ISR 设置了 PULSE 标志时,才有BEGIN ….UNTIL 循环。然后它会被清除,用语 PID 执行计算以创建新的控制输出。为了防止控制值为负值或过大,LIMIT 在新值被发送到 PWM 连续旋转伺服电动机控制器例程 CSERVO 之前执行。这就是高级程序。

改进精度

在电动机和车轮之间使用减速齿轮箱时,安装在车轮上的转速计所进行的相对不精确的测量可以得到显著改善。如果转速计传感器位于电动机输出轴上,而不是轮轴上,那么它将在车轮每次旋转时旋转 n 次,其中 n 是传动比。因此,如果转速计盘有 20 个槽,传动比是 100 比 1,那么每次车轮旋转都会产生 2000 个脉冲。当然,这需要假设处理器可以处理脉冲中断频率!

实际问题 启动

从静止状态启动后,可以通过允许电动机在短时间内开环运行来降低前几个脉冲内无效转速计数据的影响。我发现在这种情况下,60 ms 过后足以使用有效的转速计数据了。当电动机以设定速度运行时,电动机启动控制值应该是 PID 循环产生的值。这可以通过运行一个小程序来发现该值,该程序以特定设置开环运行电动机,并将相应的速度从转速计读回 PC。然后可以为一系列控制输入来绘制“校准曲线”。在演示程序中,控制值 30 大致对应设定速度 1800。为了进一步减少启动间隔,可以将积分值预设为其目标值。现在,当以目标速度运行时,ERROR = 0,因此 P、I 和 D 中唯一的非零分量就是积分。这意味着在这种情况下,INTL 产生的值为 30。假设 Ki 系数为 0.01,则原始数据变量 INTEG 应初始化为 3000。

实际问题 负载运行

我的演示程序中使用的数字适用于机器人“被顶起”导致车轮离开地面的情况。也就是说,电动机是以很小的负载或空载运行。当机器人在地面行走时,电动机必须承受更大负载:为了达到目标速度,将需要提高控制输入。如果您选择了动力足够强大的适用电动机并留出了一些余量,那应该没什么问题。将电动机和传动系与可能的负载相匹配是第一项设计任务,它至关重要,必须完全正确(请参见下面的“构建传动系”)。如果要将最大设定速度保持可选状态,PID 控制器必须能够提高电动机功率,以应对可能遇到的最严重阻碍。

使用业余的伺服电动机

我的机器人很小,由尺寸合适的电动机驱动。这些业余伺服电动机为实现连续旋转经过了改装,由 50 Hz 脉宽调制 (PWM) 信号进行控制。伺服电动机实际上由一个非常小的有刷永磁直流 (PMDC) 电动机、一个大型齿轮箱和驱动电子装置组成。这时,您可能想说:“标准伺服电动机不是已经包含反馈控制系统了吗?”确实如此,已经包含在其中,但唯一要做的是将输出轴的位置设置在 0 到 180 度之间的任何位置。业余伺服电动机最初用于使无线电控制模型飞机的控制表面(升降舵、方向舵等)进行小角度移动,而不是驱动车轮旋转。这个视频教程很好地介绍了业余伺服电动机及其驱动方式:

多年以前,有人发现,通过用手动电位器替换位置反馈电位器,并且拆除阻止输出轴完全旋转的塑料挡块后,便改造出连续旋转的“伺服电机”。标准 PWM 信号现在控制着轴的旋转速度,从 1 ms 脉冲时的最大“反转”速度开始,在 1.5 ms 时下降到零,在 2 ms 时恢复完全正转速度。但是,内置反馈控制已丢失,这是一个严重的问题。手动电位器是一种“零设置微调器”,当 1.5 ms 脉冲被施加到控制输入时,它可以确保不会发生旋转。有利的方面是,您有一台可以直接连接到微控制器 GPIO 引脚的电动机,并通过芯片的板载 PWM 硬件进行“数字”控制。大多数微控制器都提供多种 PWM 通道,只需要少量代码就能启动和运行。更好的是,可以广泛提供“现成的”连续旋转伺服电动机

使用更大的电动机

使用更强大的 PMDC 电动机时,它和微控制器之间需要一个专门的驱动器接口。失速电流约为 1 至 2 A 的有刷直流电动机来源广泛且价格低廉。这种尺寸的电动机非常适合教育目的,也适合在提高电动机功率和增加成本投入之前验证原型设计概念。PMDC 电动机易于使用,因为它们具有非常明显的线性特性( 1)。

PID3_blog_2_ede91f3b3455db3d88bca2c56eeafd1d691fcdac.png

注意空载电动机转速如何与施加的电压成正比。电动机的扭矩或旋转力与转速成反比。这是一个很好的特性,因为这意味着随着电压施加到电动机上,可以获得最大扭矩。电动机电流沿着同一条线变化,当空载电动机达到最大速度时,电流降至最小值(不完全为零)。

许多人倾向于将电动机直接连接到车轮上,并通过使用固定的较低电动机电压和无反馈控制来实现低转速。扭矩曲线显示了这样操作的后果。实际上,这些蓝色扭矩线有无限多条,每个可能的电压都对应一条。如果您选择以对应于电压 V1 的空载速度 S1 运行,那么您能得到的最大扭矩是 T1 – 全速下电动机的一小部分扭矩。机器人可能不会开始移动,因为即使失速扭矩也不足以克服“静摩擦”。最好是以更高的空载速度 S2 运行,并使用减速齿轮箱来达到期望的行驶速度。请注意,电动机现在将以 S1 rpm 旋转,因为它是在负载下运行。这是一个双赢局面:齿轮箱降低了速度,但也将车轮的可用扭矩乘以相同的比率。

PID 控制时的工作情况

如果没有应用任何反馈速度控制,电动机电压 V 将保持恒定。当机器人开始爬山时,车轮上所需的扭矩量增加,工作点上移电压 V 对应的扭矩线。结果电动机速度下降。如果坡度变陡,速度将继续下降,直到达到该电压对应的最大扭矩时电动机“失速”。显然,如果我们增加 V,我们将获得更多扭矩,但前提是不超过额定最大值。然而,我们不希望速度中有这种依赖于负载的变化。

添加 PID 控制

PID 控制通过使用转速计检测速度并试图保持恒速,提供了一种响应负载变化而自动改变电压 V 的方法。现在,通过测量速度下降检测到负载增加时,控制回路会增加电压 V 来进行补偿。根据图表所示,工作点移动到下一条曲线以增加 V 值。旧曲线右侧的这条新曲线在相同速度下具有更高的扭矩值。因此,反馈控制允许发挥特定电动机的全部性能。

为方便起见,我们仍然可以使用 PWM 信号,尽管它的格式与业余伺服电动机所用的不同,并带有高电流接口以控制 PMDC 电动机的速度。在这种情况下,脉冲频率将处于 kHz 范围内,占空比可以从几乎为零变化到 100%。这是因为 PWM 信号的平均直流电压与脉冲占空比成正比。下一个视频说明了 L298 H 桥 IC 使用 PWM 信号时的工作方式:

构建传动系

上述视频中所述的 PWM 原理是:在脉冲期间向电动机供电,并在周期的剩余时间内断电。完全关闭 PWM 后,电动机继续空转,直到摩擦损耗和其他损耗使其停止。

现在是时候看看动力传动系了。行星探测器不会跑得很快,也不会有巨大的重型电动机。然而,传动系需要向车轮提供大量扭矩,以便探测器能够爬坡和越过障碍物。探索未知地形需要缓慢但准确的移动。

例如,假设我们建议使用空载速度约为 6000 rpm 的有刷直流电动机。当探测器在平地上行驶时,选择大约 1500 rpm 的最小负载速度将具有足够的扭矩。车轮速度需要降低到更平稳的速度,可能是 10 rpm,这需要 150:1 的传动比。这应允许 PWM 信号具有大约 50% 的最小负载占空比。我们已经为 PID 控制回路内置了一个“开销”功能,以便在不减速的情况下应对爬坡和越过障碍物的情况。它还确保从静止状态启动时,至少有一半的最大失速扭矩可用于克服摩擦(静摩擦)。当然,在选择电动机以确保这些数据可行之前,必须估测探测器成品的车轮所需的扭矩。

谈到齿轮箱时,有三种类型需要考虑:熟悉的平行轴式、行星式(也称为行星齿轮箱)和谐波齿轮驱动式(也称为应变波齿轮)。如果您建造的是火星探测器,那么最后一个选项(可能辅以行星齿轮)将是您的首选。谐波齿轮驱动是一项相对较新的发明,它提供出色的性能和小巧的尺寸,但是您可能需要为太空机构工作才能证明成本的合理性。对于小型实验室机器人来说,市场上有很多电动机-齿轮箱套件可用而且具有更合理的价格。

制动器

那么制动器呢?一般来说,除非探测器可能会爬下非常陡的斜坡,否则只要关闭 PWM 就足以使其停止了。如果重力开始产生太大的影响,并且机器人开始滚动而失去控制,那么动态制动可以和 PMDC 电动机一起使用。请注意,我说的是“滚动”,而不是“滑动”。如果发生滑动,那么只能寄希望于软着陆。一些 H 桥电动机控制芯片(如 L298)具有动态制动功能。选择动态制动后,PWM 信号断开,电动机端子短路。电动机变成了发电机,巨大的电流反向流过绕组。突然反向的磁通量使电枢迅速停止。它不能起到停车制动器的作用,但是当短路仍然存在时,它将在某种程度上阻止进一步的运动。如果这样没用,那么就需要一个机械制动器,就像在好奇号探测器上的那样。

还有一个选择:在您的减速齿轮箱中使用蜗杆传动。基本蜗杆/小齿轮组是不可逆的,由于蜗杆位于电动机轴上,如果电动机停止,传动操作将被锁定。

结论

最前面的照片是 NASA 好奇号探测器在 SOL(火星日)1315 拍摄的“自拍照”。中间车轮“轮胎”中的锯齿状孔表示严重损坏。发射前在地球上进行的测试表明,这些车轮可以在最锋利、最坚硬的岩石上行驶而不被刺穿。经过大量分析,确定移动系统中存在一个无法预见的缺陷。情况就是这样的

4 部分后期预告...

我将介绍一些移动系统:一些系统可平稳操纵,另一些系统像坦克一样“滑动转向”。NASA 探测器为什么都有“摇杆转向架”悬挂装置呢?此外,将会使用 PID 控制创建一个“photovore”(受光线吸引的移动机器人)。

如果您暂时想不出做什么,可以关注我在 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.