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

Robotics Studio学习教程:第二十天——开始动手写相扑机器人

2014年05月07日 Robotics Studio, 文档, 机器人 ⁄ 转载:原文链接 ⁄ 共 1475字 ⁄ 字号 暂无评论 ⁄ 阅读 1,064 次

 

Robotics Studio学习教程

Robotics Studio学习教程

继之前分享的一篇《Robotics Studio学习教程:第十九天——相扑机器人》, 我们将继续分享下一篇《Robotics Studio学习教程:第二十天——开始动手写相扑机器人》,让我继续开始我们学习Visual Programming Language,以及使用Robotics Studio学习开发机器人应用的道路吧。

 

[Robotics Studio] Sumo[II] - 开始动手写相扑机器人 -- Day20

当然, 是从昨天的 mysumo 开始改起啦...

从头写的话, 我应该可以从 Day20 混到 Day 30 ...

不过, 我还是可以混很大...哈哈,  先介绍这个范例帮我们产生的 mysumo 是一个怎么样的机器人.

这个机器人有下面这几种状态, 分别为:

clip_image002

这个状态就是 mysumo 的 state 当中的 SumoMode , 你可以在 mysumoTypes.cs 当中找到这些定义.

从这个图你就知道, 在 Pending 以前的状态我们其实都不需要动. (你也不应该偷跑作弊吧?!)

而 Wander 的期间, 机器人就是漫无目的寻找目标 , 直到传感器发现下面这些动作:

1. 从 webcam 看到对手, 进入 Tracking mode.

2. 从 bumper  (左右各一个) 发现碰撞, 进入 Contact mode.

3. 从 floor sensors (地板传感器) 发现出界, 进入 AvoidBoundary mode.

4. 地板传感器的时间 (timestamp) 太旧了...进入 Blind mode.

最简单的改法就是从 修改 Wander 方法着手 ... 参考 mysumo.cs 当中的 SetWanderDrive() , 原本如下:

  1.  /// <summary>
  2. /// This is the default drive configuration for wander mode
  3. /// </summary>
  4. private void SetWanderDrive()
  5. {
  6.     _state.SumoMode = SumoMode.Wander;
  7.    InternalDrivingMilliseconds(250, 175, 250.0);
  8. }

是不是很简单呢, 它只做一个小幅度的绕圈圈...设定左轮的速度为 250, 右轮的速度为 175 , 然后等到 250 ms 之后再进行新的决定.

怎么改会比较好?

老实说我也不知道, 不过可以随便乱改啊, 所以先改为原地顺时钟绕圈圈看看:

InternalDrivingMilliseconds(250, -250, 250.0);

然后让 mysumo 跟 SumoPlayer (原本内定的机器人) 对打...

有没有发现我们的机器人大半的时候都是在原地旋转呢?!

有没有发现我们的机器人似乎明明看到对手, 却往前冲一下就停止, 继续旋转??

所以, 下次我们来试试看 Tracking Mode 到底在干啥...

在此之前, 你可以乱改 SetWanderDrive 玩看看...

你应该会有一些心得, 像是速度太快的话, 根本看不到对手... 就算你把反应时间调快也没用.  这是因为架构上是利用 TimerHandler 这个函式去处理的, 而该函式预设是 200 ms /4 = 50 ms 触发一次... 更何况预设是每 200 ms 才去处理一次图像...(这样 fps 才 5 ... 你能想象 5 fps 的射击游戏是甚么样子吧?)

 

让我们继续一下章教程:

《Robotics Studio学习教程:第二十一天——相扑机器人可以看到什么?》

fgx

分享到:

Wopus问答

×