《机器人编程实战》一一3.2 伪代码和绘制RSVP流程图

3.2 伪代码和绘制RSVP流程图
流程图绘制是一个用来制定目标对整个系统控制流程的RSVP,是一个可以包括任何一种循环、选择或决策的指令行线性序列。通过使用表示某种工作类型的特殊框符号,流程图解释了这个过程。方框内显示的文本描述了一个任务、过程或指令。
流程图是一种状态图(本章稍后会进行讨论),因为它们也包含被转换为动作和活动的状态。决策和重复的事情很容易表示,并且作为一个分支的结果也可以简单描述。有些人建议在写伪代码之前进行流程图绘制。伪代码具有易于转换为一种编程语言或用于编制一个程序的优势。流程图很容易更改,使用流程图软件修改流程图只需要增加一点工作量即可完成。
表3-4列出了伪代码和流程图绘制各自的优缺点。两者都是制定步骤的有力工具。在一个特定时间内、一个项目里,具体选用哪个属于个人喜好问题。

流程图绘制中常用的四种符号为:
开始和停止:开始符号表示流程图的开始,标签是出现在符号里的“开始”。停止符号表示流程图的结束,标签是出现在符号里的“停止”字样。它们是唯一以关键词为标签的符号。
输入和输出:输入和输出符号包含用于输入的数据(例如用户提供)和处理结果的数据(输出)。
决策:决策符号包含一个问题或一个必须做出的决定。
过程:过程符号包含一个规则或某个动作发生的简短描述(几句话)。

图3-4展示了流程图绘制的常用符号。
每个符号有一个入站或出站箭头指向一个符号或来自另一个符号。开始符号只有一个出站箭头,停止符号只有一个入站箭头。“开始”符号表示流程图的开始,以出现在符号的里的“开始”字样为标签。“停止”符号表示流程图的结束,以出现在符号的里的“停止”字样为标签。它们是唯一以关键词为标签的符号。决策符号包含一个问题或一个必须做出的决定。过程符号包含一个规则或某个动作发生的简短描述(几句话)。决策符号有一个入站箭头和两个出站箭头,每个箭头表示一个经由过程的决策路径,该过程始于此符号:
真/是
假/否
过程、输入和输出符号有一个入站箭头和一个出站箭头。符号包含描述规则或动作、输入或输出的文本。图3-5给出了“点燃蜡烛”的流程图。
注意,流程图的开始,在“开始”符号下面,BR-1等待直到唱歌开始。对唱歌是否已经开始做出决定。两种选择:如果唱歌还没有开始,“假/否”为问题答案,BR-1继续等待;如果唱歌开始进行,“真/是”为问题答案,BR-1进入一个循环或决定。
如果有蜡烛点燃,那就是决策。如果“是”,获得下一根蜡烛的位置,定位机器人手臂至点燃蜡烛芯合适位置的距离,然后点燃蜡烛芯。一个输入符号用于接收点燃下一根蜡烛的位置。BR-1准备点燃所有的蜡烛,一旦完成任务就停止。
3.2.1 控制流程和控制结构
机器人执行的任务可以是一系列逐步进行的步骤,是一个顺序控制流。控制流术语详细说明了过程进行的方向,即程序控制“流”。控制流决定了当给定一定的条件和参数时一个计算机将如何响应。图3-6给出了一个顺序控制流的例子。在生日场景的另外一个机器人是BR-3,它的任务是为来宾开门,图3-6展示了这项任务的顺序控制流。
  

流程图
机器人走向门,打开,说“欢迎”,然后关门并回到“原始位置”。这看起来像一个相当草率的主人。给BR-3表示来宾在门口的信号的门铃响了吗?如果有人在门口,说“欢迎”后,BR-3在关门之前让来宾进来了吗?BR-3生日聚会上应该能够以一种可预测方式行事。这意味着基于事件做出决定,做重复的事情。决策符号用于为其他流控制构建分支,用来表达决定、重复和选择语句。一个简单的决策是一个if-then或if-then-else语句的结构。
图3-7a展示了一个针对BR-3的简单if-then决策。“如果门铃响了,则走到门的位置并打开门”。现在,在说“欢迎”之前,BR-3将等待直到来宾进门。注意,如果来宾还未进门可以采取可选择动作,BR-3将等待5秒然后检查来宾是否已经进门。如果“是”,则BR-3说“欢迎”并关门。这种if-then-else决策在图3-7b给出,可选择动作是等待。

图3-7 如果-则和如果-则-否则决策的流程图
在图3-7中,需要回答的问题(或条件测试)是门铃是否已经响了。在BR-3准备开门之前,如果确定会遇到超过一个问题/条件测试会怎样?关于BR-1,在点燃蜡烛之前,如果一定会遇到多个条件将会怎样:
“如果唱歌并且打火机打着了则点燃蜡烛”。
在这种情况下,两个条件都要满足,这就是所谓的嵌套决策或条件。
如果一个问题或情况有很多不同的可能的答案,并且每个答案或情况都有不同的动作要执行,将会怎样?例如,当BR-1或BR-3经过房间时遇到一个物体,它必须绕开物体而到达目的地,这将如何处理。它可以检测路径上物体的距离以决定采取何种规避物体的动作。如果物体在一定距离范围内,BR-1和BR-3向左转90°或45°,选择物体周围另外一个路径,然后再继续原来前往它们目的地的路径,如图3-8所示。

