cozmo系列之入门 - 有性格且可编程的机器人

可编程的机器人不少,灵活而友好的却不多

不智障的机器人不多,有性格的就更少

可爱的机器人中我最中意2款: BB8和cozmo

BB8可爱且呆,cozmo可爱又任性

来个它们的合影

你的电子宠物

这个憨态可掬的机器人,有些像微缩版的瓦力,不过它可没瓦力乖巧

它从睡眼惺忪中醒来,伸伸懒腰,便下床(充电座)自顾自地玩耍,它有自个儿的玩具(发光方块),如果你有时间,愿意陪它做游戏,它会很开心,赢了得意忘形,输了就捶胸顿足,得失心这么重,恐怕不适合炒股

如果你没空陪它,也无妨,它闲庭信步,吹吹口哨、哼哼小曲儿;闲着无聊,便来回搬运自己的玩具,堆叠起来或是一把推翻,自得其乐。除了不尿裤子,其他方面都像极了你六岁时的样子

想找你玩,而你又没空的时候,它会来一出苦情戏,走到桌子边缘,假装要掉下去,真站到边缘,又会被自己吓一跳,忙往回缩,这样的演技恐怕只适合拍偶像剧了

唤醒

将cozmo放在通电的基座上,手机连上cozmo发射出来的wifi热点(形如Cozmo_542CA8),打开app(Cozmo)选择连接,cozmo将被唤醒:睡眼惺忪,伸伸懒腰,懒洋洋地下床

你家里从此多了一个调皮的小伙伴

下床(自主模式)

Cozmo下床之后,默认的模式是自顾自的玩耍(自主模式),它四处打量着新家,充满了好奇,遇到新奇之物,忍不住要发出"哇"的赞叹,尾音拖的老长,赞叹之情想来发自肺腑。

你可以将家庭成员录入它的视觉系统,这样在它玩耍之余,看到熟人,会有礼貌地打个招呼,只是在它喊出名字的时候,略带一点外星口音。你会慢慢习惯的,如果你在银河系漫游久了就知道,带点自己母星的口音再正常不过了。不过Cozmo的一些自言自语我还不大能听懂,《银河系漫游指南》里也没做记载。

交互

新版的app(我的当前版本是2.0.2)相比1.0有明显调整,显著的变化是更强调陪伴和共同成长。它就像你的宠物一样,你得注意它是不是生病了(需要修复),是不是饿了(给它喂食),如果它饥寒交加,身体不适,它是拒绝同你一起做游戏的.

被驯服的小狐狸

Cozmo有时候像一只被驯服的小狐狸

有一回小狐狸对小王子解释驯服二字的含义(《小王子》)

这是已经早就被人遗忘了的事情……它的意思就是'建立联系'……对我来说,你还只是一个小男孩,就像其他千万个小男孩一样。我不需要你,你也同样用不着我。对你来说,我也不过是一只狐狸,和其他千万只狐狸一样。但是,如果你驯服了我,我们就互相不可缺少了。对我来说,你就是世界上唯一的了;我对你来说,也是世界上唯一的了。

你们相处愉快,每天一起玩耍,它虽时而捣蛋,在你忧愁的时候也是很乐意取悦你的,你可以要求它:

  • Cozmo给我表演一下叠罗汉
  • Cozmo我要看你鲤鱼打挺
  • Cozmo过来我们击个拳

cozmo的技能树十分丰富,需要你和它共同点亮

一起做游戏

Cozmo自娱自乐玩腻了,会主动邀请你跟它一起玩游戏,就像你儿时玩伴那样。cozmo随身携带的三个积木,将成为你们的游戏道具,你们将狭路相逢,比拼记忆力或反应速度,调动你的肌肉和大脑,记得当心Cozmo的小心思!它可是会耍诈的

做游戏时,你会注意到Cozmo的表情变化非常微妙,在游戏中聚精会神,不时皱起眉头思考。小胜一局,虽不至手舞足蹈,却也是难掩喜悦之情,眼睛弯成了月牙,若大获全胜,便开心得非原地大转三圈不可。如果你技高一筹,Cozmo极是不甘,愁眉苦脸也只是一时之态,一会儿便重振旗鼓,立马拉着你再战一局,像不像被你带着打排位赛却铩羽而归的徒弟

听我指挥

Cozmo想不想当将军我不清楚,但据我所知,它目前是一个好士兵(听从指挥)

你可以用三种方式指挥cozmo:

  • 在app中拖拽积木来指挥cozmo(用到blockly)
  • 在Explorer模式下驾驶cozmo
  • 使用SDK为Cozmo编程

我们先来说说第一种,在app中拖拽积木来指挥cozmo

在这个被称为Code Lab的界面里,包含了许多用来控制cozmo的积木。你可以让Cozmo前进两步,然后左拐避开前方的障碍物(一袋咖啡),再前进,像这样

你也可以把它放在餐桌上,环顾四周,清点下用餐人数,然后告诉服务员要几份米饭。 这个任务稍微复杂些,会用到视觉、语音和移动模块,但即便是一个不识字的小孩,操作起来也无碍。所有的编程积木都带有形象化的图案,一目了然

