首页 > 应用与设计 > 电器 > Service Robots > 服务型机器人 > TI机器人系统学习套件(TI-RSLK) >

服务型机器人

最新课程

热门课程

TI-RSLK 模块 14 - 讲座视频 - 实时系统 - 边沿触发中断

大家好,我是 Jon Valvano。 在本视频中,我们将了解实时系统。 我们将了解不同类型的任务, 以及如何评估某个系统是否 是实时系统,然后我们要 将实时系统划分为不同的类别。 该模块的重点在于, 确保您的机器人对重要和灾难性的事件 作出响应。 我们用于演示的特定事件是碰撞。 那么,当我们发生碰撞时, 这些传感器之一将被触发, 我们的响应将是停止电机。 但是,在我们深入到具体细节之前, 让我们先来讨论一下实时系统的 一些共性。 “任务”是我们将必须执行的一个 软件事件。 我们可以把它们划分为若干个类别。 以同一 Δt 为周期 而发生的事件 -- 而发生的事件 -- 叫做一个周期性事件。 您的机器人中存在大量的此类事件。 在数据采集过程中对传感器进行采样 -- 这是一个周期性发生的实时事件。 运行您的数字控制器也是一个周期性事件。 还有我们将使用定时器 -- 不管是 systick 还是定时器 A -- 来让周期性事件发生。 此外,还存在其他类型的事件, 它们是非周期性的, 例如输入、输出。 如果我们预期它会发生 -- 也就是说,如果预期事件如输入输出等 可以用中断进行处理,并且我们想要 管理它们 -- 比如当我们使用 WiFi 和蓝牙进行串口收发, 管理它们 -- 比如当我们使用 WiFi 和蓝牙进行串口收发, 那就是一个非周期性事件。 因此,我们预期有字符串会输入, 但它是没有时间规律的, 这就是非周期性的含义。 我们将在本章中执行的事件是时有时无的, 它的发生是无法预料的。 如果我们有一个无法预料但很重要的事件, 我们需要处理它。 这是我们的碰撞事件,如果机器人撞到墙, 将发生该事件,并且会触发 传感器之一。 这些传感器中的一个会触发一个中断, 我们将通过停止电机来进行响应。 那么,为了评估实时特性, 我们需要几种性能测量指标。 第一种是延迟。 如果我们定义事件发生的时间 -- 该时间可能是对某个信号进行采样,或是有新输入, 或者有输出空闲,或者我们有一次碰撞 -- 这些是我们将处理的 触发事件。 那么,如果我们指定 t1 为触发事件所发生的时间, 我们可以把 t2 定义为该事件的识别时间。 那么它会触发一个中断, 中断将运行,我们开始注意到它。 那么,这是这个软件事件的开始。 这段时间 -- t2 减去 t1 -- 被定义为延迟。 这是识别事件已发生 所需的时间。 请注意,在某些应用中, 这是很重要的参数。 但特定的测量,我们 -- 我们下面需要考虑的是 该事件所对应的服务。 那么,如果我们考虑该服务 -- 也就是对该事件的实际响应, 也就是对该事件的实际响应, 我们现在可以定义第三个时间点, 它是服务完成的时间。 我们可以定义响应时间 为创建该请求和 为该请求提供服务之间的时间 -- 响应时间。 好,我们让这一切实现的方法是 利用优先级。 在前面的模块中,我们已经讨论了优先级, 当我们利用分配优先级来实现 我们的实时系统时,它将变得非常重要。 好,那么让我们来定义实时系统。 我们将通过三种方式来定义它。 第一种是当大多数人在提到实时系统这个名字时 所认为的归类。 这种系统里,我们尝试解决的事件是如此重要 -- 生命攸关,人生大事 -- 以至于我们决不会错过它。 这是一种强实时系统。 如果您撞到墙,您最好停止电机,对吧? 它不是可选的。 您不能有时停止电机, 而有时又不这么做。 如果您不停止电机, 机器人将毁坏它自己, 我们将得到一堆损坏的部件。 因此,在关系到系统安全的情况下 -- 此时生命受到威胁,或机器受到威胁 -- 我们在分配任务时必须保证响应时间 或者延迟时间 小于某特定值。 这样延迟就始终小于 某个很小的范围。 不是有时候, 不是大多数时候, 而是始终如此。 这是强实时系统的特性。 您可以想一下如何来实现这个系统, 其方法是通过设置触发事件来触发中断。 其方法是通过设置触发事件来触发中断。 然后,我要将它标记为高优先级。 这就是我实现实时的方法。 我们将在下一个视频中看到, 如何使用机器人碰撞开关来实现上述功能。 除了上述系统外,还存在其他类型的实时系统 -- 它们不一定适用于机器人 -- 它们属于不同的类型。 例如,在音频流或视频流中, 我们可以定义一种严格实时系统, 以实现所需的效果,例如, 如果我以流媒体方式传输音频或视频, 那么会有数据包流入或流出,对吧? 我们希望这些数据包始终存在。 我们希望一直拥有它们。 但是,有时某个数据包会丢失, 有时碰巧其中的一个数据包会丢失。 它错过了它的最后传输期限。 而当到了下一个数据包出现的时间时,它才出现。 那么,我们继续传输,但我们丢失了一个数据包。 这种情况不会威及生命,但错过了最后期限 -- 会导致质量损失。 它们表现为图像模糊,声音嘈杂, 视频跳帧…… 但丢失了一个数据包的数据流仍具有价值, 只是价值变小了。 这是一种严格实时系统。 对于互联网流媒体,我们会经常看到它。 对于机器人,我们不会经常看到它, 但对于互联网 或视频/音频流,我们会经常看到它。 还是另一种某些人认为具有实时特性的系统, 它是一种弱实时系统。 这意味着,如果我有一个延迟 -- 比如说我有一个触发事件, 并且我有一个期望的响应时间, 也就是说我预期的延迟有一个期待值。 我希望该延迟较小。 这是触发事件,这是需求, 这是请求,这是期望。 这是请求,这是期望。 我们希望在这个时间点得到该数据, 或者完成软件响应。 但如果它发生延迟 -- 如果它发生延迟,所发生的是, 该响应的价值 -- 如果我们画出延迟 -- 如果我们画出延迟 -- 如果我们画出数据或系统的价值 -- 我们可以通过多种方式对价值进行定义。 我们可以在成本方面对它进行定义, 也可以在信噪比方面对价值进行定义。 假设我们具有某种方法来测量 该数据包的价值。 如果该数据包的延迟超过了期望值 -- 再说一次,这是时间, 这是用信噪比或价格衡量的 所降低的价值。 现在,可能存在一个点 -- 比如对于严格实时 -- 如果您该数据包延迟,那么它没有任何价值。 就像在早上送报纸, 比如说您在早上 7 点起床, 您在早上 9 点去上班, 您的报纸应该在早上 5:00 送达。 因此报童敲您的门 -- 嗯,不会敲您的门 -- 报童把您的报纸放在您的门口。 如果它在早上 5:00 和上午 11:00 (口误,应为 7:00)之间出现, 那么它具有完整的价值。 但是,如果它在7:15 出现,您会有点抓狂, 但它仍有一些价值。 如果它在 8 点出现,还是有一些价值。 如果它直到 9 点才出现, 您会有点抓狂。 但是,如果它在 9:01 出现, 而此时您已经去上班了, 那么它没有任何价值。 因此,某些数据的价值会随着延迟的增加而减小。 因此,某些数据的价值会随着延迟的增加而减小。 这就是弱实时系统。 计算机世界中存在大量的弱实时系统, 计算机世界中存在大量的弱实时系统,它们 一般和内存读取、磁盘 I/O 以及其他事情相关, 而该数据的价值 -- 该数据的延迟将导致价值降低。 然后,在某个点,它不再具有价值。 再说一次,在机器人世界, 我们所讨论的实时系统 指的是强实时系统。 说到机器人,也有一些机器人操作 完全不是实时的。 完全不是实时的。 下面是实时系统的特性。 如果您有 10 项任务, 其中一些任务并不是很重要, 如果您有 10 项任务, 其中一些任务并不是很重要, 例如,如果您考虑把液晶显示器 用于监控, 如果您延迟液晶显示器的输出, 机器人仍会以完全相同的功能进行赛跑。 还有您正在闪烁的 LED,我们用它进行调试, 如果 LED 不在正确的时间点闪烁, 不会发生真正的价值损失。 因此,我们可以查看系统的内部, 找到一些系统必须执行 但没有任何实际价值的操作。 我们要做的另一件事是 -- 有些任务没有任何价值 -- 如果丢失数据不会随时间流逝而造成损失, 我们将把它们放入主程序。 因此您将看到 -- 如果任务不重要, 我们可以把它放入主程序。 但对于确实重要的东西, 我们将其定义为高优先级。 我们这里说的是中断优先级,高优先级 比中等优先级更重要,而中优先级比 低优先级更重要。 因此,我们将使用中断优先级 对任务的相对重要性进行排序。 通过这种方法,对于高优先级事件, 我们将使其具有很低的延迟、 很短的响应时间。 对于低优先级事件,我们仍将具有可接受的响应时间, 对于低优先级事件,我们仍将具有可接受的响应时间, 但不一定这么高。 但不一定这么高。 因此,在我们进行性能测量时, 恰当地分配优先级对我们而言非常重要。 为了建立实时系统, 我们必须要做的第二件事是, 需要禁用中断的情况要非常非常小心。 需要禁用中断的情况要非常非常小心。 比如有一个 C 语言函数, 您可以调用它,它会将设置 I=1, 这将延迟您的所有中断。 我们在禁用中断时应非常谨慎, 因为从禁用中断到重新启用之间的时间 -- 因为从禁用中断到重新启用之间的时间 -- 这段时间 会直接导致中断延迟, 从而影响实时性。 那么,这就是我要做的第二件事。 我要做的第三件事 -- 尤其是,如果我有大量的中断 -- 那么,如果您考虑与这类似的 中断程序,现在我要说 这是高优先级, 这是中优先级, 这是低优先级。 重要的一点是, 高优先级和中优先级的中断服务函数要尽量短, 因为执行该高优先级服务函数所花费的时间实际上 会导致在中优先级事件上发生延迟。 类似地,执行高优先级所花费的时间和 执行中优先级所花费的时间将导致 在低优先级事件上发生延迟。 那么,我们将尝试最大程度地 减少中断服务例程内的执行时间, 从而减小其他中断的延迟。 因此,我们尝试一些方式 例如避免循环等。 如果您有 10 件事情要做, 与其在一个中断里执行全部 10 件事情 不如进行分解,创建 10 个中断, 这样可以使我们的中断服务程序尽可能短 -- 尤其是当存在循环而导致时间延迟时, 那会带来灾难性的后果, 我们不能让它发生。 中断服务函数中不能有长时间延迟。 中断服务函数中不能有长时间延迟。 因此我们看到,例如对于红外循线传感器, 在中断服务程序中的确有 10 微秒的延迟, 在中断服务程序中的确有 10 微秒的延迟, 我们的确有该延迟。 但我们没有在该传感器中 使用 1 毫秒延迟, 这是我们良好的程序设计习惯。 好,再说一次,将影响响应时间 以及延迟的因素是, 我们必须完成指令 -- 指令通常很短。 如果我们的系统在运行时有禁用中断的操作, 那么延迟可能很长, 因此这是我们需要注意的事情。 第三件事情是,如果程序中有低优先级或中优先级 的中断服务函数,那么运行高优先级中断所需的时间 可能会影响延迟。 很显然,延迟和响应时间之间的差异 实际上就是执行中断服务所需的时间, 所以这是一个关键。 总结一下,我们讨论了实时系统。 我们感兴趣的实时系统是 具有有限延迟的系统, 这是因为,我们将在下一个 视频中解决的特定问题是当有碰撞发生时, 线传感器会被触发, 然后需要停止电机作为响应。 这将是机器人的一项重要任务, 用于保护它自己。 好,希望您喜欢本次实验。 再说一次,在下一个视频中, 我将向您展示一些细节。 316