图3-8 机器人避障
该流程图可以表示为一系列决策或一个选择语句。一种情况是在一个问题上有几个可能答案的决策。对于这一系列决策,同样的问题被问了三次,每一个都有不同的答案和动作。对于选择语句,问题仅表达一次。图3-9对比了这一系列决策和选择语句,阅读和理解起来更加简单。
图3-10给出了重复和循环。在一个循环中,一个简单的决策伴随一个条件测试之前或之后执行的动作。根据结果,再次执行动作。在图3-10a中,动作将至少执行一次。如果条件没有满足(唱歌没有开始-也许每个人玩得太开心了),机器人必须继续等待。这是一个do-until循环的例子,“do”这个动作“until”条件为真。while循环首先执行条件测试,如果满足则执行动作。这在图3-10b中给予描述,唱歌还没有开始时,等待,BR-1将循环和等待直到唱歌开始;和do-until循环相比,差异是在条件满足后执行等待。另外一种类型是for循环,如图3-10c所示,其中条件测试控制循环执行的特定次数。

图3-9 对比选择语句和系列决策
3.2.2 子程序
当考虑机器人在一个场景或态势中扮演什么角色时,角色分解为一系列动作。BR-1的角色是一个生日聚会上的主人,该角色分解为4个状态:

图3-10 重复流程图:(a)do-until循环,(b)while循环,(c)for循环
空闲
行走
点燃蜡烛
等待
拿走盘子
这些状态可以分解为一系列动作或任务:
1.?等待直到唱歌开始。
走到生日蛋糕桌。
点燃蛋糕上的蜡烛。
回到原始位置。
2.?等待直到聚会结束。
拿走蛋糕桌上的盘子。
回到原始位置。
这些都是任务的简短描述。每个任务可以进一步分解为一系列的步骤或子程序。“点燃蜡烛”是一个复合状态,可以分解为其他的子状态:
定位烛芯
点燃烛芯
实际上,“从蛋糕桌上拿走盘子”和“回到初始位置”也应该分解为一些子程序。从蛋糕桌上拿走盘子需要拿走每个盘子和杯子的机器人手臂定位子程序,行走则需要电机转动的子程序。
图3-11给出了点燃蜡烛及其定位烛芯和点燃烛芯子程序的流程图。

图3-11 点燃蜡烛、定位烛芯和点燃烛芯子程序的流程图
子程序符号和过程符号一样,但是它包含子程序的名字,名字两边各有一条垂直线。子程序的名字可以是一个描述子程序意图的短语。
然后将流程图开发为这些子程序。使用子程序的优势是不必马上弄明白细节,可以暂时不用考虑搞清楚机器人具体如何执行一个任务。可以先制定最高级别的过程,然后对动作(任务)进行分解。
在机器人的设计过程中,如果在不同地方使用了类似的步骤,可以提取为一个子程序并用通式表达。这个过程可以用通式表达并放置在子程序中,以备需要时调用,而非重复一系列步骤或开发不同子程序。例如,行走过程分为BR-1行走到蛋糕桌的一系列步骤(TabelTravel)和随后返回原始位置的一系列步骤(OriginTravel),这些都是具有不同开始和结束位置的相同任务。需要一个使用机器人当前和最终位置的Travel子程序,而非两个使用开始和结束位置的子程序。

时间: 2024-09-20 00:06:34

《机器人编程实战》一一3.2 伪代码和绘制RSVP流程图的相关文章

《机器人编程实战》一一1.2 给机器人指令

1.2 给机器人指令 如果我们希望一个机器人在某个场景中扮演某个角色,我们如何告诉它该做什么?我们如何给它指令?机器人编程会回答这些问题,其过程充满了冒险.挑战.奇迹.担忧和可能的遗憾.人类使用自然语言.手势.肢体语言和面部表情沟通:而机器人是机器,只能理解微控制器的机器语言.难点就在于此:我们说话和交流是一种方式,而机器人沟通是另一种方式,我们目前还不知如何创造能够理解人类语言和行为并与人类直接交流的机器人.因此,即使我们拥有一个机器人,它具有传感器.末端作用器以及按照我们要求做事的能力,但我

《机器人编程实战》一一1.1 定义机器人的7个标准