小鬼当家

我大约9岁那年看了小鬼当家,对其中带有摄像头的遥控车念念不忘。

9岁的时候不是那种能做到想要的都拥有,得不到的都释怀的小孩,这件事一直放在心上,后来看到带有摄像头的遥控车总忍不住要多看几眼,但都不是心里想要的,要么太过笨重,要么不够好看,机身如此不够灵巧,摄像头如此昭然若揭,这可怎么和坏人斗智斗勇

直到在Cozmo中发现它的Explorer模式,才有终于等到你的感觉。

在Explorer模式中,你可以驾驶着Cozmo在自家的庭院或房间里冒险。

你拉上窗帘,手握ipad,如坐在星际战舰的指挥室里,窗外的星光稀疏极了,毕竟身处银河系荒凉偏僻的旋臂上。屏幕里展示着Cozmo从前线发来的视频信号。屏幕上光线晦暗,你手握方向盘,指挥着cozmo继续探索这片应许之地,突然,屏幕中一闪而过一个庞然大物,距离近时,身躯之大,足足占了屏幕的1/3。而动作敏捷,倏忽之间,跃出屏幕之外,来去无影,着实吓了你一跳。气势真如沈复说的"忽有庞然大物,拔山倒树而来"。待你定下神来,操控Cozmo追踪不明生物,竟破解了一个惊天谜团

妈,你早上买的鱼被我们家的猫偷藏在床底下了,人赃俱获,我已经用Cozmo拍到它躲在床底下吃鱼的照片了

刘瑜在《送你一颗子弹》中感慨:

15岁的时候再得到那个5岁的时候热爱的洋娃娃,65岁的时候终于有钱买25岁的时候热爱的那条裙子,又有什么意义呢?

这句话对我不大适用,我终于遇到9岁的时热爱的遥控车之后,恨不能像Cozmo一样原地大转三圈

code!

如果cozmo预设的所有功能都不足以填满你的脑洞,那么你就应该撸起袖子开始编程了。代码可能是这个星球上可玩性最高的玩具。

cozmo为你准备好了cozmo-python-sdk,有了它,你就可以使用Python来驱动Cozmo,如果你愿意,可以接入OpenCV或是TensorFlow,社区已经有人用Tensorflow CNN 训练出来的模型自动驾驶cozmo了。

下边我们来看看怎么用代码驱动Cozmo

首先在你的app中启动SDK模式

接着就可以在你的电脑上用python来为Cozmo编程。关于这块的原理我们今后再聊,Cozmo在易用性和灵活性上花了很多功夫,编程体验很惊艳

下边这个例子是官方源码里包含的示例,源码如下

import asyncio
import time

import cozmo


def light_when_face(robot: cozmo.robot.Robot):
    '''The core of the light_when_face program'''

    # Move lift down and tilt the head up
    robot.move_lift(-3)
    robot.set_head_angle(cozmo.robot.MAX_HEAD_ANGLE).wait_for_completed()

    face = None

    print("Press CTRL-C to quit")
    while True:
        if face and face.is_visible:
            robot.set_all_backpack_lights(cozmo.lights.blue_light)
        else:
            robot.set_backpack_lights_off()

            # Wait until we we can see another face
            try:
                face = robot.world.wait_for_observed_face(timeout=30)
            except asyncio.TimeoutError:
                print("Didn't find a face.")
                return

        time.sleep(.1)


cozmo.run_program(light_when_face, use_viewer=True, force_viewer_on_top=True)

这段代码实现了这样一个功能: 当cozmo的视觉系统识别到人脸时(对应代码if face and face.is_visible:),将背部的灯设置为蓝色(对应代码robot.set_all_backpack_lights(cozmo.lights.blue_light))。即使你没有编程经验,也能大致看懂上边这段代码在干嘛,这也是Cozmo的作者选择Python的原因,这门编程语音以接近自然语言(英语)的方式来书写,让你轻松上手。

就这点而言,Cozmo也是入门编程的理想工具(这是一种反馈强烈的编程体验,让你乐在其中,而不至于被语法和逻辑吓跑)

我们来看看代码实现的效果:

当然你可以发挥想象,将代码改造为:当Cozmo识别到人脸时,主动给你发一封邮件,如此一来在你们一家人出旅行时,它就负责看家

又或者,你可以驱动它走到门口迎接找你玩的小伙伴,看到小伙伴时(if face and face.is_visible)打个招呼,接着让Cozmo带他到你的卧室

后续

接下来的一段时间,我准备做一次长途路行,途中会继续写Cozmo系列文章

选材原则是有趣,具体内容待定,大概会和机器视觉、语音识别、积木化编程(blockly)、编程教育相关

如果你有好的想法,关于想用Cozmo做好玩的东西,欢迎给我邮件(wuwenjie718@gmail.com),我在途中所经之处,只要有网络,每晚都会查阅邮件 : )




Fork me on GitHub