大家好,我是 Jon Valvano。

在本视频中,我们将了解实时系统。

我们将了解不同类型的任务,

以及如何评估某个系统是否

是实时系统,然后我们要

将实时系统划分为不同的类别。

该模块的重点在于,

确保您的机器人对重要和灾难性的事件

作出响应。

我们用于演示的特定事件是碰撞。

那么,当我们发生碰撞时, 这些传感器之一将被触发,

我们的响应将是停止电机。

但是,在我们深入到具体细节之前,

让我们先来讨论一下实时系统的

一些共性。

“任务”是我们将必须执行的一个

软件事件。

我们可以把它们划分为若干个类别。

以同一 Δt 为周期

而发生的事件 --

而发生的事件 --

叫做一个周期性事件。

您的机器人中存在大量的此类事件。

在数据采集过程中对传感器进行采样 --

这是一个周期性发生的实时事件。

运行您的数字控制器也是一个周期性事件。

还有我们将使用定时器 --

不管是 systick 还是定时器 A -- 来让周期性事件发生。

此外,还存在其他类型的事件, 它们是非周期性的,

例如输入、输出。

如果我们预期它会发生 --

也就是说,如果预期事件如输入输出等

可以用中断进行处理,并且我们想要

管理它们 -- 比如当我们使用 WiFi 和蓝牙进行串口收发,

