搭载Sipeed M1的Maixduino和Grove AI树莓派HAT开发板的入门教程

原文链接:Getting Started with Sipeed M1 based Maixduino Board & Grove AI HAT for Raspberry Pi 由Jean-Luc Aufranc撰写。

2018年,我们介绍了嘉楠科技的Kendryte K210处理器,它具有 RISC-V 内核,并具有用于机器视觉和机器听觉的 AI 加速器。不久之后,  矽速科技推出了搭载该处理器的Sipeed M1 模块,售价约为 10 美元。

2019年我们开始获得更方便的带有Sipeed M1模块的开发板,例如MaixduinoGrove AI Hat。矽递科技将这两种开发板寄给我来评测。因此,我将首先展示我收到的物品,然后展示如何开始使用 MicroPython 和 Arduino 代码。请注意,我使用的是 Ubuntu 18.04,但你也可以在 Windows 中进行开发,这应该也能行得通。

开箱

我收到了两个开发套件,一个是Maixduino 套件,另一个是“用于边缘计算的 Grove AI HAT”。

Maixduino和 Grove AI HAT
Maixduino和 Grove AI HAT

用于边缘计算的Grove AI HAT

让我们先从Grove AI HAT开始。该板是带有 Sipeed M1 模块的树莓派 HAT,它有一个 40 针 Raspberry Pi 接头、6 个 Grove 连接器以及用于摄像头和显示器的连接器。USB-C 端口用于在独立模式即不配合树莓派,单独使用下进行编程和供电。

Grove-AI-Hat 开发板
Grove-AI-Hat 开发板

套件里有一个40针的排针座,我在拆箱过程中没太留意。后来在开发板上看到了40针的插孔,我才在包装里找到它。

用于边缘计算的 Grove AI Hat
用于边缘计算的 Grove AI Hat

底部是带有编号的 I/O 接头针脚和相机的安装点。

Grove AI Hat的配套摄像头
Grove AI Hat的配套摄像头

后来我也收到了和该板配套的相机。

Maixduino套件

下面我们来拆Maixduino 套件,它包括一个带有 Sipeed M1 模块和一个 ESP32 模块的 Maixduino Arduino 兼容板。摄像头已经安装在Maixduino开发板上,此外还有一个2.4 英寸彩色显示屏,它采用的是QVGA 分辨率。

带摄像头、LCD 显示屏的Maxiduino 套件
带摄像头、LCD 显示屏的Maxiduino 套件

电路板的底部只有用于标识引脚名称的丝网印刷以及电路板的框图。

Maxiduino 开发板框图
Maxiduino 开发板框图

Maixduino 套件上使用 MicroPython

我将首先从 Maixduino 开始,我尝试遵循官方Wiki中的一些说明以及网上的其他资源,因为Wiki有时有些不完整或不准确。

4 种开发方法/SDK:

  • MaixPy (MicroPython)
  • Maxduino (Arduino)
  • Kendryte SDK,汉字官方SDK,提供基础API
  • RT_Thread – RT-Thread 支持

我将使用第一个方法来实现本教程。

但首先让我们连接 USB type-C 电缆,看看会发生什么。

Maxiduino 开发板启动欢迎语
Maxiduino 开发板启动欢迎语

开发板开机时显示屏上会以红色背景上写着的“欢迎使用 MaixPy”。

固件升级

让我们按照Wiki 说明升级固件。我们可以从源代码构建固件直接获取二进制文件

我第一次尝试时就使用了直接获取可用的最新版本的方式。


目录中有四个文件:

  • elf_maixpy_v0.4.0_39_g083e0cc.7z – elf文件,普通用户不用理会,它用于崩溃调试
  • maixpy_v0.4.0_39_g083e0cc_m5stickv.bin – 用于 M5Stack 的M5StickV AI 相机
  • maixpy_v0.4.0_39_g083e0cc_minimum.bin – MaixPy 固件最小集,不被MaixPy IDE支持,不包含 OpenMV 相关算法
  • maixpy_v0.4.0_39_g083e0cc.bin – MaixPy 固件的完整版本(MicroPython + OpenMV API + LittlevGL 嵌入式 GUI 框架)

我将使用最后一个文件,但在进一步之前,让我们将当前用户添加到dialout用户组并设置一些 udev 规则以便作为普通用户能够访问 /dev/ttyUSB设备 :


