由自己的所在开始,探索自己周围的简单机器车,假设车子的行走路径如下:

    

我们要把L型路径写成一个Activity,然后由外部输入这个L的大小,最后这个Activity要能够在完成行走路径时吐出更大的L大小。

完成第一步前进动作:

第一步:拖动一个Activity,改名为RunL,然后把输入定为size,类别为double。而输出是Notification。(因为机器完成时都是使用通知来告诉我们,而我们L型路径的完成也是靠通知才知道)

  

  

如何写里面的流程:根据Generic
Differential Drive可以接受的指令,只有前进一段距离以及旋转一个角度,所以L型路径应该由1、前进
2、旋转90度
3、前进、4、旋转90度(为下一次的L)四部分来组成。而每一部分的完成都是靠通知来实现,并不是靠当下Generic
Differential Drive的输出。所以,当我们收到通知时,有必要知道我们目前处于哪个状态,而决定应该如何进行下一个步骤。这个在离散数学就算是有限状态机(Finite
State Machine),在VPL处理FSM问题只能靠变量(Variables)。

除了1、前进是靠外部输入驱动以外,2、3、4都是靠Generic
Differential Drive完成通知的,

然后我们靠一个CurrentState的变量来决定我们该进行哪一个动作:

第二步:从Basic
Activity中拖动一个Variable到RunL里面(不是Diagram中)。右边的属性表里可以新增变量,我们新增一个CurrentState,类别是int,如下:

  

第三步:再输入资料时就把一个Data值为1作为该变量的SetValue。

第四步:再把输入size输入给Generic
Differential Drive(配置参考学习二)的DriveDistance设定如下:(以百分之一百的速度前进value这样的距离)

  

第五步:由于等一下还须知道使用者输入的size,所以也顺便把size存储为CurrentSize。现

在RunL的内容应该如下:

  

第六步:在Diagram输入一个0.5的值(value)给RunL的size,如下:

  

(运行起来,机器车可以自动走一小段直线并停止。)

完成接下来的二、三、四步动作:

对于每一个使用者自定义的Activity,都有一个特定的称为“Start”的Activity,它是用来作为通知或者是启动等流程进行编写。在Start里面的流程都没有输出以及输入,但里面的元件可以有Notification。

第一步:为了收到Generic
Differential Drive(配置参考学习二)的通知,我们把Generic
Differential Drive放到Start里面。如下:

  

第二步:接下来,我们打算只收到两种通知,分别是前进(DriveDistance)以及旋转(RotationDegrees),所以放两个If来判断这两个通知,然后将这两个If的判断交给Merge,输出给一个Calculate,填入state.CurrentState+1,再把这个Calculate的结果交给CurrentState变量。如下图所示:

  

这样我们就完成了“收到通知以后,状态+1”的事情。

第三步:“状态+1”以后,根据目前的状态决定该做什么事:设完变量以后,在交给另一个Calculate,填入state.CurrentState。再加上switch判断:

2交给Generic
Differential Drive一个全力(power=1)旋转90度(Degrees=90)

3交给Generic
Differential Drive一个全力(power=1)前进(Distance=state.CurrentSize)

4交给Generic
Differential Drive一个全力(power=1)旋转90度(Degrees=90)

5交给RunL(建议去Diagram)一个size=-1的值,作为结束

如下图所示:

  

第三步:因为设定了size=-1为完成,所以要去Action那头多做一个判断,size=-1时就发出一个通知,如下图所示:

  

第四步:最后,回到Diagram,设定RunL的通知,再透过Calculate将DoneSize+0.3再交给RunL,如下图所示:

  

第四步:保存并运行。

  

(遇到了很多困难,不过都克服了,但是每次保存变量的值都保存不上,解决的方法只是一次设定一次运行,知道如何解决的朋友可以告诉我。)

2016-03-29

(资料整理于百度文库的《Microsoft_Robotics_Developer_Studio中文教程》)