管理它们 -- 比如当我们使用 WiFi 和蓝牙进行串口收发,

那就是一个非周期性事件。

因此,我们预期有字符串会输入, 但它是没有时间规律的,

这就是非周期性的含义。

我们将在本章中执行的事件是时有时无的,

它的发生是无法预料的。

如果我们有一个无法预料但很重要的事件,

我们需要处理它。

这是我们的碰撞事件,如果机器人撞到墙,

将发生该事件,并且会触发

传感器之一。

这些传感器中的一个会触发一个中断,

我们将通过停止电机来进行响应。

那么,为了评估实时特性,

我们需要几种性能测量指标。

第一种是延迟。

如果我们定义事件发生的时间 --

该时间可能是对某个信号进行采样,或是有新输入,

或者有输出空闲,或者我们有一次碰撞 --

这些是我们将处理的

触发事件。

那么,如果我们指定 t1 为触发事件所发生的时间,

我们可以把 t2 定义为该事件的识别时间。

那么它会触发一个中断,

中断将运行,我们开始注意到它。

那么,这是这个软件事件的开始。

这段时间 -- t2 减去 t1 --

被定义为延迟。

这是识别事件已发生

所需的时间。

请注意,在某些应用中, 这是很重要的参数。

但特定的测量,我们 --

