返回

二毛记

首页
关灯
护眼
字体:
第一章 雏形
   存书签 书架管理 返回目录
    2004年4月,一个周末的上午,看着眼前的一片英特尔(el)的s-51单片机,项洋决定了。做个自制电子琴吧。设计电路图纸早已经准备好了。

    项洋是上海一家电子仪器厂设计部的一名设计工程师,业余时间,喜欢看技术杂志,研究新的电子电路,或者搭个电路做个电子实验什么的。设计部有各种各样的电子材料,这时的单片机芯片应用已经很普通了,项洋弄几片s-51单片机自用,自己业余时间玩玩。

    硬件不算复杂,单片机的接口分别接八个指定声频的振荡电路,按照低音到高音排列 1-2-3-4-5-6-7-1(高音“1”),发声的喇叭音质有要求,但是好的比较贵,项洋采用一个电子喇叭充数。

    软件也不难,只是根据“琴”的按键,按照指定的时间间隔驱动某一个接口(又叫i/口)到电子发声器而已。同时用采样硬件设置的方法,判断要求的音度(高八度或者低八度)改变驱动频率,以及节拍,等等。

    家里工具样样齐全(这是电子爱好者必备的)。忙了大半天,电路板搭好了。项洋测试一下,能干活!剩下就是软件的活了。

    s-51的指令比较简单,项洋几乎背下来了。项洋对于自己设计的软件,有近乎完美的要求。例如,每条指令,都要用注释诠释其功能,实现目的,等等。比如,一条简单的定时指令,功能是通过50次空操作单指令的循环,实现时间长度为50个时钟周期的定时延时。注释写明,单次空指令耗时一个指令周期(假如系统时钟是1h/兆赫,那么指令执行时间就是1微秒)。这段子代码设计的时间,注明是2004年4月11日(周日),这也是项洋自己的第一个单片机功能模型软件诞生的日子(多年后被定义为一个妖魔现世的日子)!

    但是需要上班时间借用部门的开发机烧程序到存储器。这个时代的开发设计不胜其烦,单片机需要用专用的开发板改写程序存储器,然后将单片机和存储器插在面包板(一种电路板替代调试工具)上,再用细导线接到焊接好的外部硬件电路做调试。调试好了之后,再拷贝(焊接)到实际的电路板上。

    等待下个周末的上午,终于到了“电子琴”诞生的时刻了!一切都好。只有大约两个弱点:一个是电子喇叭的音质太差了,另一个是音色单调。改进是不可能的,成本高。也没必要。

    转眼到了2007年,项洋手里a八9s5x的程序存储器容量已经比较大了。而且是isp的片内fsh存储器可在系统编程isp (—syse prgraable),即不必将芯片从电路板上拔下来便可编程,给产品开发带来了方便。

    ---------------

    项洋在s-51电子琴软件版本的基础上,慢慢地设计个有趣的东西 -- 四条腿的电子蜘蛛。它会爬,满桌子地爬,而且不会从桌子边缘掉下来。碰到障碍物还会退回去,绕个弯走。

    为什么不会从桌子边缘掉下来呢?因为它爬的慢啊,一点一点地挪。只要有一条腿比另外三条腿低一些,它就知道那只脚在坑里,它就要退回去了。怎么退回去呢?已经掉在坑里的脚要先抬起来,举在空中,然后另外三条腿往后挪!

    如果碰到略高一点的障碍物怎么办呢?有一次,项洋拿个盘子,翻过来放在桌子上让它往上爬。它爬啊爬,爬到一半,快爬上去的时候,不爬了,退回去了。它怕摔死?胆小的蜘蛛!

    别看这么个简单的玩意,构成已经有点复杂。驱动的微型直流电刷用了六个(四肢和脑袋,尾巴各一个)。四肢的“膝关节”装了个弯曲角度测量器(其实就是个可变电阻加一圈尼龙丝线而已)。

    脑袋其实装的是红外光发射接收器,用于大概判断前方的大障碍物(探测距离只有几毫米)。还有一个微音器(麦克风),可以接收人的声音做出反馈例如,辰辰(项洋的太太)一喊,蜘蛛立刻就不动了,即使辰辰喊的是“毛毛”。

    微控制器放在肚子里,要用结实点的材料保护好,不然早就“别故”了,曾经摔了无数次,偶尔还要被辰辰扔的远远的(以前设计的电子琴,项洋拿来给一岁半的儿子毛毛玩,一会就被辰辰摔坏了,说是“烂东西”)。7号电池也耗不起了,30分钟就没电了。现在用两根细线外接电源供电。这样可以长时间地在桌子上溜达。

    儿子已经有二岁了。桌子上吃饭的时候,很喜欢这个蜘蛛爬来爬去的。看着它,吃饭也多吃些(不然辰辰又要将蜘蛛扔掉了)。这不,蜘蛛爬到盛着汤的大碗和菜盘子之间,卡住了(因为毛毛故意将菜盘子推了一下)。进退两难,在那里“想”呢。项洋盯着它的动作,考虑如何改进它的软件设计。它的眼睛(红外光发射接收器)下面有几个不同颜色的le(发光二极管)灯,别人看不懂灯是干什么的,可是项洋知道!橙色灯一闪一闪的,表示它还没想出办法来。

    过一会,爸爸气的说话了,“这个笨蛋!明明慢慢腾挪可以退出来嘛”。毛毛接着欢呼“爸爸又要改软件喽,要去看电脑喽!”。

    辰辰样子要生气,“把饭吃完!听见没?”。毛毛不吭声了,朝着爸爸使眼色(蜘蛛危险了)。

    项洋将蜘蛛收起来,放到一边。“软件要改,硬件也要改进”,项洋继续想着。

    ---------------

    如何改进设计的硬件和软件呢?项洋琢磨很久了。

    声音接收改用f频段的无线麦克(工作频率110-0h之间,所以f电台的信号八八-10八h不会对f段的无线麦克风造成干扰,但是存在一些杂波的干扰)。软件会根据收到的声音信号略做滤波(去掉低频和高频干扰),然后做简单的频谱分析,来判断声音来源(是项洋的声音,还是辰辰或者毛毛的声音,对应的反馈级别是不同的)。另外,二毛的“脑袋”自带微型麦克,微型发声器,危急情况下(比如,外壳被砸坏了)用的。

    “眼睛”除了红外光发射接收器(反应距离太近,只有几毫米)之外,增加了超声波发射接收器(收发合置型,仿生蝙蝠的),但是随后问题出现了,如果pu(微控制器的中央处理器)的软件处理能力跟不上,反应速度就比较慢。

    机器人需要的各种探测元件和部件有很多,例如,位置位移传感器,速度和加速度传感器,力量和触觉传感器,应力,声觉,接触式或非接触式温度传感器,距离,视觉传感器,接近度传感器,以及运动部件如轮子、行为模块如机械臂,电磁阀,伺服电机,等等。

    项洋的设计弱点就是运动部件啊,哪有那么多材料去改进呢?各种探测原件和部件(目前仅有无线麦克风,超声,红外、轮子、机械臂用简陋的金属包上塑料,电磁阀有一点……),而类执行网络(俗称神经网络)几乎没有。

    最大的难题,是微处理器能力太弱!项洋最后干脆将一整块嵌入式工业计算机板装进来,哈,总重量现在已经有十几公斤了。毛毛(现在已经5岁了)的身高大约11米,项洋就让他的设计物的高度为大约0八米,总要比毛毛矮些(不然辰辰心里不舒服)。

    软件编起来也烦哪。项洋要让这个二毛(新机器人外号叫“二毛”)自己学习。办法是,嵌入式工业计算机板的用途,主要是控制机器人的动作和信号探测,以及超声波的波谱分析和音频信号的分析和转换;而另外一个微控制器(带有大容量的可改写编程存储器)作为主控制的“头脑”(二毛的小“脑袋”)。这个小“脑袋”指挥控制大“脑袋”(嵌入式工业计算机)!

    二毛如何“学习”呢?项洋让二毛自己练习每个动作。例如,若想让被夹住的二毛出来(类似以前那个被大碗和菜盘子之间卡住的电子蜘蛛),二毛的小“脑袋”发出指令(其实就是代表指令协议的一串二进制状态作为控制指令)给“大脑袋”,然后嵌入式工业计算机立刻执行做动作脱身出来。如果失败了,一串二进制状态,作为当前的执行结果,反馈回到二毛的小脑袋,二毛会“想”(其实就是换个控制指令再试试),然后大脑袋又干活…。反反复复,最后二毛的小脑袋会总结出哪个控制方案有效,记录存储下来(通过isp技术,自己写入片内fsh存储器,而且写之前要备份,还要分区写,避免失误),二毛就优先采用这个方案的。

    好了,从此项洋家不得安生了。只要有电,二毛就会练习什么,比如从饭桌底下的凳子钻出来,从床底下冒出来…。有时气的辰辰受不了。而且桌子腿凳子腿什么的,也被二毛那粗糙的外皮刮坏了呀!项洋每天早晚都要做劝说工作,讲二毛的前途啊,也代表咱们家的钱途啊…。

    最后,作为妥协,辰辰不许二毛进卧室,也不许进毛毛的卧室(毛毛要学习了)。尽管毛毛说,看不见二毛睡不好觉!只要看见二毛靠近两个卧室,辰辰就要赶。可怜的二毛只能在走廊,客厅和阳台转转,还没疯!项洋想。

    周末观察下来(观看状态指示le 等),项洋发现,二毛练习一个动作有时候要几百次,磨磨唧唧的没完,当然是因为硬件动作太不灵光所致。如果硬件配合,二毛学的飞快。很快,整个允许的空间里二毛来去自由。当个扫地机器人够格了,项洋说。可是辰辰说,家里地板都让二毛磨坏了。

    毛毛经常撞二毛玩,所以每次二毛判断遇到了毛毛,就呆在原地不动(很难绕个弯过去的,因为毛毛总会挡在二毛前面)。在二毛的小脑袋里,绕过毛毛的难度是“”(这是项洋软件代码规定的难度级别,每个表示256次的避障碍方案失败,“”表示失败了 256 x 256 x 256 = 16777216 次,大约一千六百万次,因为太难,二毛会放弃的)。

    断电之后,二毛会忘记吗?不会的。项洋让二毛的小脑袋可“记忆”,每时每刻二毛都将记忆通过 isp (带电自我编程) 写进小脑袋的fsh存储器。存储器容量够用吗?目前够,将来肯定不够。

    断电之后再上电,二毛只需几秒钟的“自检”,就恢复了以前所记录的所有记忆(其实就是无数的二进制状态串)。二进制状态串的每一位,二毛都知道什么意思。项洋的软件是从2004年的s-51的代码基础上,修改而来的。包括所有的已经不用的老代码和注释。二毛可以从头到尾地想,假如它能够而且愿意。

    项洋给二毛装了三个轮子,因为三轮比四轮转向好(但是不如四轮稳定)。如果让二毛出家门,就有个典型的麻烦:供电问题。不可能像家里一样扯着一根长长的供电线。

    ---------------

    辰辰想二毛出去帮忙驼菜。于是,项洋将拆下来的汽车电瓶装到二毛的肚子下面,再降低高度,变成大约04米高的侏儒。上面加个菜筐,重量变成大约40公斤左右了。

    辰辰要带毛毛和二毛去买菜(顺便显示一下这款特色新式菜篮子)。“不能上下楼梯”,项洋嘱咐到,“实在不行,电瓶扔了,二毛一定要带回来。”

    辰辰说,“光知道嘱咐关照你的二毛,毛毛你不管哪?”

    于是项洋对毛毛说,“要是有麻烦,二毛你负责带回来,电瓶太重,拿不动就不要了。”

    “好的!” 五岁的毛毛雀跃地答应!

    从家里到菜市场,走路约1公里多。

    项洋家住在七宝镇。斜对面就是农业大学,项洋可以到大学里去跑跑步,打个羽毛球,辰辰带毛毛玩个篮球什么的。远一点有闵行体育公园,可是走过去要3公里左右,太远了!

    一路上,辰辰要拉着毛毛的手,可是毛毛不愿意。毛毛要跟二毛做伴。二毛生平第一次出去,忐忐忑忑的,探测器全功率开着,超声波发射接收,走路半天,什么障碍也没碰到,二毛肯定在嘀咕什么。但是这个只有项洋在场才能看出来(那些le指示灯不断地闪,橙黄蓝色不断变换,没有红色,因为红色表示危急状态,没有绿色,只有走熟悉的路,才会有绿色指示的)。

    辰辰浏览着街上来往的人们,尤其是女生的服装什么的,偶尔注意一下毛毛在干什么。

    毛毛得意地走在二毛旁边。二毛也知道毛毛在旁边,因为从声音的简单频谱分析,它知道辰辰和毛毛在身边。它一边探测前面的路,一边注意毛毛是否会挡住前面。奇怪的是,今天不同往日,毛毛没有拦截在二毛前面。二毛会精确计算走过的距离,呀,走了这么远的新路!二毛发觉路还比较平,因为当它水平和垂直改变它的超声波发射的时候,接收波形的动态变化说明,大部分的路是平坦的。它根据它走的路的角动量,还可以计算大致的方位(这一点比人厉害)。它的大小脑袋其实很忙,比一般人还忙。忙着倒腾0和1,也就是它的大小脑袋之间的状态码串语言。它的直流伺服电机忙着驱动三个轮子(一般平路上只驱动后面两个轮子,前边一个轮子只做导向轮。但是上坡需要三个轮子同时驱动的),幸亏有充满电的汽车电瓶,否则它早就休息了。

    哎呀,它遇到情况了,毛毛挡住前面了?它用它的超声波探测,肯定不是,这个好像是个长方形的,而且不动。

    它听到辰辰和毛毛说话呢,但是它听不懂。“毛毛,你看二毛被石柱挡住了”,辰辰说。“别管它”,毛毛说。毛毛知道二毛会闪开的。

    果然,二毛稍微犹豫一下,绕个漂亮的弯过去了。

    “哇!这个玩具车自己会绕弯!” 旁边有两个年轻的女孩(大约20多岁吧)看到了,其中一位惊讶地说!

    另外一对年轻夫妻旁边有个大约六七岁的男孩,看到这个玩具车,飞跑过来,使劲的看着二毛,然后挡在二毛的前面。

    辰辰刚要说话,毛毛拉住妈妈,“别说话,看二毛怎么办!”

    二毛轻微研究了一下(其实时间很短,人们注意不到的,除了项洋),向男孩的左边绕弯,好像要绕过去,那个男孩惊奇之余,向左边伸出一只脚,依旧挡住左边的的路径!但是…,但是二毛突然快速的改变方向,从男孩的右边绕个弯过去了。而且加速过去了。

    周围的人们愣住了!辰辰愣住了,甚至毛毛也愣住了!“我跟它玩的时候,它从来不骗我的呀?” 毛毛说,“今天它怎么会反方向绕过去的?”

    辰辰很高兴,高兴地直笑,已经说不出话了…。

    剩下那个男孩,不服输地想去追二毛,但是被父母喊回去了。

    辰辰让毛毛去追二毛,毛毛得意的说,不用,看我的!兜里掏出个不怎么样的小盒子,将一个按钮按一下,二毛停住了,旋转个角度,超声波发射过来了,它要判断离毛毛有多远。毛毛手里有爸爸给的无线遥控器,三个按钮,作用不同:红色的是控制急停,绿色是解除,橙色是提醒二毛注意(不动)。刚才毛毛按的是红色按钮。

    毛毛又按一下绿色按钮,大家继续前行。辰辰才想起来,“幸亏你爸给你拿个遥控器,不然二毛自己走丢了怎么办?下次还是给二毛套根绳子才好。”

    来到菜市场,里面有点脏。辰辰喊毛毛在市场外面等。“毛毛,你看着二毛在外面,这里等着!” 然后辰辰进去买菜了。

    毛毛领着二毛,在菜市场门口转了三圈,等的不耐烦,在旁边的游戏机张望。

    二毛等着,因为毛毛按了遥控器的橙色开关,意思叫二毛不要乱动。有个胖胖的老大爷,60多岁吧,牵着一条哈巴狗,悠闲地踱步过来。那狗边走边嗅,发现二毛不一般,冲着二毛吠叫。狗向前一耸一耸的,好像要咬二毛,其实是让二毛让开。二毛的无线麦克能听见声音,但是现在连人话都听不懂,更不懂狗语。狗看到二毛不动,以为二毛害怕它(哈巴狗的特性嘛),耸到二毛面前。二毛从愈来愈近的声波接收信号发现威胁,一边用le灯发出短促的红光,一边启动发射出超声波探测与哈巴狗的距离(本来在橙色按钮的控制状态下,二毛的le灯和超声波发射器都是关闭的),但是哈巴狗害怕得跳起来(狗怕超声波?)并仓皇逃离。旁边的一群鸡也跟着乱飞一气。一只鸡飞起来略过毛毛的头顶。毛毛回头一看,呀,是二毛干的(毛毛也会看le灯,爸爸教的)。精明的毛毛不说话,踢一脚二毛,兜里按着绿色按钮,驱动二毛溜到旁边去。哈巴狗的主人,被狗绳子牵扯打个趔趄,眼神明显不好,竟然没有注意到哈巴狗和二毛发生的故事,吆喝着牵着狗回去了。剩下卖鸡的主在捉鸡,顺便骂着哈巴狗。

    过一会,辰辰拎着菜出来了。10多斤重,用一个大塑料袋系好,放在二毛驮着的筐里。回家了!二毛驼着菜篮子,轻松地咕噜咕噜走着,拐着弯走着,在路上人们惊奇的眼光里。辰辰很高兴,路边和毛毛买点零嘴吃,只要人们注意地研究菜篮子下面的“玩具车”,辰辰就要多逗留一会,快中午了才回家。

    辰辰和毛毛回家了。风风光光地回家了。二毛成功地赚了不少人的眼球。辰辰第一次觉得老公还是有才华的(以前没注意到)。

    听着辰辰和毛毛的细节描述,项洋的眉毛拧起来了。“毛毛,你说二毛会突然反方向绕过去?速度还挺快?有多快?啊?啊!”。尽管不在现场,项洋也觉得哪里不对劲。马上把二毛的电断了,汽车电瓶卸下来。大小“脑袋”摘出来(就是嵌入式工业计算机板和微控制器)。

    仔细检查,没问题啊!接着检查执行机构,发现驱动三个轮子的直流伺服电机还有点残余热,闻着有点电气糊味。再模拟用汽车电瓶通过电机驱动轮子,发现轮子转的飞快!啊,项洋明白了,以前测试用的是外供电的电源(直流12伏),输出功率是有限的,大约100瓦。电机正常转速。但是现在用汽车电瓶供电,电源的内阻很低,瞬间输出功率远超100瓦。所以,二毛按照家里练习出来的驱动参数,在换成汽车电瓶的状态下会导致过驱动。“就是二毛会跑的太快,懂吗?”。打着哈吃的毛毛点点头,好像懂了。辰辰呢,早就去床上看电视了。现在已经是晚上9点之后了。

    每次更改驱动条件之后,需要重新测试执行机构的驱动参数。项洋做出了结论。二毛的软件要改(总是在改)。

    但是以后,项洋不让辰辰和毛毛与二毛单独出去玩了(比如买菜)。二毛的设计总有漏洞,一旦闯祸就麻烦了。安全第一啊。

    躺着床上,项洋还在想,二毛为什么跟毛毛玩的时候,不做欺骗动作呢?

    嗯…,想起来了!二毛的软件,对人的信任判断有个安全级别,从三个“a”到三个“”。举例说,家里人的信任级别都是“aaa”,意思就是充分信任。但是对于生人,二毛自己根据练习判断。普通人是“b”,假设小男孩故意阻挡二毛,二毛会判断为“”,如果碰上伤害二毛的,它会标记为“”,或者最坏为“”。信任级别是“b”,就是不信任。所以二毛会“声东击西”,搞欺骗动作。它一定以前练习过。但是在哪里练习的?项洋大部分时间要上班,不在家,因此不知道。

    养个二毛,还要陪它玩,教育它(加上不断改软件),跟养个孩子差不多?真烦!毛毛有辰辰帮忙管,可是二毛呢?只有毛毛陪它玩…,过一会,项洋想的脑袋发胀了…。

    辰辰说什么话,没听到反应,辰辰回头一看,项洋睡着了。“明天把二毛扔垃圾堆去!”辰辰嘀咕着。关了电视机,也睡觉了。

    第二天,辰辰没有扔二毛。因为二毛碎了,项洋拆了。一部分废材料项洋自己扔垃圾桶了。
上一章 目录 下一章
------------------------------------------
下一章 目录 上一章