
Microsoft Robotics Studio
继之前分享的一篇《Robotics Studio学习教程:第六天——改良自走型机器车》,我们将继续分享下一篇《Robotics Studio学习教程:第七天——改良自走型机器车(续)》,让我继续开始我们学习Visual Programming Language,以及使用Robotics Studio学习开发机器人应用的道路吧。
[Robotics Studio] 改良自走型机器车[III] -- Day7
恩, 昨天觉得机器车太慢, 今天来加快, 但是要如何加快呢, 一般我们开车时速度都是变化的, 在转弯前就要减速啦, 所以我们不能再用 DriveDistance 这个功能, 因为这个功能在结束时都是紧急煞车, 所以即使你用 DriveDistance 把要行走的距离切分为不同的 Power , 依然会看到车子一直紧急煞车.
目前想到的办法就是利用 SetDrivePower 或是 SetDriveSpeed 这样的功能才行, 随着要行走的距离减少而降低速度(或是马力).
先做刚刚想到的办法的其中一小块, 比较简单, 就是根据要行走距离以及已经行走的距离, 算出应该要给的速度, 这样一来, 等一下就可以拿来应用, 而且要改速度只要改这里, 一次就改好.
为了达到这个目的, 我们先拉一个 Activity , 取名叫 CalculateSpeed 来做.
将CalculateSpeed 的输出入设定如下:
里面的程序用看的就明了:
接着, 我们来设计该如何让车子走一段距离, 但一路上根据刚刚设定的 CalculateSpeed 来设定速度.
为了达到这个目的, 再弄一个 Acitivity 取名为 RunSmoothLength, 设定输入只需要一个 Length, 基本上就要有三个状态值, 应该就是目前的速度 (CurrentSpeed), 已经行走的距离 (StageRunned) , 以及我们设定应该行走的距离 (LengthSetting).
然后一开始流程就把 LengthSetting 设定为 Length, 再根据 Length 是否为 -1 来决定要不要通知结束, 大于 0 的我们就把 StageRunned 设为 0, 启动 CalculateSpeed 去计算速度后再把值喂给 CurrentSpeed 以及 GenericDifferentialDrive 的 SetDriveSpeed.
最后, 我们设定一个 Timer , 使用 SetTimer, 值设为 100 (表示 0.1 秒后启动 TimerComplete 通知) 交给 Timer 来驱动下一次 CalculateSpeed, 如下:
那我们应该如何收到 Timer 后续的行为呢?
当然是到 Start 这个 Action 里面去做 Timer 通知, 将该 Timer 复制到 Start 以后, 接受 Timer 的 TimerComplete后, 先做一些判断, 如果 LengthSetting 大于 0, 我们可以继续下去, 不然就结束...千言万语不如一张图:
对啦, 就是这样, 再把 RunL 作如下的修改:
而 RunL 的 Start 改为这样:
终于就大功告成..
现在我们主要 Diagram 的程序如下:
当然一开始的值可以任意设定, 这样你很快就会看到车子撞到停下来.
这回车子跑起来象样多了...
这回因为简化过多文字 (这样大家也比较不会看的累), 如果大家对程序有疑问, 可以下载原始码来看看:
让我们继续一下章教程:
《Robotics Studio学习教程:第八天——Hello World Again! (DSS Service version)》