创建  /etc/udev/rules.d/50-usbuart.rules文件,并把下面的信息写到文件里:


现在下载适用于你的操作系统,Linux 或 Windows的最新 kflash_gui 程序用于烧录固件。我下载的是 1.5.3 版本,然后解压并启动它:


kflash_gui固件烧录程序
kflash_gui固件烧录程序

现在我们可以打开固件文件,选择Sipeed Maixduino,以及设置串口。我特意查看了内核日志以找出具体使用的那个串口设备:


我大概扫了一眼,注意到最后一行带有 ttyUSB1,所以我选择了该设备。但是却出现了一些错误……

kflash_gui烧录错误提示
kflash_gui烧录错误提示

我还尝试使用命令行 Python 实用程序,然而我得到的结果依旧是相同的:


我咨询了矽递科技,他们告诉我要使用另一个端口,于是我选了择ttyUSB0,这也确实奏效了!

kflash_gui正在烧录固件
kflash_gui正在烧录固件

仔细查看上面的内核日志,实际上我可以看到分配给 Maixduino 的 ttyUSB0 和 ttyUSB1,事后看来,这可能是因为我们可以使用一根 USB 电缆通过不同的串行端口分别访问 ESP32 和 Kendryte K210 处理器。

但是,当我通过 minicom (115200 8N1) 串口工具连接到 /dev/ttyUSB0 时,固件似乎存在问题:


我刚刚使用的 MaixPy 0.4.0 版本是一个预发布固件,所以我已经切换到 MaixPy 0.3.2,它被认为是一个真正的稳定版本。这次我使用命令行串口工具查看:


让我们看看串行控制台的输出:


这次一切正常。让我们尝试使用“ help()”来获取更多信息:


串口打印出了模块列表,我们可以 help(‘<module_name>’) 获取每个模块的函数列表。这对用户来说不是最友好的学习方式,所以让我们回到 Wiki,并查找拍摄照片并将其示例代码显示在显示器上:


终端的实际输出:


我们确实可以在附加的显示器上看到相机输出。

Maixduino 摄像头输出
Maixduino 摄像头输出

随着代码量的增加,这种在串行控制台中 REPL 界面种键入命令的方法变得不切实际。但好消息是,该公司还设计了 MaixPy IDE,这使得便代码的编写和烧录更加方便。

我想使用最新的 MaixPy IDE 0.2.4,它需要固件 0.4.0 或更高版本。但我重新烧录的0.4.0.39版本并不能正常启动 ,后来我看到 8 月 16 日刚刚构建了一个新版本,所以我给开发板刷了新固件:


这一次,板子可以启动了。下面,我在 Ubuntu 18.04 中安装和启动了 MaixPy IDE :


最后一行命令启动了MaixPy IDE,它默认打开的 是hello world 程序。

MaixPy IDE
MaixPy IDE

我们现在应该在Tools->Select Board 中选择 Maixduino :

选择 Maixduino
选择 Maixduino

单击 IDE左下角的绿色链接图标并选择 /dev/ttyUSB0 连接到开发板,完成后按下面的“播放”按钮在 Maixduino 上加载并运行 Hello World 示例。

在Maixduino 上加载和运行 Hello World 示例
在Maixduino 上加载和运行 Hello World 示例

右上角的区域显示了实际的帧缓冲区,以及 R、G 和 B 直方图下方的三个区域。

一切都很好,但K210处理器的亮点是它的KPU AI/机器视觉加速器。这有文档可以帮助我们。

首先让我们下载模型:


有三种模型:


“人脸模型”是一个预训练的微型 Yolo-v2 模型,用于检测人脸,另外两个是 mobilenet模型。我使用的是 Yolo-V2 示例。

烧录face_model_at_0x300000模型
烧录face_model_at_0x300000模型

我们打开 kflash_gui,加载模型文件,然后单击“下载”将其烧录到板子上。

现在我们可以在 IDE 中编写Yolo2 代码:


sensor.run(1)之前的第一部分是设置相机,就像我们在前面的例子中所做的那样,KPU 部分用三行初始化:


