这个夏天,在做 Google Summer of Code 的空挡,去了一趟美国,参加这个本专业的机器人比赛。虽然现场出了很多意外,但是好歹也是鄙专业的国际顶尖赛事,所以很有些收获和经验,于是写下来留给学弟学妹,期望会派上些用场。
国外那些代表队的优势之一就是他们往往是连续参赛队伍,而我们浙大基本上每一届就会换上一轮,所以经验的传承对我们还挺重要的。
对规则的理解
像这次,我们看到模型的平面图的时候,以为那个树的下方折起来之后会有个尖角,于是基于此来做机器视觉来做定位,但是实际上到实际赛场的时候,发现那边居然树模型的下部是不规则的。直接影响我们的抓取定位,现场改了红外方案,但是不是很准,也是惨得不行。与此相对的是,基本上,国外大多数队伍都利用了墙壁信息(文档中未提及,后在 FAQ 中出现)。他们以此做激光测距或是直接用于限位。他们反而是很依赖于这个东西在无寻迹线区域定位或者限位。有一个很有趣的设计就是,直接利用撞在墙壁上来做定位,保证自己抵达一个角落。当然他们的机器人也是够结实(笑)。
其实官方是有留联系方式的,如果一个东西将要成为你们方案的重要依赖项,而它未在官方文档里正式说明,只是一个猜测项,那么强烈建议发邮件到官方确认这个事情。
关于定位,其实虽然许多参赛者是研究生及以上,但是也可能是过来卖萌的。而且现场其实问题会有不少,所以如果应试的话,拿基本分会是一个不错的策略,看看那些东西的分值高,把那些部分放在高优先级的地方,做好做稳,提高鲁棒性。
还有一个事情就是 Tony 对比赛公平性的考虑。像这次我们因为没能买到官方指定的颜料(国外的队伍都是在美亚上买的),然后用了国内的近似颜料。没想到到了国外,那个颜色比我们看起来的暗得多,然后我们的红外传感器就直接无法读出那个颜色。我问 Tony 能不能把棕色换成别的颜色,然后扣掉我们的颜色识别分,这样我们还有位置分和抓取分。但是 Tony 拒绝了。他说这个是有违公平性而且颜色是个考察点。所以,如果官方指定了颜料,那么尽可能使用它吧。
比赛的场地是参赛者提供的,但是是统一的。但是不能假设实际的场地是完美的。实际上可能会有很多问题。(不过堪萨斯她们的场地真的很棒,虽然最后用了另一个大学的)。所以建议增强一些大妈的鲁棒性。
团队
我们组的话,我主要做控制端代码、信息展示端代码、传感器方案。然后我想说只有一个程序员其实是不够的(当然和我们开始的太晚也有关系),熬夜都不能轮换好嘛。一个人完全撑不住。我都用了高效开发调试的 Node.JS 了好嘛。那些评委听说我们能用 REPL 无线单步调试机器人都有些心动好嘛。扯远了,建议至少上两个人,然后对彼此的技术比较熟悉,各有个侧重,但是调试的人一定要有两个或以上,please。
然后要有人负责硬件,有人负责设计,有人负责文档。当然这里的负责也只是主要负责,大家实际上应该都是串着在干的。
再扯一句,建议合理整理东西,不要到处乱堆。总是在找杜邦线和螺丝要哭了好嘛。
时间上建议越早越好。我们做得太仓促了,有的实现都来不及做好鲁棒性和冗余度。不少地方最后都是靠得 Magic Value。若有时间应尽可能避免。
然后组件交流建议可以适当加强一些。我发现这次我们两组的方案要结合会能互补得非常好。他们的抓取、颜色识别识别方案很优秀。我们的运动控制、装载卸载、软件结构也很不错。要是合并的话,说不定会意外的好呢。
我们的方案
我觉得我们的方案还是有不少亮点的。比如我们用了七电的移动电源。这是一个可装八节18650的移动电源(超长续航好吗?加上大功率快充,愉快的不行)。可调DC输出电压,同时还有两个 USB 输出。可以用 USB2DC 拿到稳定的 5V 输出,方便的不要不要的。
技术方案上我们用了 Pcduino(Arduino API + Powerful CPU)+ Node.js + HTML5 的方案。这方便了我们做快速开发。Node真的很方便。而且我们直接 ssh over wifi 也是很方便的。无线 REPL 超级方便的。底层的 Arduino 我封装了一个库出来,提供了 Arduino API、Servo API、基于 Pthread 的 SoftPWM 等。开源在了 Github 上,欢迎使用:https://github.com/zenozeng/yapcduino.js。
然后我们是这样的,运算直接跑在板子上,板子上开个 Web Server,笔记本只是它的 client 而已。这种架构超级方便的。
装载卸载我们用了一个转送带,用360°舵机控制,正转收集,逆转卸载。
然后运动上,我们用了步进电机。然后基于 Steps 数来做运动控制。因为是用的自己封装的 SoftPWM 所以能很方便的拿到我们的电机们走了多少步。
具体的代码我们也开源在了 Github 上:https://github.com/zenozeng/ASABE-Robotics-Competition