- 本课程为精品课,您可以登录eeworld继续观看:
- 有限状态机线路跟踪器
- 登录
- 课程目录
- 课程笔记
大家好,我是 Jon Valvano。
在上一个视频中,我们讨论了一般的
有限状态机,具体来说,是解决了交通信号灯的
控制器问题。
在本视频中,我们将解决第二个有限
状态机示例,该示例与本实验非常接近。
那就是,我们将会考虑
如何打造一个可使机器人循线
移动的系统。
所以地面上会有一条线路,机器人上
会配有传感器,我们希望机器人
能够沿这条线路移动。
还记得吧,有限状态机的本质是我们会有
一个系统。
该系统将会有输入。
它将会有状态,用于编码我们的知识,
也就是我们认为将会成真的情况。
它还会有输出,用于影响我们的世界。
那么,我们要解决的问题将会是一个
非常简单的简化版本的机器人,要求该机器人
在桌子上沿一条线路移动。
实际的机器人有八个传感器。
但是,我们今天在这里讨论的机器人仅有两个传感器。
而且它们是二进制传感器。
所以,如果这里的这个传感器能够看到线路,
则输入为 1。
如果该传感器没有看到我想要沿循的线路,
则看到的是 0。
所以 1,1 输入状态表示我正在线路上。
1,0 表示偏右。
0,1 表示偏左。
使用有限状态机的根本意义在于
能够解决这一很自然的问题 -- 好吧,
如果我没有看到任何线路,那我是偏左了呢,
还是偏右了呢?
我们将使用状态机的先验知识
来区分迷路的两种可能的
情况 --
偏左还是偏右。
我的电机也非常简单。
我将会有两个电机,一个左轮一个右轮 --
您将在本课程中构建一个差动
驱动型机器人。
如果我想直走,我将会
同时驱动两个电机。
稍后,我们将在课堂上学习有关复杂性质的
所有方面。
但简单来说,如果输出为 1,1,
那么便会直走。
现在,向右转 --
我不想急转弯。
我只想平缓地右转,
因为我将会假设我离线路很近。
我要采用的方法是,
我将会驱动左侧电机,使其达到高电平。
所以,如果我尝试右转,
我将会降低右轮,或者说右侧
电机的速度。
具体的做法是,使用这个占空比
为 50% 的切换式振荡波形来驱动该电机。
这便是我用以右转的方式的本质。
左转的方式则与此相反。
显然,我将会将右侧电机驱动至高电平 --
持续为 1。
但对于左侧电机,我将会减慢其速度并使其在高低电平之间切换。
这将会实现平稳的左转。
这便是我将会采用的方法。
好的,如果我得到0,0,那么它将会停止。
但是在这个特殊的示例中,我们不会用到停止。
所以,记住,解决有限状态机问题的方法,
或者说策略,便是考虑各种状态。
所以,我将会考虑 --
我可以使用各种状态。
这个便会在这里被编码。
我实际上是在线路上。
我现在在线路的正中间。
此外,还有其他状态。
就像我说的,我可能偏左,
也有可能偏右。
在这里这个特定的示例中,或者说在本讲座中,
这些全部都是我将会用到的状态。
在实验中,或者在实际的机器人上,
您将会用到的状态要多得多。
但是,在这里,我只想介绍相应的设计策略,
说明如何将我的想法映射到将会在机器人上运行的
实际代码中。
在找出这些状态后,接下来我要做的事情便是,
关于这些状态,我想要做什么?
如果我在跑道的中央,
我便会想要直走,所以我将会直走。
此时,引擎 --
有限状态机引擎将通过我的控制器
完成各个循环,我将会提供输出。
我将会等一会儿,因为电机非常慢。
我必须给它留出反应时间。
我将会提供输入。
然后,我将会根据我的现态
和输入来选择我的次态。
这将会是我的序列。
让我们直行,看看会发生什么。
我们将会直行。
我将会输出、等待、输入、转入次态、输出、
等待、输入、转入次态、输出、等待、输入、转入次态、输出、等待、
输入、转入次态。
我在线路上。
然后,我将会继续在线路上移动。
所以在这个虚拟世界里,这个机器人
实际上是直行的。
但这条线路是弯曲的。
所以,在几十、几百、几千次的
直行之后,
我最终将会偏离该线路。
现在,只有两个选择。
我可以走到偏左或偏右的位置。
下面将说明偏左时的情况。
当偏离路线时,首先会发生的事情是 --
如果我将会
走到偏左的位置,首先会发生的是,左侧的传感器
将会变暗,也就是变成 0。
现在,我正处于偏左状态。
在看到该情况时,我知道之前的状态 --
我过去一直在线路上。
然后,我会查看我的输入。
我看到左侧传感器的信号消失了。
我知道现在有一点偏左了。
但在这个简单的方案中,我在左边。
对此,我该怎么办呢?
我该怎么做?
我想右转。
我将会放慢速度。
我想右转。
所以,我将会降低右侧电机的转速。
我将会放慢这个电机的速度。
所以,我将会放慢右侧电机的转速,
使左侧电机保持全速旋转。
所以,这个电机将会全速运转。
这个则会半速运转。
这将会实现平稳的转弯。
由于我偏左了,所以我想要右转。
所以,我的状态是我偏左了。
我的措施是,通过以 50% 的占空比驱动右侧电机
实现平稳右转。
换句话说,这个电机
将会处于高电平。
这个电机将会以 50% 的比例振荡。
这便是我为右侧电机
提供的功率 --
左侧电机满功率,右侧电机半功率,
机器人将会平稳右转。
同样,机器人需要一定的反应时间。
所以,如果我右转、右转、右转,
我将会平稳右转,直至回到线路上。
这样,我刚刚偏左了。
现在,我看到两个传感器都已开启。
那么,我将会如何做呢?
现在,我回到了
中央状态。
所以,我将要做的是直行。
此时,我将会重新驱动两个电机全速运转。
我将会移动,好的,再次输出、等待、输入、
转入次态、输出、等待、输入、转入次态、输出、等待、输入、转入次态。
这里的虚拟机器人实际上将再次执行,
但线路是弯曲的。
下面将说明机器人走到偏右
位置时的情况。
之前我在线路上。
现在,我偏右了。
所以,我现在处于偏右状态。
我的意思是,状态机处于
代表我的位置偏右的状态。
我想要做什么?
好吧,我想要左转。
我们已经了解了如何右转,左转
则与之相反。
所以,我将会驱动 --继续以 100% 的
功率驱动右侧电机,以 50% 的
功率驱动左侧电机。
这将会导致 --
现在,我是偏右的。
我想要平稳左转,
从而重新找到线路。
就像前面的数千次操作一样,我将会输出、
等待、输入、转入次态。
但是,这次我将会 --
如果我想,我将会缓慢左转。
所以,我将会左转。
我现在仍然偏右。
我将会左转。
我现在仍然偏右。
类似地,我将会驱动左轮以较慢的速度转动。
我现在仍然偏右。
仍然偏右。
然后,嘣--
我找到线路了。
所以,我之前在偏右的位置 --
之前是。
现在,我正从偏右状态过渡到
中央状态,该状态让我知道我又回到了线路上,
我将会做我在线路上时总是会做的事情。
那就是直行。
好的,我会直行。
这基本上就是我的策略。
我说过,真实的循线机器人
将拥有不只三个状态。
在实验中,您将会拥有超过三个状态。
但是,我只是想说明这个过程。
这些便是我的状态。
我将会开始绘制状态转换图。
但是,现在我列出了这些状态。
由于这是一个Moore 状态机,
因此,将会有一个结果 --每个状态的输出。
我将会驱动 --
如果我将会在中央,那么我将会直行。
如果偏左,我将会右转。
如果偏右,我将会左转。
这便是我将要做的事情的本质。
接下来要做的是,放入相应的时间。
我将其称为延迟或等待。
但是,如果我们有实际的机器人,
那么等待的时间将是电机机械响应时间的函数。
如果您的机器人要在您给出命令后
大约 100 毫秒才能实际执行相应任务,
这个时间便是它的时间常数。
所以,我们将会以大约这个时间
常数来运行有限状态机。
我们将会以稍快的速度运行状态机,但又不能太快。
如果比响应时间快太多,则不会发生太多活动。
所以,我们将会每 50 毫秒运行
该有限状态机一次。
注意,整体目标是我所处的状态 --
输入模式 --
1,1 在线路上 --
偏左、偏右 --
这些是简单的状态。
但是这两个是较为复杂的状态。
传感器给出 0,0。
但是,我有可能是这种情况的偏左。
也有可能是对应这种情况的偏右。
区分这两个状态便表明了
我实际上将会如何解决这个问题,
以及我为什么使用有限状态机。
好的,重申一下,这里我将会使用三个状态。
每个状态都有一个名称 --
中央、偏左和偏右。
每个状态都有一个输出。
每个状态都有一个时间延迟。
然后,每个状态都有箭头,箭头数量
是输入的函数。
如果我采用的是n 位的输入,那么
我将会有 2 的 n 次方个箭头。
由于我采用的是 2 位的输入,因此我将会在每个状态上
延伸出 4 个箭头 --
00, 01, 10, 11.
这便是我的状态图将会拥有的结构。
我们将会在后面构建该图。
同样,根据您是习惯
使用图表,还是图形 --
这二者是完全相同的。
您可以选择上述任何一种方式。
实际上我已经开始给出了 C 代码,
因为事实证明 C 代码 --
这是状态转换表。
这是状态转换图。
因为事实证明C 代码和状态转换表
是完全相同的。
它们之间的映射很明显。
好的,同样,我是从状态开始,然后是输出模式,
然后是时间延迟。
这将会是50 毫秒。
现在,我只是通过对我将要做的
事情的直觉来进行设计 --
对吧?
以下便是我们在这里将要做的事情。
如果我之前在线路上--
我之前在线路的中央,
并且现在看到的输入模式为 1,1,那么我便知道
我现在仍在线路上。
我现在仍在线路的中央。
所以,如果我之前在线路上,并且我现在仍在线路上,
那么,我便是在线路上。
所以,我将留在该状态。
这一个,我之前偏左。
好的,我之前是偏左的,但是现在
传感器变成了 1,1 --好极了。
好的,我回到了线路上。
所以,我将要进入中央状态。
如果我偏右,现在看到的是 1,1,
那么我现在
将会回到线路上。
状态与输出之间似乎
有一个一一对应的映射。
换句话说,似乎每个输出
都只有一个对应的状态。
不是这样的。
其实同一个输出可能会对应多个状态。
而正确的说法是,每个状态都
有且只有一个输出。
但反过来说就不正确了。
每个输出不一定都有一个状态。
但这里这个例子比较简单。
如果我看到线路,这便意味着我正在跑道的中央。
所以,我将要做的是直行。
这是状态转换图。
如果您要绘制 --
这是状态转换表。
如果您要绘制转换图,我们在这张图上进行了说明。
如果我在线路上 --
所有那里的这个就是这个。
这里这个是我在偏左位置。
好的,我现在偏左,但是能够
看到线路 -- 这便是这个。
这里这个,我在偏右位置,但是能看到线路 --
这是这个 --
好的,3、2、1。
这就是映射 --
我说过,表和图之间
有一个一一对应的映射。
这是这个过程的开始。
这方面很简单。
现在,我已经开始编写实际的 C 代码,
在这里向您展示 --
这将会是 00、01、10、11 条件 --
这是我将会放在我的 C 代码中的
实际代码,它也是与转换表完美匹配。
我们来解决一个难一点儿的问题。
如果我在线路上,现在传感器 --
左侧的传感器死机了,会发生什么?
这是左侧传感器,现在它变黑了。
发生了什么?
这意味着我最终偏左了。
我最终偏左了。
我将会编码 --
这个箭头,这里这个状态是我在中央,
并且看到的是 10。
如果我偏左了,看到这个仍然是黑屏,
会发生什么。
这便是我将会如何对其进行切换。
我将要进入中央状态。
如果输入模式恰巧是 01,
这边这个箭头就是这个 --
所以,这是一个很简单的状态机 --
在实验中您将需要对其进行修正,
因为它有一个错误 --
但是,这里的这个状态机将会
在两个状态之间轮换,
实现平稳的右转。
所以,右侧电机 --
在这里右侧和左侧电机将会 --
我们偏左了。
所以,我们想要右转。
为了做到这一点,我将会切换右侧电机,
并使左侧电机保持高电平。
我将会在 C 代码中放入这两个
条目。
我将会每次构建一点。
让我们来看看这个。
这便是我们在寻找的,对吧?
这是我们曾尝试解决的问题。
那就是,如果我知道我偏左了 --
我知道我偏左了,因为上次看时,
我是在偏左位置 --
现在完全黑屏了。
我处于迷路状态。
我知道,我之前是在偏左位置,
而且现在我完全看不到线路了,
那么我有很大的可能性是偏左了。
我不可能跳过线路。
它不会跳,
也不会飞。
所以,我不可能偏右。
所以,一定是偏左。
同样,这在 C 代码中体现在这里。
在状态转换表中则是向刚才那样。
在状态转换图中也有相应的表现
形式。
接下来,在转弯时,我将会如何做?
我将会急转弯。
我们实际上将会
停止右侧电机 --
并向右急转弯。
我们现在偏左。
我们将会向右急转弯,
方法是使一个电机完全停转,而另一个电机仍然转动。
下面说一下另外一种情况。
现在我偏--
之前我在线路中央。
现在,右侧传感器黑屏了。
右侧传感器黑屏意味着我刚才的位置偏右了。
同样,表格中的这一点是与
这个转换图中的这里对等的。
如果我之前在偏右位置 --
好的,然后我们将通过在这两者
之间来回切换来切换状态。
同样,如果我只是稍微偏右,
如果输入为 10,它将会在这两者
之间循环,导致一个引脚变成高电平,
另一个则停止。
就像偏左时一样,
判断偏右的依据是,
我之前处于偏右状态。
现在我看到完全黑屏了。
我现在迷路了。
我将会认为我处于偏右位置。
我将会完全停止左侧电机,
使机器人向左急转弯,
因为我现在偏右。
同样,这三者是一一对应的。
这里的这个箭头代表状态转换表中的
这个点和 C 代码中的这里。
我们已经介绍了一些奇怪的情况。
这一个并不奇怪。
它表达的是 --好吧,这些也比较奇怪。
这些才是真正的奇怪。
有时,我们不得不为其填充条目。
您不得不为它们提供一个条目。
但是其中的一部分根本就没有意义。
我在线路上。
然后,嘣 --我突然远离线路。
假设您使用的是一条没有终点的线路,
假设您的教授给出了这样的傻子线路,
这种情况便有可能发生,
上一秒您还在线路上,
下一秒就完全脱离了线路。
这便是我们选择50 毫秒的原因。
您无法使其实际发生。
这太快了,机器人实际上不可能发生这种情况。
但是我们不得不进行猜测。
所以我将会进行猜测。
偏左还是偏右,可能性各占一半。
我随意选择一个。
这里是另外两个实际上也不可能发生的情况,
因为控制器的运行速度要比机器人的
移动速度快得多。
那就是,我之前在偏左位置。
现在,传感器表示,嘿,伙计,您偏右了。
我在这里假设这种情况有可能发生。
这是我的线路。
我的机器人沿着与线路垂直的方向
移动。
类似地,我之前是在偏右位置。
现在,我又偏左了。
所以这是一些奇怪的情况,它们可能永远都不会发生。
但无论如何我们得放一些东西在这里。
将这些东西整合在一起,
我们便得到了完整的状态转换图 --
状态转换表。
而在 C 代码中,在这里您可以看到,
这里的每个箭头都代表这里的一个
条目。
很明显,这是一个一一对应的映射,两方具有
完全相同的信息。
所以,我将会以比机器人的移动速度
快得多的速度运行我的有限状态机。
这里是实际的 C 代码。
我实际上会将这些代码加载到某个机器人上。
机器人将会沿线路移动 -- 一定程度上。
我说过,使用更多的状态时,
效果会更好。
而且真实机器人上的传感器
实际上有 8 位,而不是仅仅 2 位。
但是,它的代码
将会与我们在交通信号灯示例中看到的非常相似。
让我来全程演示一下。
好的,这是我的结构元素。
同样,每个状态都有一个 2 位输出、一个等待时间
和四个次态,因为有两个端点。
总共只有三个状态。
这是一种基于指针的东西,所以它在 C 代码中的
实际名称是指针。
这里是我们刚刚绘制的状态转换表,
其中包括输出值、等待时间和
次态,其中次态会因输入是 00、01、
10 和 11 而有所不同。
好的,该状态机 --
就像我说的,这个在实际的机器人上运行。
我将时钟调得很快。
到第 12 章时,我将会介绍如何运行电机。
简单来说,它会使电机停止。
然后,我们将会提供输出。
同样,我们将会在
模块 13 中学习如何向电机提供输出。
但是,电机输出是首先完成的部分。
时间延迟,我们将会在第 9 章中学习
如何使实际的状态机发生延迟。
然后是在第 6 章中,我们已经学习了
如何运行传感器输入,以读取输入。
所以,这里是读取输入。
然后,这是状态转换,
给出了现态、输入的值,
也就是 0、1、2 或 3 --
以及次态。
好的,最后总结一下,我们已经完成了第二个
有限状态机。
在上一个讲座结束时,我曾提到,
我真的觉得这是您工具箱里的一个很好的工具,
因为您可以通过这种抽象
方式解决许多这种
类型的问题 --
这种抽象方式也可以说是一种系统,您会有输入、输出,
您知道的情况不仅取决于当前的输入,
还取决于之前的输入。
希望您喜欢本次实验。
在您的职业生涯中,您将会发现,
这些有限状态机将是您工具箱里的
一个极好的工具。
课程介绍
共计4课时,51分45秒
猜你喜欢
换一换
推荐帖子
- 无线传输的电能质量监测系统电路
- 电能质量的实时监测是提高生产效率、节能减排、安全生产的关键,本文针对东莞高科技产业园对电能质量的要求,提出了一种基于ZigBee无线传感网络的电能质量实时监测系统。该系统不仅具有强大的测量和通信功能,而且具有组网方便、动态拓扑、低成本、大容量、高可靠性的特点,能很好地满足高科技工业园电能质量实时监测的实际需要。 系统概述 &nbs...
-
fish001
模拟与混合信号
- 几种主流嵌入式架构的代码压缩技术
- 对于嵌入式软件而言,代码尺寸是越小越好。压缩代码以适应受到成本或空间限制的存储子系统已经成为嵌入式系统开发的一项重要事务。ARM、MIPS、IBM以及ARC都提供了降低存储器占用的技术,本文将对这几种架构中代码压缩技术的实现进行比较分析。 如今,存储子系统的成本高于微处理器已不再稀奇。因此,选择一款能节约存储成本的处理器就变得很有意义。编写紧凑的代码只...
-
Aguilera
微控制器 MCU
- CCS6.2导入CCS3.3工程后报错解决办法
- 如题。 在CCS6.2中导入CCS3.3的工程后编译不通过,报错如下: undefined first referenced symbol in file codestart error #10234-D: unresolved symbols remain warning #10062-D: entry-point symbol “codestart” u...
-
fish001
微控制器 MCU
- MSP430:输入捕获
- 在做超声模块时用到 1 //捕获上升沿 2 void Capture_Pos(void) 3 { 4 P2SEL |= Echo; //选择P23作为捕捉的输入端子 Timer1_A 5 6  ...
-
灞波儿奔
微控制器 MCU
推荐文章
- 德州仪器在 2025 年 PCIM 上推出功率密度和效率解决方案 2025年05月08日
- 前沿动态 德州仪器 (TI) 于 5 月 6 日至 8 日在德国纽伦堡举办的电力转换与智能运动(Power Conversion, Intelligent Motion,PCIM)展览会上展示新的功率管理产品和设计。 德州仪器在展会上重点展示其在可再生能源、汽车、USB Type-C® 和 USB 充电 (PD)、机器人和运动控制等领域的先进半导体技术,包括: 新款...
- 工业市场正在快速回暖,德州仪器如何重塑电力电子市场? 2025年04月24日
- 日前,在德州仪器2025一季度财报电话会上,TI表示工业市场在连续七个季度环比下滑后,实现了高个位数增长,这可能预示着工业市场正在触底反弹。 而就在刚刚举行的慕尼黑电子展上海站上,TI围绕工业行业展示了多款新技术,其中能源相关行业是TI的重中之重,这其中不光包括了控制器,还包括了各类信号链产品。正如德州仪器中国区技术支持总监赵向源所说,TI重点关注光伏、储能、电动汽车充电...
- 强化中国市场战略布局,德州仪器正灵活应对全球关税挑战 2025年04月24日
- 在2025年第一季度的财报电话会议上,德州仪器(TI)高管团队详细阐述了公司对中国市场的长期关注,以及在当前复杂的地缘政治和关税环境下所采取的灵活应对策略。尽管全球经济不确定性加剧,TI通过其全球化制造布局和客户导向的服务模式,展现出强大的抗风险能力,并持续巩固其市场领导地位。 在整个财报会议上,大家最主要的问题都是围绕着新关税以及TI的应对措施来探讨。 德州仪器一季度营...
- 4月15日德州仪器携手库卡发布新一代工业机器人控制器,定义安全与效率新标杆 2025年04月21日
- 2025 年 4 月 15 日, 德州仪器 (TI)与工业 机器人 四大家族之一的库卡(KUKA)联合举办产品发布会,正式推出基于 TI TDA4 芯片 平台的新一代工业机器人 控制器 。此次合作以 “安全升级、性能突破” 为核心,针对工业机器人面临的严苛安全标准与 智能化 需求,打造出兼具高安全性、高扩展性及高性价比的解决方案,标志着工业机器人控制器进入 “单芯多核异构”...