我们下面需要考虑的是

该事件所对应的服务。

那么,如果我们考虑该服务 --

也就是对该事件的实际响应,

也就是对该事件的实际响应,

我们现在可以定义第三个时间点,

它是服务完成的时间。

我们可以定义响应时间

为创建该请求和

为该请求提供服务之间的时间 -- 响应时间。

好,我们让这一切实现的方法是

利用优先级。

在前面的模块中,我们已经讨论了优先级,

当我们利用分配优先级来实现

我们的实时系统时,它将变得非常重要。

好,那么让我们来定义实时系统。

我们将通过三种方式来定义它。

第一种是当大多数人在提到实时系统这个名字时

所认为的归类。

这种系统里,我们尝试解决的事件是如此重要 --

生命攸关,人生大事 -- 以至于我们决不会错过它。

这是一种强实时系统。

如果您撞到墙,您最好停止电机,对吧?

它不是可选的。

您不能有时停止电机, 而有时又不这么做。

如果您不停止电机, 机器人将毁坏它自己,

我们将得到一堆损坏的部件。

因此,在关系到系统安全的情况下 --

此时生命受到威胁,或机器受到威胁 --

我们在分配任务时必须保证响应时间

或者延迟时间

小于某特定值。

这样延迟就始终小于

某个很小的范围。

不是有时候,

不是大多数时候,

而是始终如此。

这是强实时系统的特性。

您可以想一下如何来实现这个系统,

其方法是通过设置触发事件来触发中断。

其方法是通过设置触发事件来触发中断。

