学习路线入门

机器人的电机控制:一份学习路线图

能以精确的速度和方向驱动两台电机,读出它们转了多远,并让一台差速驱动机器人按你的意图转向。

电机是机器人的决策变成运动的地方。这条路线从零开始建立电机控制:先用 H 桥和 PWM 安全地开关真实的电机电流,然后通过读取编码器闭合回路,让你知道每个轮子转了多远、转得多快,最后把两个轮子组合成差速驱动的转向和里程计。

按顺序走完这些节点——每完成一个就会解锁下一个。到最后你就能以真实的精度指挥机器人的轮子,这是循迹、迷宫求解和自主导航的基础。

开始之前

你需要熟悉面包板接线和读电压,并且需要一块已经能烧录的单片机—— Arduino Uno是通常的选择。不需要控制理论; 那是PID 路线的内容,而它假定你先完成这条路线。

你将会做到什么

  • 以指令速度双向驱动一台有刷直流电机,而且不让驱动器或板子发热。
  • 解释为什么电机在 15% 占空比下静止不动、到 30% 才开始动,并为自己的硬件测出这个阈值,而不是猜。
  • 把原始编码器脉冲换算成行驶的毫米和毫米每秒,包括把 ×4 正交倍频这个系数弄对。
  • 把“原地左转 90°“变成左右轮的速度,并仅凭轮子运动预测机器人最后停在哪里。
  • 依据你自己的机器人质量和轮子来给减速电机选型,而不是买套件里那个、然后在地毯上才发现问题。
  • 实测你的减速箱背隙是多少度,并说出它让里程计付出什么代价。
  • 算出你的机器人能施加在地面上的最大力,并说明拦住你的是电机还是轮胎。

大家卡在哪里

**用控制器的 5 V 轨给电机供电。**这是第一台机器人上最常见的单一故障。 稳压器供不出电机电流,于是电源轨塌陷、板子欠压复位,而症状看起来像 一个软件 bug。电机要用自己的电源;只有驱动器的逻辑侧才共用板子的 5 V—— 电源预算页里有相应的算术和测量方法。

**没有共地。**驱动器和控制器必须共用一个地参考,否则方向引脚毫无意义。 所有接线看起来都对,却什么都不动。

**指望里程计一直保持真实。**轮式里程计的漂移没有上限——每一次打滑、 每一毫米的轮径误差都会累积,而且永远不会被修正。它在一米的范围内 表现出色,在一百米的范围内一文不值。这个限制正是 建图路线存在的理由。

**不一致地计数编码器边沿。**一个正交编码器每个周期给出四个可计数的边沿。 只数一个却用数据手册上的 ×4 系数,会让每个距离都差出四倍, 读起来就像轮子被彻底标定错了。

**把减速箱的错怪到控制器头上。**会随方向变号的误差是机械问题,不是整定问题。 齿轮组有间隙,每次换向都会结算一次,而装在电机轴上的编码器完全看不见它。

你需要什么

什么 这条路线为什么需要它 说明
两台直流减速电机 整条路线的主题 带编码器的版本贵一点,但能省掉日后返工
一个电机驱动器 一个 H 桥,好让逻辑引脚能指令电机电流 套件里带的就用 L298N,要买就买 TB6612FNG
一块独立的电机电池 电机拉低的那条轨不能是板子运行所依赖的那条 任何能供出堵转电流的电池组
一台万用表 测堵转电流和电源压降 这里电流档很重要,不只是电压
一把卷尺 核对“开 1 m”是否真的走了 1 m 台架上最便宜、也最诚实的仪器

为什么按这个顺序

选型刻意排在接线之前。几乎每一个“我的机器人太慢”或“我的驱动器烧了” 的问题,都是几个月前用盒子里那个电机而意外做出的选型决策。 算出你自己的机器人需要多少扭矩要花二十分钟,却能解决这条路线其余部分 会反复提出的问题。

附着力紧接在选型之后,因为它设定了第二个上限,而在一台小机器人上 它才是较低的那个。堵转扭矩说明电机能产出什么;摩擦说明地面会接受什么。 一台轻机器人在光滑地面上,大约在四分之一堵转扭矩处就撞上附着极限, 这意味着你电机能力的后四分之三根本传不到地面。不考虑附着力的选型 给你的机器人是纸面上强壮、实际在原地空转。

PWM 排在编码器之前,因为开环电机是最简单的一样会出错的东西, 而在上面没有叠控制回路时,调试接线故障要容易得多。 先让两个轮子都能以指令占空比双向转起来。

编码器排在差速驱动之前,因为差速驱动是建立在实测轮子运动之上的算术。 没有编码器你可以转向,却说不出机器人去了哪里,而那个节点里里程计那一半 也无从下手。

运动曲线和两个损失节点排在最后,因为每一个都是在纠正前面那些节点 让你相信的错误想法。运动曲线纠正“你可以直接指令一个位置”这个想法。 轮子打滑纠正“编码器测量的是地面”这个想法。背隙纠正“编码器测量的是轮子” 这个想法。三者都是令人失望的事实,而三者在这里学会, 都比在一台你正想赶紧做完的机器人上学要便宜。

检查点:如何判断一个阶段已经落地