MRDS学习四——自动型机器车的更多相关文章

  1. MRDS学习三——机械车的改良(Activity的介绍)

    Activity:VPL中化繁为简的工具,可以使得真个VPL容易让人看懂,也能跟好的控制.它就很像把一堆比较复杂但相关的流程组合成一个自定义的Activity. 完成Activity的定义: 第一步: ...

  2. TweenMax动画库学习(四)

    目录            TweenMax动画库学习(一)            TweenMax动画库学习(二)            TweenMax动画库学习(三)            Tw ...

  3. SVG 学习<四> 基础API

    目录 SVG 学习<一>基础图形及线段 SVG 学习<二>进阶 SVG世界,视野,视窗 stroke属性 svg分组 SVG 学习<三>渐变 SVG 学习<四 ...

  4. Android JNI学习(四)——JNI的常用方法的中文API

    本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...

  5. SCARA——OpenGL入门学习四(颜色)

    OpenGL入门学习[四] 本次学习的是颜色的选择.终于要走出黑白的世界了~~ OpenGL支持两种颜色模式:一种是RGBA,一种是颜色索引模式. 无论哪种颜色模式,计算机都必须为每一个像素保存一些数 ...

  6. ZigBee学习四 无线+UART通信

    ZigBee学习四 无线+UART通信 1) 协调器编程 修改coordinator.c文件 byte GenericApp_TransID; // This is the unique messag ...

  7. (转)SpringMVC学习(四)——Spring、MyBatis和SpringMVC的整合

    http://blog.csdn.net/yerenyuan_pku/article/details/72231763 之前我整合了Spring和MyBatis这两个框架,不会的可以看我的文章MyBa ...

  8. Spring Boot 项目学习 (四) Spring Boot整合Swagger2自动生成API文档

    0 引言 在做服务端开发的时候,难免会涉及到API 接口文档的编写,可以经历过手写API 文档的过程,就会发现,一个自动生成API文档可以提高多少的效率. 以下列举几个手写API 文档的痛点: 文档需 ...

  9. Expression Blend学习四控件

    原文:Expression Blend学习四控件 Expression Blend制作自定义按钮 1.从Blend工具箱中添加一个Button,按住shift,将尺寸调整为125*125; 2.右键点 ...

随机推荐

  1. Ubuntu搭建Note.Js 平台

    1. 安装nodeJs和npm apt-get install nodejsapt-get install npm 2 .node有一个模块叫n,是专门用来管理node.js的版本的.首先安装n模块: ...

  2. Win Server 2008 RD案例:Client通过Server的浏览器上网

    一.简介 RD是Windows Server远程桌面服务,可以实现从客户端运行服务器上的软件.首先在Server安装软件,设置能远程访问的应用和账号,并且创建.rdp快捷方式文件,然后Client打开 ...

  3. Kibana+Logstash+Elasticsearch 日志查询系统

    搭建该平台的目的就是为了运维.研发很方便的进行日志的查询.Kibana一个免费的web壳:Logstash集成各种收集日志插件,还是一个比较优秀的正则切割日志工具:Elasticsearch一个开源的 ...

  4. microstrip patch antenna

    微带天线有很多优点,低成本,易于集成,加工简单,缺点有:效率低.功率容易低.高Q值 ,可能存在表面波,极化效果差,弱电扫性能.带宽窄.微带线的金属厚度t远远小于波长(t << λ0 ,自由 ...

  5. jQuery超链接提示,提示跟随鼠标动

    功能:实现鼠标移动到一个超链接时,鼠标右下角产生一个提示,并跟谁鼠标移动,知道鼠标离开超链接. 效果: 源码: <!--本案例是鼠标放在超链接上时,鼠标旁边有提示这是个超练级,以及放在图片上时图 ...

  6. AC日记——校门外的树 洛谷 P1047

    题目描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0,1,2,……,L,都种 ...

  7. What is a RaycastHit normal?

    The normal is the direction pointing away from the collider it hits. http://answers.unity3d.com/ques ...

  8. PAT 1033. 旧键盘打字(20)

    旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现.现在给出应该输入的一段文字.以及坏掉的那些键,打出的结果文字会是怎样? 输入格式: 输入在2行中分别给出坏掉的那些键.以及应该输入的文 ...

  9. java多线程系类:JUC原子类:04之AtomicReference原子类

    概要 本章对AtomicReference引用类型的原子类进行介绍.内容包括:AtomicReference介绍和函数列表AtomicReference源码分析(基于JDK1.7.0_40)Atomi ...

  10. C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 面向全国标准省市县行政数据基础之上的组织机构管理

    由于信息系统庞大.各种业务子系统.各种开发语言开发的业务逻辑.各种年代维护的代码.各种参差不齐的历史遗留信息系统,面向全国的业务系统,面向某个领域的汽运管理信息系统,面向内部的业务系统,面向外部的各种 ...