1.1 定义机器人的7个标准 在开始着手于机器人编程任务之前,需要明确是什么让一个机器人能真正被称作机器人.那么,什么时候才能让一个自操作的软件控制装置有资格成为一个机器人呢?在ASC(Advanced Software Construction公司,作者为机器人和软件机器人打造智能引擎的地方),一台机器需要满足以下7个标准: 1.?通过编程,应具备以一种或多种方式感知外部或内部环境的能力. 2.?其行为.动作和控制是执行一组程序指令的结果,并可重复编程. 3.?通过编程,应具备以一种或多种方式

《机器人编程实战》一一2.3 自主机器人的ROLL模型

2.3 自主机器人的ROLL模型 你将如何使用它的基本能力来描述机器人?你将如何描述机器人在给定态势或场景中所扮演的角色?设计并实现以上任务,这就是编程自主机器人的全部工作.简言之,要想编程一个机器人,你需要能够描述:做什么何时去做何地去做怎样去做同样重要的是对机器人描述"它"是什么,"何时"或"何地"指的是什么.正如我们所看到的,这就要求几个层级的机器人词汇.按照我们的设想,一个自主机器人的机器人词汇分为7层,我们称之为机器人本体语言层级(Ro

《机器人编程实战》一一2.4 下文预告

2.4 下文预告 本书第1部分专注于编程机器人的能力,如传感器.动作和末端作用器编程.第2部分专注于编程机器人执行特定态势或场景中的角色.记住,你可以在任何语言层级上对一个机器人编程.有时,有些编程工作可能已经提前完成.但是真正在某个场景中成功对自主机器人编程需要一个合适的ROLL模型并逐一实现.在我们更加详细地描述Midamba的机器人和它们的场景之前,我们将在第3章中描述如何进行机器人场景图形规划.

《机器人编程实战》一一第3章 机器人场景图形规划

第3章 机器人场景图形规划 机器人感受训练课程3:不要命令机器人去执行一个你想象不出它会怎样执行的任务. 正如第2章所描述的,机器人词汇是在一个特定态势或场景下给机器人指派任务的语言.一旦建立了一个词汇,接下来就是列出机器人利用这些词汇去执行任务的指令. 制作你想要机器人去执行的场景和指令的图片或"图形表示",将会是确保机器人恰当执行任务的最佳方式.机器人将要执行指令的图会提示你将它们转换为代码之前先考虑好各个步骤.图形可以帮助你理解这个过程,研究图形可以通过看到待办事项来改善开发,而

《机器人编程实战》一一2.1 为什么需要更多努力

2.1 为什么需要更多努力 通常需要通过几条机器人指令来实现一条高级或人类语言指令.例如,下面这条简单且单一的人类语言指令:机器人,握着这罐油该指令涉及机器人的几条指令.图2-2显示了基本通用机器人转换器(Basic Universal Robot Translator,BURT)的一个部分转换,分别将这条指令转换为可以传递给机器人的Arduino sketch代码(C语言)和RS Media(来自Wow Wee公司的两足机器人,使用嵌入式Linux的ARM9微控制器)代码(Java语言). 图

《机器人编程实战》一一2.2 确定动作

2.2 确定动作提出机器人词汇的初始步骤之一是创建能力矩阵,然后基于该矩阵确定机器人可以执行的各种动作.例如,在表2-1示例中,可能列出的动作为:扫描举起捡起前进停止连接断开放下降落向前移动向后移动最后,通过扫描.传送.连接等,我们必须告知机器人我们的意图.我们认为Unit2有潜能能够扫描一罐蓝色的油."蓝色罐装油"在何处符合我们的基本词汇?虽然表2-1说明我们的机器人有颜色传感器,但是能力矩阵里没有任何关于罐装油的东西,这就将我们带入本书的另一个重点:一半的机器人词汇是关于机器人的情

《机器人编程实战》一一第3章 机器人场景图形规划

第3章 机器人场景图形规划 机器人感受训练课程3:不要命令机器人去执行一个你想象不出它会怎样执行的任务.正如第2章所描述的,机器人词汇是在一个特定态势或场景下给机器人指派任务的语言.一旦建立了一个词汇,接下来就是列出机器人利用这些词汇去执行任务的指令.制作你想要机器人去执行的场景和指令的图片或"图形表示",将会是确保机器人恰当执行任务的最佳方式.机器人将要执行指令的图会提示你将它们转换为代码之前先考虑好各个步骤.图形可以帮助你理解这个过程,研究图形可以通过看到待办事项来改善开发,而阐明

《机器人编程实战》一一第2章 机器人词汇

**第2章机器人词汇**机器人感受训练课程2:机器人的动作只会和描述这些动作的指令一样好.机器人也有语言,它们讲的是微控制器语言.人类讲的是自然语言(如广东话.约鲁巴语.西班牙语).我们使用自然语言相互交流,但是与机器人交流,我们要么建立机器人理解的自然语言,要么以机器人可以处理的语言寻找某种可以表达我们意图的方式.目前,构建可以充分理解自然语言的机器人只取得了一点进展.因此,我们的任务是寻找以自然语言之外的其他语言来表达我们的指令和意图.回忆一下解释器和编译器的角色(先前图1-10所示,这里图