现在的位置: 首页 > 专题 > 机器人 > Robotics Studio > 设计中心 > 文档 > 专题 > 机器人 > 正文

Robotics Studio学习教程:第三天——Activity介绍

2014年04月19日 Robotics Studio, 文档, 机器人 ⁄ 转载:原文链接 ⁄ 共 2549字 ⁄ 字号 暂无评论 ⁄ 阅读 976 次
Microsoft Robotics Studio

Microsoft Robotics Studio

继之前分享的一篇《Robotics Studio学习教程:第二天——开始玩机器人啦!》,我们将继续分享下一篇《Robotics Studio学习教程:第三天——Activity介绍》,让我继续开始我们学习Visual Programming Language,以及使用Robotics Studio学习开发机器人应用的道路吧。

 [Robotics Studio] 介紹 Activity -- Day3

今天开始介绍 Activity, 这个可是 VPL 化繁为简的工具, 这样可以让你的 VPL 更容易让人看得懂, 也更好控制, 它就很像 Basic 的子程序一样, 把一堆比较复杂但相关的流程框成一个自定的 Activity.

先把昨天的程序抓来改吧. 还记得昨天最后有点复杂的程序吧?

clip_image002[8]

现 在我们要把中间这个过程写成一个 Activity, 这样日后看这个程序就更容易懂了,  先从 Basic Activities 当中拉一个 Activity 放到 Diagram, 请注意右边有 Properties, 这个就是属性表, 我们可以从当中修改组件的属性, 名字目前只能用英文, 所以我们先把 Name, Friendly Name 设为 RobotControl, 在 Comment 的地方可以下批注, 写上 "控制机器车子的方向" , 如下:

clip_image004[8]

现在你已经有一个自定义的活动了, 看起来就像是这样 :

clip_image006[8]

对它点两下, 你会进入编辑画面,

让我们回到刚刚的 Diagram , 把原本中间的一堆组件复制过来这个 RobotControl Activity.

如下:

clip_image008[7]

现在你看到一堆惊叹号了, 这代表有些小问题需要解决.  移动到每一个小惊叹号, 都会告诉你发生了甚么问题, 首先, 我们要先宣告这个活动的界面,

也就是定义这个活动的输出以及输入. 点击上方的红色编辑纽, 或者使用下拉选单的 Edit/ Actions and Notifications, 你会看到这个对话框:

clip_image010[8]

主 要分为两大区块, Actions 代表你可以定义的反应, 所谓的 Action, 是指需要输入一个讯息, 然后该 Activity 会经过一些处理以后(包括做了一些整体环境上的改变), 最后吐出一个讯息, 而 Notifications 就比较简单, 是自动自发的吐出讯息, 不需要输入讯息. 所以通常一个流程的最前面的组件往后吐出讯息的是 Notification.

再回到 Actions, 我们可以看到下方有三排 Add,Delete, 由左至右分别代表 你新增删除定义的 Actions, 新增删除输入的讯息组合内容, 新增删除输出的讯息组合内容. 每一个 Action 你都可以定义个别的输出入内容, 而且每一个 Action 都是一个独立的编辑组件画面欧.

让 我们定义一个 Action, 取名为 ControlDirection, Input values 需要一个 PressButton, Type 是 String, Output values 则是 LeftDriverPower, RightDriverPower, Type 都是 double, 如下:

clip_image012[8]

之后, 我们把左边的输入拉到原本的 Calculate 这个组件.

为了要统一输出, 所以我们还要多拉一个 Join, 把 "Stop", "Fowards", "Backwords" 产生出来的讯息经由 Merge 后再一次 Join, 一样在 Join 里面填入 left, right , 如下:

clip_image014[8]

然后把这个 Join 输出给 "Left", "Right" 的  Merge,最后把这个 Merge 输出给 Result, 整体的流程就像下面这样:

clip_image016[8]

当你把 Merge 的结果输出给 Result 时, 会跳出 Data Connections 对话框, 此时你要指定输出的 LeftDriverPower, RightDriverPower 为何。

因为透过 Merge, Visual Programming Language Express Edtion 无法计算出正确的下拉选单给你选 (你只能选 value), 但是其实要输入的值应该是value.left, value.right (因为 Merge 之前的讯息是 Join 吐出来的), 所以你要勾选下方的 Edit Values Directly, 自己输入正确值 (但系统会提示你), 如下:

clip_image018[8]

这样你就完成了一个 Activity (其中的一个 Action) 的定义啰!

让我们回到原本的 Diagram, 删除那些被你复制到 Activity 当中的组件, 改用这个 Activity 取代,
当你把 DirectionDialog 的 Notifications 拖到这个 RobotControl 的 Activity 时, 会出现 Connections 对话框,
我们当然选择 ButtonPress , 如下:

clip_image020[9]

接着出现 Data Connections 对话框, 要选 value.Name

clip_image022[6]

而当你把这个 RobotControl Activity 的输出丢给 GenericDifferentialDrive 的时候, 又出现 Connections 对话框, 输出要选 SetDrivePower,

clip_image024[6]

Data Connections 对话框设定如下:

clip_image026[6]

现在整体的组件流程就像下图:

clip_image028[6]

这样看起来清爽多了吧.

那我们之前复制的一个分身 GenericDifferentialDrive 也就不需要了. 不过, 暂且不要删掉它, 还记得昨天你玩车子的时候, 按下去就一直跑了, 直到按 Stop, 是有点不方便.

现在我们改为放开就停止, 这样还不错玩.

所以我们再复制一个 DirectionDialog (请注意, 它还是该 DirectionDialog 的分身啰),  然后把 Notification 直接拖到另一个分身 GenericDifferentialDrive,  在 Connections 对话框设定 ButtonRelease 给 SetDrivePower,
在 Data Connections 对话框设定两个值都是 0。

这样你的整体组件流程如下:

clip_image030[6]

好啦, 可以试玩看看是不是好多了? 比较不会翻车啰?

撞到东西还是会翻啦 XD

clip_image032[6]

有了自定义 Activity, 就像是可以自己定义积木, 我们就可以迈向更复杂的人生啦...(啊?!)

让我们继续一下章教程:

《Robotics Studio学习教程:第四天——行走机器人》

fgx

分享到:

Wopus问答

×