第一行加载我们刚刚在地址 0x300000 处刷入的模型。第二行定义了 Yolo V2 的锚点。这些锚点预定了 Yolo“方框”的宽度和高度。可以在Github上找到有关Yolo 锚点含义的更多详细信息。第三行用五个参数在 KPU 上初始化 Yolo,这5个参数的含义分别为:

  • kpu_net: kpu 网络对象
  • threshold: 概率阈值
  • nms_value: box_iou 阈值
  • anchor_num: 锚点数
  • anchor: 先前定义的锚参数

while 循环几乎不言自明:拍摄照片,运行 yolo,如果检测到人脸,则绘制一个矩形,将结果推送到显示器,然后再次循环。

但它真的有效吗?下面让我们验证下:

maixduino人脸检测
maixduino人脸检测

经过验证,这个示例确实有效。Note识别在 IDE 中以大约 11 fps 的速度完成,但在独立运行时会更快。所以我添加了在Tiziano Fiorenzani 的 MaixPy Dock 演示中找到的代码,以在显示屏的左上角显示 fps:


然后我打电话给一位同事帮忙测试多张人脸检测,并拍摄了一段视频。

相关视频链接,点击此处即可查看

人脸检测/跟踪以大约 15 到 18 fps 的速度完成,我的熊猫玩具没有被检测到,但这可能不是错误而是没有这个特性,因为模型必须是用人脸训练的。此外当我的脸和熊猫一起时,可以识别到我的脸,但不如单独只有我的脸被检测时识别的快。

接下来,你可能想要使用 ESP32 功能,例如 WiFi 和/或蓝牙连接,但遗憾的是没有与之相关的文档。我尝试了使用我的  ESP32 Micropython 教程来设置 WiFi,但它没有生效:


我想这是正常的,因为我在 K210 而不是 ESP32 中运行它。我查看了一些帮助,然而只实现了几个功能:


暂时无法使用 /dev/ttyUSB1 连接到 ESP32,这可能需要做更多工作。

如果你想在 Maixduino 上使用 Keras 训练和运行自己的模型,论坛帖子提供了这样做的指南

使用 Grove AI HAT

单机模式

让我们切换到另一块板:Grove AI HAT,它既可以在独立模式下工作,也可以连接到树莓派。我将主要遵循 Wiki,该 Wiki展示了如何在独立模式下使用 Arduino IDE 开发该板,我跳过了 GPIO/Grove 部分,直接跳转到相机、显示器和计算机视觉部分。

我已经连接了鱼眼镜头,插入了排针,并从 Maixduino 套件中借用了显示器。请注意,你还可以将 Maixduino 相机与 Grove AI HAT 一起使用,我已经尝试过了,但我发现实际结果是面部检测和跟踪的效果并不理想。

带摄像头屏幕的Grove AI HAT
带摄像头屏幕的Grove AI HAT

我假设你已经在电脑中安装了 Arduino IDE。作为参考,我在 Ubuntu 18.04 中使用 Arduino 1.8.9。

首先,我们需要转到File->Preferences,并使用以下 URL 编辑“Additional Boards Manager URLs”以添加对矽递科技开发板的支持:


添加对矽递科技开发板的支持
添加对矽递科技开发板的支持

另请注意有关“More preferences can be edited directly in the file”的路径,因为我们稍后会访问此目录。

现在转到Tools->Board->Boards Manager并搜索“k210”。当你看到“Grove AI HAT for Edge Computing by Seeed Studio”时,单击安装。

安装开发板的BSP
安装开发板的BSP

过一会就好了,可以选择Seeed K210 Pi,并确保选择“k-flash”烧录器(Programmer)和/dev/ttyUSB0口,如下图所示。

选择开发板、烧录口和烧录器
选择开发板、烧录口和烧录器

现在在你的工作目录中安装 Kendryte 独立 SDK:


模型文件需要手动刷到板子上,即我们在上面提到的 More Preferences 中使用路径的地方:


如果一切按计划进行,这是最后一个命令的输出:


现在回到你的工作目录并创建一个文件夹和同名的示例,在我们的演示中是“face_detect”:


从SDK复制face_detect的内容:


现在在 Arduino IDE 中打开face_detect.ino。这将自动打开一堆其他文件,包括board_config.h,我们需要修改它以启用 OV2640 传感器和 LICHEEDAN 板,如下图所示。

Arduino IDE加载和修改程序
Arduino IDE加载和修改程序