阶段 检查内容 通过是什么样
电机选型 由机器人的质量、轮半径和目标加速度算出所需扭矩 一个可以拿去和数据手册比较的 N·m 数值——而且你知道你电机的堵转电流
附着极限 全油门下把机器人顶在厨房秤上保持不动 读数远低于电机的堵转力处就趋于平稳,而轮子还在转
PWM 控制 在每个轮子上把占空比从 0 到 255 以 5 为步长扫一遍 你能说出每个轮子第一次转起来的占空比,而且两个数值不同
方向控制 在两个通道上分别指令前进、后退和刹车 六种状态行为都正确,而且你能解释刹车与滑行有什么不同
编码器 用手把机器人精确推 1 m 并读取计数 用上 ×4 正交倍频系数后,计数能换算成 1000 mm ± 20 mm
差速驱动 指令一次 90° 原地转向,用量角器测量 几度以内且可重复——一致的误差是背隙,随机的误差是打滑
运动曲线 用同样的限位指令一次短行程和一次长行程 短行程永远到不了最高速度,而且你能从曲线形状说出为什么
背隙 用手向两个方向转动轮子,直到阻力点 你有了一个以度为单位的数值,而且它不为零

这条路线到哪里为止

这条路线停在准确地指令运动。它不会围绕一个外部目标闭合成回路—— 没有要跟随的线,没有要保持的墙面,没有要收敛到的设定点。那是 PID 控制的内容,而它假定这里的一切。

有三处刻意的省略值得点名。无刷电机和电调是另一个控制问题, 而几乎没有哪台小型地面机器人需要它。步进电机用编码器换来了 开环定位,代价是扭矩和速度——这对打印机是正确的取舍,对漫游车则是 错误的;它们有自己的一条路线,见步进电机的精密运动。 全向传动——能横移的麦克纳姆轮和全向轮——需要四个独立控制的轮子 和另一套运动学,它们也有自己的一条路线,见全向驱动。 而电流检测——测量电机实际吸取的电流,而不是你指令的电流—— 是检测堵转的专业做法,而且确实有用,但它需要大多数入门级驱动器 并不具备的硬件。

学习路线

路线

按顺序完成各个节点——完成一个就会解锁下一个。你的进度会保存在这台设备上。

已完成 0 / 13

100%
教程

给运动加斜坡,而不是直接下指令

40 分钟

打开教程
目标

精确驾驶机器人

技能解锁

常见问题

常见问题解答

要控制机器人的电机,需要学些什么?

四层,按顺序来。第一,选型:把机器人的质量和轮径换算成你真正需要的扭矩和转速,让电机是选出来的,而不是从套件里继承来的。第二,开关:H 桥和 PWM,让逻辑引脚能控制它自己永远供不出的电流。第三,测量:编码器,让机器人知道每个轮子转了多远,而不是靠假设。第四,组合:差速驱动,把两个轮速变成航向和位置。之后的一切——循迹、PID、导航——都建立在这四层之上。

为什么我的电机要到大约 30% 的 PWM 占空比才开始转?

在任何东西转起来之前,必须先克服静摩擦和减速箱的静阻力,低于这个阈值时电机只会待在那里嗡嗡响。这个值是你这套具体硬件的属性——减速比、轴承状况、温度,以及轮子上压了多少重量——所以它必须实测,而不能查表。以 5 为步长逐步提高占空比,记下每个轮子第一次转起来的位置。机器人常常有两个不同的阈值,每侧一个,而一台在低速时跑偏的机器人,通常是在向你展示这个差异,而不是转向逻辑有缺陷。

轮式里程计有多准?

一米之内非常出色,一百米之外一文不值。里程计是对车轮运动的积分,所以它犯的每一个错误都是永久的——没有任何测量能修正它。随机打滑按距离的平方根增长,这还能接受;但系统误差,比如轮径偏了 1%,会线性增长,这就不行了。实际的结论是:里程计是在接下来几秒内闭合控制回路的合适工具,却不是用来知道五分钟后你身在何处的工具。

L298N 和 TB6612FNG,该用哪个电机驱动?

几乎任何小型机器人都该用 TB6612FNG。它的 MOSFET 输出级压降约为 0.5 V,而 L298N 大约是 2 V;在 6 V 电机上,这个差距相当于电源的三分之一在到达电机之前就被烧成了热量。L298N 的用武之地是:你需要每通道持续超过约 1.2 A 的电流,或者电机电源高于 TB6612FNG 的 13.5 V 上限。它也是大多数套件自带的驱动器,所以即使你要换掉它,也值得把它弄熟。

入门机器人需要编码器吗?

循迹车不需要,它靠线传感器转向,从来不需要知道自己走了多远。一旦机器人必须行驶一段设定的距离、转过一个设定的角度,或者保持一个不会因电池电压下降或地毯变厚而掉下来的速度,你就需要编码器了。线迷宫求解器需要它们;第一台循迹车不需要。以后再加就意味着要换电机,所以如果你预计会走到那一步,就直接买已经装好编码器的电机。

为什么我的机器人转弯时总是多转一个固定的量?

一致、且随方向变号的误差是机械问题,而不是整定问题。每一套齿轮传动都有背隙——输出端动起来之前必须先吃掉的自由间隙——而且每次换向都要结算一次。装在电机轴上的编码器位于减速箱错误的那一侧,完全看不到这一点,所以控制器以为动作已经完成了。在车轮处以度为单位测出这个间隙,然后要么在软件里补偿它,要么避免在动作中途换向。