WTFRobot Rosmin

2012年8月,W、T、F三人陆续回到学校。

因为共同的机器人之梦,这个团队在今年5月份组建。

首先W同学有了一个想法,觉得可以把ARM11放在小车上,做一些图像处理的工作,然后再连上Arduino控制器控制小车运动,另外用一台Android手机来操控。

开始考虑用纯Linux加上Qt作为图形界面,用上OpenCV来做。事实上W同学之前因为做过类似的东西对这个已经比较熟悉了。只是由于摄像头驱动以及USB接口只支持1.1的原因,采集摄像头图像的速度非常慢,慢到无法忍受。

但是经过多次尝试,发现一款USB摄像头在ARM板厂商的测试程序当中速度很快,效果很理想,问题是厂商并没有开源这个摄像头测试程序的代码,如果要自己做驱动的话就不是一时半会能搞定的了。于是W同学又尝试了把板子刷上Android操作系统,由于有API可以调用,尽管这个程序闭源仍然可以使用。

于是W同学又从C/C++版本的OpenCV转到Android版本的OpenCV,在Android测试了一下自带的示例程序,发现会花屏。尝试了很多方法都未能解决。后来ARM板的损坏也导致不得不思考新的方案。

于是就到了8月份。

F同学由于要做Android客户端程序学习了Android编程。于是想到直接用Android手机代替ARM11开发板,这样会省去很多麻烦。而在这时,Android手机之间的单向socket通信已经基本完成,在解决了一些小问题以后工作很稳定,速度也很快。

很快,由于F同学曾经有做小车的经验,以及Arduino编程的经验,由Arduino控制的小车耗不费力地就跑了起来。
接下来遇到的第一个难题是Arduino与Android的通信。开始买Arduino的时候没有考虑这个问题,但现在需要与Android手机通信,主要有两个办法,蓝牙和USB,我们觉得蓝牙这个东西开关比较麻烦,也可能不够稳定,于是决定直接用USB Accessory,该特性由Android 2.3.4(平板是3.1)以上支持。开始看到很多论坛的帖子说华为中兴的手机不支持,真心捏了一把汗,还好后来证明三个人的手机都是可用的。

要解决这个问题,F同学查找了很多资料,最终终于完成了Android手机(客户端)传递信息到另一台Android手机(服务器),再由这台服务器传递信息到Arduino控制小车运动。反应很灵敏,效果很不错,非常好的一个玩具遥控车。

这个时候,bug只是偶尔出现,解决了以后基本就很完美了,工作都非常稳定。

可是一切才刚刚开始。

9月份,W研究了众多可用于Android平台上的计算机视觉库,包括OpenCV,SimpleCV,JavaCV以后,最终发现还是OpenCV比较适合,但是由于JNI接口使用觉得过于复杂,没有深入研究下去。于是利用Android上的OpenCV实现了追踪有明显颜色特征的物体(ColorBlob Track)并且绘制出其中心坐标。

在T同学完成数模一段时间之后,小车的Arduino部分主要转给他负责。买好了舵机,却发现转起来吱吱地响。让舵机云台根据前面所说的图像处理得到的点的位置跟踪目标,经过一个下午调整终于调好了,可舵机已经坏得差不多了,声音很吓人。后来拆开发现里面的齿轮是塑料的!顿时觉得被坑了,180多买来的二自由度舵机云台居然如此劣质!淘宝立刻给差评!后来买了两个20多块的MG995,质量都很好一直用到现在。

当然这还远远不是结束。接下来我们陆续实现了:

  1. TTS

  2. 小范围英文离线语音识别

  3. Socket双向通信

  4. 各种代码的分离和整合

F同学开始研究利用Android服务器上的陀螺仪计算角度和客户端的地图绘制。

借了一个平板过来。。。

然后,设计利用超声波测距检测拐角和使用QR码作为人工路标的导航机制:

此图好象是刚刚调通超声波模块,但却不知这是暴风雨前的宁静。

本以为超声波传感器+Arduino就一切OK了的,可后来发现事情远没有这么简单,因为Arduino Romeo的资源不足,开始认为是定时器不足导致超声波测距和USB Accessory无法使用。可后来尝试了各种方法,这个问题变得越纠结。

我们于是增加了一个MSP430作为辅助板来控制超声波传感器。调了很多天之后发现还是不可行,最终发现I/O口不足。

于是我们换用Google ADK。

可谁知道我们第一次买来的竟然是假货,用了不到24个小时就坏了,后来淘宝退货,立刻买下了另一个原装进口的。这一耽误又是好多天,这个时候星火杯如果按照原计划已经快开始了。

真假ADK:

在光棍节那天,我们终于完成了超声波和USB Accessory的共同测试!

经历了设备大换血之后,下面的一段时间,我们一直在做小车的导航。每天至少几十次的测试。小车跑过了好几百次了吧。还好星火杯也延迟又延迟,否则我们无法有很多时间来改进。

在前几天,Arduino与Android双向通信问题才完美解决,舵机转动影响陀螺仪的角度问题也基本解决。但在地图绘制方面还有一些不稳定。追踪小球上根据偏离中心距离调整速度,效果好了不少。

最后来一张Rosmin的笑脸:

哈哈,还有牺牲了一个手机壳有时还不得不举着舵机讲电话的T同学。。。

一切还只是刚刚开始

The Next is Rossum.