你可以去 main.c 研究代码,但要比 Maixduino 的 MicroPython 示例需要更多的努力来理解代码。如果你只是想尝试一下,你可以检查它是否编译。由于有未使用的变量,我收到了一些警告:


但它编译得很好:


我们现在可以直接从 IDE 上烧录该示例程序:


当以类似于 Maixduino MicroPyhon 演示的方式检测到人脸时,该板现在将捕获视频并显示一个红色矩形。

不过显示器是倒置的。对代码的一个小改动修复了这个问题(见下面的第 5 行):


Maixduino 单机模式下人脸识别
Maixduino 单机模式下人脸识别

这基本上就像上面的 Maixduino 演示,但我们没有依赖 MicroPython,而是在 Arduino IDE 中实现的。

Grove AI HAT和树莓派4一起使用

因为它是一个 HAT 板,如果我们没有将它与树莓派板一起使用,那将是一种损失。因此,在断开电源后,我将电路板插入了 树莓派4 SBC。谈到电源,请确保 Grove AI HAT 板顶部的 RPI 5V 跳线设置为 ON。

Grove AI HAT 连接到树莓派4
Grove AI HAT 连接到树莓派4

我认为直接在树莓派4 上开发代码是一件有趣的事。所以我在树莓派上安装了 Arduino 1.8.9 for Arm 32 位,并根据上面单机模式下对Arduino的说明加载了 Seeed Studio 板 URL。

树莓派 4上安装Arduino IDE
树莓派 4上安装Arduino IDE

但是当我尝试安装“Grove AI HAT for Edge Computing by Seeed Studio”时,我很快遇到了一个障碍:

kflash 工具不适用于 arm
kflash 工具不适用于 arm

上面的消息是“工具 kflash 不适用于您的操作系统”,而且我还收到了“工具 kendryte-standalone-sdk 不适用于你的操作系统”的提示。但Kendryte K210 工具在 Arm 尚不可用并不足为奇。

附带说明一下,我使用的是 1GB 的 树莓派4,我很快发现运行 Chromium浏览器也不是一个好主意,即使只打开一个页面,在你运行浏览器的同时运行 Android IDE时,内存会不够用,甚至完全填满了 microSD 卡上的 512MB 交换空间。即使使用 ZRAM 也解决不了这个问题,所以如果你曾经考虑在树莓派 4上运行 Arduino IDE并同时还查看文档,请使用 2GB 或 4GB RAM 的树莓派4版本。

尽管如此,将 Grove AI HAT 与树莓派结合使用的另一种方法是显示扩展返回的数据,正如矽递科技在他们的人脸计数演示教程中所解释的那样。让我们来试试吧。

我们已经有了一个良好的开端,因为我们已经在上面设置了 Arduino IDE,并安装了面部演示固件。现在我们可以在树莓派上安装 Face Count 程序了:


但是,如果我运行Face Count程序时,它会发生分段错误:


我们来看看setup.sh的具体实现:


我们可以看到 Grove AI HAT 通过 SPI 与树莓派通信,他们通过修改 /boot/config.txt 文件来设置它。所以我决定重新启动,但问题是一样的。安装程序目录包含许多二进制库,这些库在树莓派3 B+ 和 Debian Wheezy 上测试过,但切换到 Debian Buster 的 树莓派4 却出现了问题。我已经通知了矽递科技,他们正在调查。

让我们通过展示在 Grove AI HAT 上运行的人脸检测演示视频来完成回顾,一些“非人类朋友”,即我的毛绒玩具再次加入这次检测。

相关视频链接,点击此处即可查看

它大致按预期工作,演示过滤掉了我大多数的“非人类朋友”,并同时从照片中捕捉到了 3-4 张面孔。

购买电路板、显示器和摄像头

我要感谢矽递科技发送的电路板,让我可以使用 MicroPython 和 Arduino 在 Kendryte K210 / Sipeeed M1 平台上进行实验。如果你想重现我的设置,你可以以 28.90 美元的价格购买 Grove AI Hat ,以 7.60美元的价格购买OV2640 鱼眼镜头,或以 23.90 美元的价格购买带有电路板、显示器以及相机的 Maixduino 套件。

分享这篇文章
0 评论
内联反馈
查看所有评论