用EV3中的设计模式编写更好的代码– LEGO Engineering

用EV3中的设计模式编写更好的代码– LEGO Engineering

一个 软件设计模式 是针对常见问题的可重用解决方案。 它不是最终的解决方案,而是用于在各种不同情况下解决问题的模板。 使用设计模式可以节省大量时间,并有助于更好地理解,分析和组织代码以获得最佳解决方案。

在这篇文章中,我们建议使用以下语言: 设计模式 描述EV3软件中一些最常见的编程结构,并概述以下设计模式:

  • 简单的设计模式(顺序编程)
  • 通用设计模式(循环编程)
  • 并联回路设计模式
  • 主从设计模式
  • 状态机设计模式

简单的设计模式

我们可以对EV3机器人进行编程的最简单方法之一是将不同的动作块按顺序放置到序列光束上,或者 顺序,我们希望它们被执行。

例如,要使标准的两轮机器人执行一系列动作,我们可以从左到右拖出所需的动作块,并按需要排列它们。 每个块一次执行一次,一直到程序结束。 我们称这种纯粹的顺序方法为 简单的设计模式

使用顺序设计模式的示例

请注意,这些块通过数据线相互连接,这被称为 顺序光束,并且序列光束通常是隐藏的。 尽管我们通常认为这些块是从左到右执行的,但实际上,顺序束决定了执行的顺序。 要使顺序光束可见,请单击任意模块右侧的连接器,随后的模块将移至右侧。

1617827553 668 用EV3中的设计模式 - 用EV3中的设计模式编写更好的代码– LEGO Engineering
使序列光束可见

按顺序开始设计程序是很自然的。 但是,在大多数情况下,我们需要机器人处理的事件并不是按照事先已知的顺序发生的。 例如,如果某些动作需要重复怎么办? 如果需要在不同的特定条件下采取不同的措施怎么办? 如果采取行动的顺序取决于当前情况怎么办? 如果我们需要在特定情况下停止该程序怎么办?

要实现他的这种行为,我们需要一个更复杂的设计模式。

通用设计模式

当我们不得不重复一系列动作时,我们需要比顺序设计模式更复杂的结构。 在里面 通用设计模式,该结构由一些初始操作,一个包含主程序的循环以及一些关闭操作组成。 循环的主程序可以简单地是一个顺序程序,但是如果需要的话可以复杂得多。

1617827553 247 用EV3中的设计模式 - 用EV3中的设计模式编写更好的代码– LEGO Engineering
EV3中的一般设计模式
1617827553 993 用EV3中的设计模式 - 用EV3中的设计模式编写更好的代码– LEGO Engineering
通用设计模式示例

例如,让我们想象一个带有颜色传感器的轮式机器人,它向前驱动,每当它越过绿线便发出蜂鸣声,并在红线处停止。 我们不知道机器人在红线之前会遇到多少条绿线–甚至在到达红线之前它根本看不到。 那么,如何使用严格的顺序模式对机器人进行编程? 除非我们确切地知道挑战有多少条线以及它们放置的顺序,否则我们将无法。 如果更改或删除了一行,则该程序将无法再运行。 相反,我们可以使用常规设计模式。

当然,我们可以在循环的每次迭代中依次执行许多动作,但是我们也可以使用嵌套的开关块为各种动作建立优先级顺序,而不必知道程序运行时它们将以什么顺序发生。

例如,如果我们希望我们的机器人不仅在它越过每条线时发出蜂鸣声,而且每次遇到障碍物时都改变方向,该怎么办? 我们可以将颜色传感器开关嵌套在距离传感器开关内,反之亦然,这取决于应首先检查哪种情况。

1617827554 795 用EV3中的设计模式 - 用EV3中的设计模式编写更好的代码– LEGO Engineering
带有嵌套开关的常规设计模式示例

如果我们需要同时以不同的速度重复执行不同的操作怎么办? 在主循环内分割序列光束是不够的,因为直到最长的分割序列完成,主循环才会重复! 解决方案是并行运行不同的循环。

并联回路设计模式

并联回路设计模式 是一种基本的编程策略,允许同时控制不同的独立任务。

1617827554 159 用EV3中的设计模式 - 用EV3中的设计模式编写更好的代码– LEGO Engineering
并联回路设计模式

假设在上一个示例的第一个版本的基础上,除了前进并在穿过每条绿线时发出蜂鸣声之外,我们还希望机器人只要在其路径中检测到障碍物时就激活其抓爪。 显然,抓取器需要独立运行,并且运行速度与主程序不同。 我们可以做到这一点的唯一方法是同时运行两个并行循环,一个用于主程序,另一个用于抓手。

1617827555 641 用EV3中的设计模式 - 用EV3中的设计模式编写更好的代码– LEGO Engineering
并行循环设计模式示例

注意:必须注意避免 比赛条件,当多个循环(或多个分支)中的程序块试图同时控制同一资源时,可能会发生这种情况。 例如,如果并联回路中的电动机块尝试控制同一电动机,则电动机的行为将取决于回路的时序。 比赛条件通常会导致不可预测的不良结果。

但是现在的问题是:我们如何在并行循环设计模式的不同循环之间进行控制,协调和通信? 我们可以使用数据线吗? 答案根本不是,因为数据线将不允许循环并行运行。 实际上,连接到数据线的块将不会执行,直到执行了连接在数据线左侧的块。 这就是为什么我们将顺序束用作非常特殊的数据线,以确保顺序执行程序块的原因。 答案是:我们需要使用 变数

