在 Scratch 中玩转机器人:Python、Deep Learning、Posenet and Robot!

所有的边界都被打破了 --《Mindstorms》第二版序言

开场视频:先打个响指

打响指控制机器人

Codelab-Scratch3 与 Python

Scratch 是一门编程语言,上榜过编程语言 Top 20,实际它是一门少儿编程语言(如果你成年了请先不要急着走)。Scratch 基于图形化的编程,通过拖拉搭积木的方式进行编程,整个过程就像是在玩乐高积木,其实 Scratch 项目受到乐高的赞助,乐高与 Scratch 之间可以说是互相影响。

一个正经的程序员,在看到 Scratch 的卡通界面和图形化编程风格时,可能会嗤之以鼻,认为它看上去不像是严肃的编程语言,低龄化或者太简单了。刚开始我对 Scratch 的认知亦是如此。

[@wwj718](https://github.com/wwj718) 在 Scratch3 上做了大量出色的工作,Scratch3 原本不支持运行 Python,利用 Scratch3 原生的插件拓展机制,采用 Websocket 来传递消息,这就像一个间谍,负责 Scratch 内部与外部的通信。消息源源不断地以话题/订阅的方式在网络中传播,这就让 Scratch 不再受限于浏览器网页中。我终于意识到,Scratch 可以做任何事!

从上图看出,整个系统可以看做是三个部分:

  • Scratch3:负责 Block 代码生成与运行,通过 websocket 传输消息;
  • Codelab-Adapter:响应 Scratch 消息,Python 插件管理;
  • Python 插件集合:负责连接万物!

按照这样的设计,Scratch 获得了 Python 的能力,可以将 Python 丰富的生态和库统统接入 Scratch,比如 TensorFlow、ML、DL,甚至可以是树莓派、灯泡、门锁、空调、机器人、游戏 ...

Bret Victor 在《Kill Math》中说道 > 理解并预测量化世界的能力不应该只属于那些能够熟练运用抽象数学符号的人。

而现在编程的能力也不应该只掌握在程序员的手上,在 Codelab-Scratch 中,用户可以快速和轻松地使用这些能力。

为了向你证明这一切,下面是我在 Scratch3 中做的一个演示

人体姿态估计:Posenet

Javascript 版 PoseNet 是 TensorFlow 与谷歌创意实验室合作一款机器学习模型,可以在浏览器中实时估计人体姿态。只要电脑或手机有摄像头,就可以直接在网页浏览器中体验这一有趣的技术。Scratch3 也是纯网页端的,所以将 PoseNet 做成插件的话,Scratch 积木块就具有视觉的能力!

针对 PoseNet,@wwj718 已经在 Codelab-Scratch3 中接入了,智能硬件接口开放的话,接入 Scratch 中,就可以让原本功能单一的产品很容易地获得视觉能力。我相信这就是为我今天的演示所准备的,做一个 Scratch 版本的机甲猎人!

如何接入机器人到 Scratch3

首先硬件设备需要有开放的接口,比如开放的蓝牙协议、串口协议或者 Wi-Fi 协议等,Python 有非常成熟的库可以对这些接口进行调用(不开放也没关系,可以 Hack)。

我已提交相关机器人 Adapter 插件,感兴趣的可以参考我的 PR

手势控制演示

手势控制机器人前后左右翻滚

翻跟斗演示视频

姿态模仿演示

下面是姿态模仿演示,请大家忽略我羞耻又沙雕的动作,和不协调的肢体。

姿态模仿演示视频

最后

如果你也对这一块感兴趣,欢迎加入社区一起折腾。

相关链接

鸣谢

  • @jinbo 的 OSMO;
  • @yucong 的手抖式拍摄;
  • @jianhong 的专业动作调试;
  • @dongming 的无线 Dongle;
  • @carlos 的响指;