然后,我要将它标记为高优先级。

这就是我实现实时的方法。

我们将在下一个视频中看到,

如何使用机器人碰撞开关来实现上述功能。

除了上述系统外,还存在其他类型的实时系统 --

它们不一定适用于机器人 --

它们属于不同的类型。

例如,在音频流或视频流中,

我们可以定义一种严格实时系统,

以实现所需的效果,例如, 如果我以流媒体方式传输音频或视频,

那么会有数据包流入或流出,对吧?

我们希望这些数据包始终存在。

我们希望一直拥有它们。

但是,有时某个数据包会丢失,

有时碰巧其中的一个数据包会丢失。

它错过了它的最后传输期限。

而当到了下一个数据包出现的时间时,它才出现。

那么,我们继续传输,但我们丢失了一个数据包。

这种情况不会威及生命,但错过了最后期限 --

会导致质量损失。

它们表现为图像模糊,声音嘈杂,

视频跳帧……

但丢失了一个数据包的数据流仍具有价值,

只是价值变小了。

这是一种严格实时系统。

对于互联网流媒体,我们会经常看到它。

对于机器人,我们不会经常看到它, 但对于互联网

或视频/音频流,我们会经常看到它。

还是另一种某些人认为具有实时特性的系统,

它是一种弱实时系统。

这意味着,如果我有一个延迟 --

比如说我有一个触发事件,

并且我有一个期望的响应时间,

也就是说我预期的延迟有一个期待值。

我希望该延迟较小。

这是触发事件,这是需求,

这是请求,这是期望。

这是请求,这是期望。

我们希望在这个时间点得到该数据,

或者完成软件响应。

但如果它发生延迟 --

如果它发生延迟,所发生的是,

该响应的价值 --

如果我们画出延迟 --

如果我们画出延迟 --

如果我们画出数据或系统的价值 --

我们可以通过多种方式对价值进行定义。

我们可以在成本方面对它进行定义,

也可以在信噪比方面对价值进行定义。

假设我们具有某种方法来测量

该数据包的价值。

如果该数据包的延迟超过了期望值 --

再说一次,这是时间,

这是用信噪比或价格衡量的

所降低的价值。

现在,可能存在一个点 --

比如对于严格实时 --

如果您该数据包延迟,那么它没有任何价值。

就像在早上送报纸,

比如说您在早上 7 点起床,

您在早上 9 点去上班,

您的报纸应该在早上 5:00 送达。

因此报童敲您的门 --

嗯,不会敲您的门 --

报童把您的报纸放在您的门口。

如果它在早上 5:00 和上午 11:00 (口误,应为 7:00)之间出现,

那么它具有完整的价值。

但是,如果它在7:15 出现,您会有点抓狂,

但它仍有一些价值。

如果它在 8 点出现,还是有一些价值。

如果它直到 9 点才出现,

您会有点抓狂。

但是,如果它在 9:01 出现, 而此时您已经去上班了,

那么它没有任何价值。

因此,某些数据的价值会随着延迟的增加而减小。

因此,某些数据的价值会随着延迟的增加而减小。

这就是弱实时系统。

计算机世界中存在大量的弱实时系统,

计算机世界中存在大量的弱实时系统,它们

一般和内存读取、磁盘 I/O 以及其他事情相关,

而该数据的价值 --

该数据的延迟将导致价值降低。

然后,在某个点,它不再具有价值。

再说一次,在机器人世界,

我们所讨论的实时系统

指的是强实时系统。

说到机器人,也有一些机器人操作

完全不是实时的。

完全不是实时的。

下面是实时系统的特性。

如果您有 10 项任务, 其中一些任务并不是很重要,

如果您有 10 项任务, 其中一些任务并不是很重要,

例如,如果您考虑把液晶显示器

用于监控,

如果您延迟液晶显示器的输出,

机器人仍会以完全相同的功能进行赛跑。

还有您正在闪烁的 LED,我们用它进行调试,

如果 LED 不在正确的时间点闪烁,

不会发生真正的价值损失。

因此,我们可以查看系统的内部,

找到一些系统必须执行

但没有任何实际价值的操作。