主从设计模式

主从设计模式 当您同时运行两个或多个进程,但运行速度不同且需要某种协调时,此功能很有用。

一个环路充当主环路,另一个环路充当从环路。 主回路控制所有从回路,并使用以下方式与它们进行通信 变数

1617827555 804 用EV3中的设计模式 - 用EV3中的设计模式编写更好的代码– LEGO Engineering
EV3中的主/从设计模式架构

例如,假设我们要构建一个接近传感器,当存在物体时会发出哔哔声。 此外,我们如何以这种方式实现这一目标,即物体越近,机器人发出的哔哔声越快? 显然,蜂鸣的重复速度将与障碍物的接近程度成正比。 此外,蜂鸣器接近功能将必须与机器人正在执行的其他任何操作并以自己的速度并行运行。 如果已经在主程序循环(主循环)中读取了距离,则一种解决方案是将该值存储在变量中,然后在处理蜂鸣声的单独循环(从属循环)中读取存储的值。

1617827556 895 用EV3中的设计模式 - 用EV3中的设计模式编写更好的代码– LEGO Engineering
主/从设计模式示例

如果我们分析这两个循环,我们可以说它们的执行速度如何?
尽管读取传感器会花费一些时间(例如在此示例的主循环中),但播放声音并等待重播声音(例如在从属循环中)大概要花更长的时间才能执行。 由于从属回路的运行速度比主控回路慢,因此我们可以预期主控回路设置的某些距离值将被从属回路丢失。 尽管如此,蜂鸣声似乎还是与障碍物距离成正比。 在这种情况下,从属环路的运行速度比主环运行慢并不重要。

有关主/从设计模式的更多示例,请参见以下文章:

状态机设计模式

在简单设计模式中,顺序执行块。 顺序束从左到右建立程序块的执行顺序。 尽管顺序编程是最常见且通常更明显的编程风格之一,但从长远来看,它并不总是最有效,灵活或可理解的方法。

例如:

  • 如果我们必须更改一系列动作的执行顺序怎么办? 例如,如果触发不同动作的传感器事件发生了变化。
  • 如果我们必须重复执行一次或多次操作该怎么办? 例如,向一侧重复几次转弯,或跨过几种不同的色线前进。
  • 如果仅在满足特定条件时才必须执行一系列代码怎么办? 例如,如果检测到障碍物,请绕过障碍物,否则沿线行驶。
  • 如果我们想怎么办 在满足特定条件时停止执行程序,而不必等到序列的其余部分完成吗?

我们如何改善 顺序编程 使其功能更强大,更紧凑,更易于理解且更易于调试? 答案是:通过使用 状态机的设计模式。

一个 状态机 是由有限数量的 状态 以及确定系统如何从一种状态过渡到另一种状态的规则。 在EV3软件中,这可以通过使用包含每个状态的大小写的Switch块来实现。 每个案例包含 功能码 其中包含要在当前状态下执行的代码和一个 过渡函数 设置下一个状态。

1617827556 693 用EV3中的设计模式 - 用EV3中的设计模式编写更好的代码– LEGO Engineering
EV3中状态机设计模式的基本元素

程序通常会具有初始化状态,然后是默认状态-例如,读取传感器以做出决定并调用其他状态或采取不同的动作-最后,它可以具有关闭状态以执行某些动作在结束程序之前。

在以后的文章中,我们将更深入地研究状态机,但是暂时,请参阅这篇文章:

用EV3中的设计模式 - 用EV3中的设计模式编写更好的代码– LEGO Engineering这篇文章的灵感来自于NI的LabVIEW 核心1核心2 课程,并基于我的第13单元 LEGO Mindstorms NXT和EV3的教师入门课程

以下两个选项卡更改了下面的内容。
1617827556 234 用EV3中的设计模式 - 用EV3中的设计模式编写更好的代码– LEGO Engineering

我从事乐高教育机器人工作多年,并参与过许多学校和会议。 我创办了BOGATECH机器人技术研讨会,旨在为学生,教育中心和教师提供活动和支持。 我的课程“讲机器人的故事”被选为inGenious Teachers竞赛的欧盟前7名决赛选手之一。 我的主要兴趣之一是与其他老师合作研究如何更创造性地教授课程和非课程科目。

1617827556 234 用EV3中的设计模式 - 用EV3中的设计模式编写更好的代码– LEGO Engineering

zChocolat.com 被《顶级消费者评论》评为“ 2019年最佳巧克力商店”,被食品网络评为“顶级5巧克力礼物”,被《华尔街日报》评为“网络上鲜为人知的最佳礼物网站”,被《华尔街日报》评为“最佳巧克力商店”。 洛杉矶时报,《纽约时报》的“最佳当下创意”,华盛顿大学邮报的“超越现实”,并在TrustPilot上维持4.9 / 5的评分,并有超过2K的特殊评论。

通过DHL向全球244个国家/地区提供世界一流的法国巧克力,由世界冠军巧克力大师Pascal Caffet手工制作。

Novakid学校 是一所针对儿童(3岁以上)的在线英语学校,提供几种类型的私人课程包,根据课程数量和教师职业而有所不同。

更多内容

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

Scroll to Top