说明

这是之前的文章,更新以匹配 CodeLab Adapter 3.0


前言

Vector

我们近期接入了Vector!这是我们今年的里程碑之一,Vector 代表着机器人的一种可能的未来。它是Cozmo的下一代。在我看来,Cozmo/Vector 是划时代的 AI 玩具,它甚至成为了 CMU(卡内基梅隆大学)教学机器人的教具,如 CMU 的Dave Touretzky 教授(他是 cozmo 死忠粉)在社区里说的: Cozmo 在很多方面,至今一骑绝尘。

CodeLab Adapter

CodeLab Adaptercodelab.club构建的基础设施之一。CodeLab Adapter 目标是使万物积木化,帮助没有编程经验又热爱创造的人,更容易地去实现他们的创意。

CodeLab Adapter是社区里第一个将 Vector 积木化的工具,我们甚至赶在了官方的前边。今年上半年 anki(Vector 所属的公司)就推荐社区里关心教育的用户,使用 CodeLab Adapter 作为将 Cozmo 接入教育平台的工具。

演示

先来看下演示视频:

例子中,我通过手势来"驾驶" Vector。 通过简单拼搭leap motion积木和 Vector 积木,我们就可以利用手势来"驾驶" Vector。

开发者视角

CodeLab Adapter希望打造一个开放的生态,鼓励开发者和公司将自己的设备接入进来。我们希望降低开发者的接入门槛,不必从 Scratch3.0 的源码入手。目前官方的扩展机制,抛开文档缺失不说,每次发布新的积木,都得经历编写 js 插件、build vm、build gui,重新打包发布的过程, 繁琐而缓慢。

为了简化开发者自定义插件的流程,我们构建了CodeLab Adapter,同时我们在scratch3v3.codelab.club中构建了通用的通道:EIM(everything is a message), 利用这两个东西,允许开发者连接 AI、开源硬件、物联网或任何开放的东西。为了支持开发者做更复杂的扩展,我们加入了 json 积木,允许用户在自定义的 Python 插件和 Scratch 之间传递复杂的数据结构:Python 与 Scratch 的双向通信。如果开发者追求简便而不是扩展性,我们也准备了更为便捷的通道:使用 Python 拓展 Scratch 的能力

EIM 虽然扩展了 Scratch 的能力,但开发者往往觉得还不够,他们希望能自定义积木的外观和构建新的原语,而不是使用 EIM 中最原始的通信原语,也就是说他们希望直接面相用户构建积木的样式。Vector 的接入是很好的案例,我们在此把技巧分享给大家。

在这个例子中,我们演示了如何使用 json 积木块来传递复杂的数据结构(类似RPC的参数构造,包含方法(method)和参数(params)),之后使用 EIM 的 send 积木,将数据发往CodeLab Adapter,这是 CodeLab Adapter 中解析这个消息的插件代码:node_vector.py

在 scratch 一侧,通过 Scratch 的自定义积木功能,创建出特定于应用的积木,而不是使用最原始的 EIM 积木。如此以来 EIM 成为实现自定义积木的底层设施。

我们构建了新的插件机制!CodeLab Adapter 为 scratch 3.0 构建了一种新的抽象层,兼容官方源码,但允许你用 Python 而不是 JavaScript 来动态扩展 Scratch3.0,无须重新 build 整个平台,同时为你保留了自定义积木外观的能力,这是我们构建开放的开放者生态的重要一步,欢迎开发者入坑: )

如此一来,开发者就这样就可以构建直观的积木给用户使用,eim 作为实现它的底层,用户无需关心这部分。为了更加友好,你可以把自定义的部分放在一个独立的 target(角色)里。在概念上它就像拓展包。target E 表示EIM

插件本身包含在源码中,无需重新编译发布 Scratch 平台,这意味着扩展是分布式进行的,平台本身不需要调整(意味着更好的兼容性),你可以在我们不知情的情况下快速展开你的工作。完成你的扩展之后。下载下来分发给用户即可!

2019 年 1 月份等 Scratch team 正式发布了 Scratch3.0 的稳定版,我们将同步开始构建线上社区,到时候你只需要给你的用户分发 URL 就行。

提示

我们写了一篇关于最佳实践的文章,可供参考