我们要做的另一件事是 --

有些任务没有任何价值 --

如果丢失数据不会随时间流逝而造成损失,

我们将把它们放入主程序。

因此您将看到 --

如果任务不重要,

我们可以把它放入主程序。

但对于确实重要的东西,

我们将其定义为高优先级。

我们这里说的是中断优先级,高优先级

比中等优先级更重要,而中优先级比

低优先级更重要。

因此,我们将使用中断优先级

对任务的相对重要性进行排序。

通过这种方法,对于高优先级事件,

我们将使其具有很低的延迟、

很短的响应时间。

对于低优先级事件,我们仍将具有可接受的响应时间,

对于低优先级事件,我们仍将具有可接受的响应时间,

但不一定这么高。

但不一定这么高。

因此,在我们进行性能测量时,

恰当地分配优先级对我们而言非常重要。

为了建立实时系统,

我们必须要做的第二件事是,

需要禁用中断的情况要非常非常小心。

需要禁用中断的情况要非常非常小心。

比如有一个 C 语言函数,

您可以调用它,它会将设置 I=1,

这将延迟您的所有中断。

我们在禁用中断时应非常谨慎,

因为从禁用中断到重新启用之间的时间 --

因为从禁用中断到重新启用之间的时间 --

这段时间

会直接导致中断延迟,

从而影响实时性。

那么,这就是我要做的第二件事。

我要做的第三件事 --

尤其是,如果我有大量的中断 --

那么,如果您考虑与这类似的

中断程序,现在我要说

这是高优先级,

这是中优先级,

这是低优先级。

重要的一点是,

高优先级和中优先级的中断服务函数要尽量短,

因为执行该高优先级服务函数所花费的时间实际上

会导致在中优先级事件上发生延迟。

类似地,执行高优先级所花费的时间和

执行中优先级所花费的时间将导致

在低优先级事件上发生延迟。

那么,我们将尝试最大程度地

减少中断服务例程内的执行时间,

从而减小其他中断的延迟。

因此,我们尝试一些方式

例如避免循环等。

如果您有 10 件事情要做,

与其在一个中断里执行全部 10 件事情

不如进行分解,创建 10 个中断,

这样可以使我们的中断服务程序尽可能短 --

尤其是当存在循环而导致时间延迟时,

那会带来灾难性的后果,

我们不能让它发生。

中断服务函数中不能有长时间延迟。

中断服务函数中不能有长时间延迟。

因此我们看到,例如对于红外循线传感器,

在中断服务程序中的确有 10 微秒的延迟,

在中断服务程序中的确有 10 微秒的延迟,

我们的确有该延迟。

但我们没有在该传感器中

使用 1 毫秒延迟,

这是我们良好的程序设计习惯。

好,再说一次,将影响响应时间

以及延迟的因素是,

我们必须完成指令 --

指令通常很短。

如果我们的系统在运行时有禁用中断的操作,

那么延迟可能很长,

因此这是我们需要注意的事情。

第三件事情是,如果程序中有低优先级或中优先级

的中断服务函数,那么运行高优先级中断所需的时间

可能会影响延迟。

很显然,延迟和响应时间之间的差异

实际上就是执行中断服务所需的时间,

所以这是一个关键。

总结一下,我们讨论了实时系统。

我们感兴趣的实时系统是

具有有限延迟的系统,

这是因为,我们将在下一个

视频中解决的特定问题是当有碰撞发生时,

线传感器会被触发,

然后需要停止电机作为响应。

这将是机器人的一项重要任务,

用于保护它自己。

好,希望您喜欢本次实验。

再说一次,在下一个视频中,

我将向您展示一些细节。 316

视频报错
手机看
扫码用手机观看
收藏本课程

相关下载

查看全部

视频简介

TI-RSLK 模块 14 - 讲座视频 - 实时系统 - 边沿触发中断

所属课程:TI机器人系统学习套件(TI-RSLK) 发布时间:2018.08.27 视频集数:69 本节视频时长:20:31
在该模块中,你将会学习如何创建一个用于碰撞检测的实时系统。
已有6人参与了讨论去论坛跟帖交流