最近网上发现有一批很低价的rovio出售,于是入手一台,拆开后发现是正品。一直对他的机械系统和定位系统着迷,于是我就在拿到手第一时间完全拆解。
初步分析下来rovio还是蛮适合做二次扩展或者hack的。不过自己恐怕没时间搞,于是写成此文权当给大家一个抛砖引玉的启发吧,期待今后有不少神级的hack/mod出现:-)
简介
Wowwee Rovio[1] 是一款使用WIFI信号控制的视频小车,主要的应用诸如远程监控家里情况、远程视频会议等。相比普通的wifi摄像头,它具备行动能力,操作者可以遥控它对任何可以到达的地点进行观察。
Rovio在dock上充电的画面,图片来自于[2]
不过它的功能还不止wifi小车和摄像头那么简单。从上图即可看到他的机械设计上也有独特之处:使用了3组万向轮。这样的设计使得Rovio可以很灵活的直接向着任意方向平移,而不用事先转向到目标角度。
这样的机械结构对于机器人来说很容易控制,在Robocup机器人足球比赛中,多采用这样的结构:
图:Robocup比赛机器人使用的万向轮,图片来自[3]
对于做过机器人的朋友来说,这样的机械底盘一般售价不低,但性能非常好。Rovio的这个机械地盘非常值得利用
另外一个特点是Rovio具有记录当前位置和自动返航回dock充电的功能,这得益于它装备的NorthStar[4]导航系统。这是一个基于红外成像三角定位原理的导航算法。据他的开发者Evolution Robotics称,其导航精度最高可达4cm/4deg[5],而在后面的我的拆解分析中,也可以看到Rovio的NorthStar模块可以被直接拿来使用的可能性也很大。另外值得注意的是,市面上的一款拖地机器人mimt也是采用了northstar定位方案。
图:Evolution Robotics网站中对NorthStar定位原理的示意图[4]
下面给出Rovio的大体配置:
-
ARM9 200Mhz CPU
-
使用eCos RealTime OS
-
三组万向轮电机,带有里程计
-
NorthStar II 定位模块
-
头部一组红外障碍物检测
-
Speaker和Mic
拆解后我的基本观点:
-
驱动电路和上层电路层次明显,很适合二次扩展
-
可将ARM9的控制电路取出,使用WR703等设备配合OpenWRT替换,通过自行开发固件可以达到一样的功能
-
NothStar模块可以直接驱动(如使用arduino)的可能性很高,可尝试用于其它地方
拆解与分析
底盘总体布局
下图为拆开后的总体布局,所有机械和驱动控制电路部分都位于底盘。这样的布局对希望直接使用小车底盘的应用很有帮助。
不过遗憾的是Rovio使用的是玩具用电机,虽然成本便宜,但使用过程中就可发现这种电机的诸多缺点,如扭矩低、噪音大、精度差等
供电和充电管理
这部分在一块单独的PCB上完成,包含了负责稳定电池电压的DCDC模块以及给电池充电的模块。
PCB上一共3组线路:电池输入、稳压输出以及充电输入。(此处有误,感谢网友gzhuli指正:电源板的3pin插座不是供电输出,是电量检测和充电检测,CS=电池电压检测,CPC=充电控制,CPS=充电状态检测。)可以方便的被再次利用。
外设驱动模块
Rovio将所有外部设备(电机、LED、编码器、红外检测等)完全通过一块PCB管理,该PCB从ARM控制板接受控制信号。因此这部分也可以被利用,通过测量控制信号逻辑,应该不难被arduino等驱动起来。
图中的一系列黑色的三极管应该是实现电机驱动的H桥。这里也比较遗憾,可能是为了降低成本才如此设计,但三极管相比较MOSFET来说,驱动效率较低,也不能通过过大电流。但从配备的玩具电机上看,的确也没必要使用较好的手段。不过这里也就可以作为爱好者hack的一个入手点,可以使用大功率的H桥替代。
电机和编码器
虽然使用了玩具电机,但rovio给每个电机配置的编码器精度应该还不错。可以用于实现里程计,达到一定精度的航迹推算(Deadreckon)。再另外选配合理的传感器,爱好者应该可以基于Rovio完成SLAM等高级的机器人应用
红外障碍传感器和Speaker
Rovio采用一体化红外接受头作为障碍物检测。这点和我们RoboPeak团队的RPMini一样,但Rovio只有前方一组传感器。使用一体化接受头也意味着发射的红外信号时经过调制的。这样可以有效避免环境光对红外障碍检测的干扰。图中最左侧的就是红外发射LED,中间为白色的照明用LED。至于他们的驱动使用,相信有经验的电子爱好者都可以轻松搞定。
LED装饰灯驱动部分
位于顶板的装饰用LED,Rovio用了额外的一块驱动PCB,其原理很容易从画面中猜到:经典的三极管扩流方式。这部分如果要自己驱动也非常容易。
ARM控制核心
在拆解中一直没看到Rovio的控制核心,而驱动模块和机械部件的选型也让人觉得这完全就是一款中低端玩具。但实际上Rovio的最核心部件是隐藏在安装摄像头的可伸缩头部的。打开这部分的外壳,就可以看到ARM控制板以及上方的定位模块。这部分的做功就比之前的驱动电路精细一点。当相比我拆解的设备而言(可以参考我之前拆的XV11机器人),做工还是显的粗糙。
PCB的正面可以看到使用的ARM芯片以及后面的WIFI模块,反面有一块声卡的DAC芯片以及ROM。这部分的电路对于希望修改rovio的人来说意义不大。因为Rovio的代码并没有公开。可以考虑将其用其他控制器替换。
图中的ARM芯片型号有误,应为:(由gzhuli指正)
CPU是Winbond的W99702,不是PXA270,下面的W99100DG不是ROM而是51核单片机,控制W99702 ISP时序的,进入ISP模式时(先插USB再上电就进入ISP模式)通过一个模拟开关切换接管USB口。
NorthStar定位模块
这部分是我认为Rovio真正有价值且区分与一个简单的wifi视频小车的部分。不过这个定位模块并非Rovio所开发,而是由Evolution Robotics提供的模块。但对于爱好者来说这是一个福音。因为这个模块的接口是标准串口!不过由于时间关系我并没有去采集其中的信号。但按照Evolution Robotics的介绍[5],模块是直接输出定位的坐标信息的。在画面中也可以辨认出串口信号的迹象
我拆解过程中把该模块从PCB上拆下,这里展现了它的内部构造,可见还是比较精巧的。我想这样的画面对于一些专业领域的朋友来说大致就能知道他的定位原理了。这部分我就不细说了。大家可以先尝试将此模块驱动起来。
我同时也采用了特殊的摄像机拍摄Rovio底座投射出来的红外光斑,这部分画面用普通摄像头和人肉眼是无法观测的。可以看出光斑与Evolution Robotics的原理描述上一致。不过值得注意的是要投射这样亮度的光斑,投射灯的发射功率不低。当我直接拍摄投射器发出的光斑是,因为光强过大,红外相机的中心感光部分直接出现里“溢出”现象。虽然人肉眼无法看到红外线,但如此强度的功率,恐怕还是会对视网膜造成损害。
投射到天花板的2个红外光斑
投射器发出的强烈光线(肉眼不可见)
到这里拆解的部分就结束了,我后来将小车原样装回,运行正常。
扩展开发和hack的思路
写这篇文章的目的就是希望能起到抛砖引玉的作用,希望大家一起来做扩充。这里就列出我经过分析得出的一些想法给各位借鉴。因为我自己也没尝试过,一些思路未必正确,也欢迎大家通过实践验证不可行时给出回复:-)
对于扩展,有几种途径:
- 不修改硬件、尝试修改固件扩充
- 不修改硬件和固件、在PC上二次开发
- 保留驱动部分电路,替换逻辑控制电路
- 完全替换所有电路,使用机械平台
- 仅使用NorthStar定位模块
这里我将基于我玩机器人的经验,依次给出他们的一些实施思路和相关资源。
不修改硬件、尝试修改固件扩充
这点至少在理论上是完全可行的,因为Rovio自身就支持固件更新。因此可以像目前路由器烧录openwrt的模式来支持自己写的第三方固件。但目前Rovio并没有宣称他们开放了源代码。并且Rovio的固件采用了eCos RTOS[7],而非Linux操作系统。这对于普通爱好者来说挑战不小。
但如果真要走这条路,那有如下资源可用
a) 有渠道声称官方提供了部分的源代码[8]
b) eCOS是类似GPL的开源授权,OS代码可搞定
c) WIFI模块是mavell的芯片,这部分的驱动代码可以获取
d) 外设的驱动逻辑比较简单
不过这样做是难度最大的,差不多是完全重写了固件。这样还不如直接替换逻辑控制电路,采用其他方案,比如使用703N+Linux。
不修改硬件和固件、在PC上二次开发
这应该是一种最可行也是目前资源最多的办法。毕竟已经有第三方的控制终端出现,也有不少朋友说Rovio支持CGI方式的外部控制。但这也是灵活度最低的一种方式。首先无法修改固件的总总问题,也无法获得NorthStar的定位信号
保留驱动部分电路,替换逻辑控制电路
这是我推崇的一种做法。前面的分析大家应该只到了rovio的驱动电路和控制电路是2个独立的模块。而驱动部分其实无非就是一系列的IO控制信号或者PWM信号(控制电机)。做过机器人的朋友都会对此很熟悉。那么只要搞清楚如何使用驱动模块,就可以在任何其他控制板(arduino、STM32开发板、WR703、MK802、Atom主板...)来驱动Rovio。
这里的实施办法是去使用多通道的逻辑分析仪或者示波器或者万用表,在控制Rovio运行时,对每个IO的电平进行测量。很容易就知道每条控制信号的含义以及如何驱动其对应的设备。
随后找一个自己熟悉的控制板,编写控制逻辑即可。对于可以用的控制板,我有几个推荐方案:
1) WR703N + Arduino
WR703N是TPLink出的一款袖珍无线AP。但有了OpenWRT支持后,可以利用它做更多的事情。加我weibo的朋友应该知道我之前给它写过超频的补丁。网上也有不少人基于他实现wifi摄像头小车。本质上,有了OpenWRT提供的BSP,这就是一个廉价高性能的WIFI MIPS的linux开发板。并且400Mhz的主频和32Mb内存是足够开发rovio的应用了。
但是WR703没有足够的IO口用于Rovio的驱动板通讯,此时可以考虑通过usb串口与一个arduino控制板连接,由arduino完成与rovio驱动板的通讯,甚至可以直接用arduino来接收对所有硬件的控制。arduino可与WR703中的linux程序用串口交互
而在视频传输上,可以用mjpg-streamer轻松实现wifi视频的能力,这部分网上有不少资料,就不再罗嗦了。
2) MK802 + Arduino
这其实与WR703类似,但好处是MK802的运算能力强大很多,这可以允许诸如计算机视觉、SLAM定位地图构建、人物识别和语音交互这类高级应用可以直接运行在Rovio上。但相比较我把这个列为第二推荐的方案。主要是因为MK802的功耗相比703N高了太多。这会影响待机时间。而MK802的高运算速度此处其实不是非常必要。一方面WR703的400Mhz已经足以胜任很多高级算法,即使是跑OpenCV,简单的视觉识别算法也是可以完成的。另外真正复杂的计算,MK802也显得力不从心,此时可以利用wifi摄像头的功能,在无线的另一头使用高性能的PC处理器来完成复杂的视觉计算。
3) Raspiberry-PI (树莓派)
自然树莓派也能做这些事情,并且它直接有GPIO输出,可以将arduino省略。这也是一种不错的方案,并且正好是上述2个方案的折中。
对于熟悉这类开发板或者其它类似开发平台的朋友来说,在rovio上实现基本控制、视频传输等应该都是比较方便的。但对于自主返回充电和坐标记录就有一定实现困难。这里就需要将Rovio的NorhStar定位模块驱动起来,这部分的思路我将在后面介绍。
完全替换所有电路,使用机械平台
这部分的过程其实就很简单,前面的拆解分析可以看到rovio的机械部分都是很普通的设备,电机、LED等。这些均能使用arduino驱动器来。如果要这样做,其实就等于购买了一个小车底盘。
仅使用NorthStar定位模块
对于Rovio最有价值的NorthStar定位模块这里将额外介绍一下。我相信对于做机器人的朋友来说都遇到一个问题就是如何在室内进行定位。在室外有GPS可用,而室内却不行。此时就需要有几种手段
1) 航迹推算
完全使用里程计(电机的编码器)以及惯性导航设备(如陀螺仪,但Rovio没有)来估算出机器人的运动轨迹。这种方式实现起来比较简单,但实际中航迹推算就像人在沙漠中行走,如果缺乏外部的观测设备,就容易走偏方向,因为无论运行还是测量都是由误差的。航迹推算的问题就是误差会越来越大。
这部分的过程有一篇经典的论文推荐WhereamI[9]。
2) 使用激光雷达等高级传感器
如果有这类的设备,室内定位问题很容易解决。目前市面有很成熟的SLAM算法如ICP-SLAM可以解决。
3) 视觉定位法
如RoboPeak使用的全局视觉定位给RPmini提供定位服务:
这类方法需要架设或者投射一些视觉符号给机器人使用。而这里的NorthStar定位也属于这种方式。
Northstar的思路正好与传统的视觉定位相反:它将视觉定位的标记符号(红外光斑)投射到了天花板,而在机器人上采用视觉传感器(Northstar通过简化算法,仅使用了几块感光器件)感受标记符号的光信号,并进而进行几何分析,计算出机器人在一定坐标系下的坐标和方向角。
有了这个概念后,大家应该明白NorthStar大概是用来做什么的了吧?并且前文我提到厂家对于他的定位性能给出的数据还是很具有诱惑力的:最差也可以保障30cm的误差。
这里说下如何使用其这个模块,因为我自己没有尝试,这里的只是可行的思路,如果大家进行了验证,不妨回复本文说明下情况
前面分析中可知NorthStar使用串口通讯,自然可以做的第一件事情就是将串口信号连接PC观察它输出了什么。而一般串口的波特率无法使9600 115200这些常用的。可以逐个尝试。另外就是如果幸运的话,串口的协议大多是基于文本的,这样含义很容易被理解。
当然,这样的思路也有不管用的可能,或者就是输出的数据难以被猜出含义。此时就可以找官方的网站寻找资料了。
小结
不小心又扯了那么多,本文我给了几个基于自己经验的对Rovio进行扩展开发的可信手段,希望能对大家有所帮助:-)
参考资料
[1] Wowwee Rovio公司主页
http://www.wowwee.com/en/products/tech/telepresence/rovio/rovio
[2] 【視象測試報告】試玩 Wowwee Rovio:識行識走識攝錄的「火星曱甴」!
http://amanda_hoic.mysinablog.com/index.php?op=ViewArticle&articleId=2041357
[3] Welcome to Cornell Robocup
http://www.cis.cornell.edu/boom/2005/ProjectArchive/robocup/
[4] NorthStar
http://www.evolution.com/products/northstar/
[5] NorthStar's Specifications
http://www.evolution.com/products/northstar/spec.masn
[6] Mint Cleaner
http://mintcleaner.com/howitworks/northstar/
[7] eCos RTOS
[8] 外界声称的部分Rovio官方源代码
http://www.robocommunity.com/download/17502/Rovio-eCos-Code/
[9] Where am I?" --Systems and Methods for Mobile Robot Positioning
http://www-personal.umich.edu/~johannb/position.htm