直接上视频听我 BB:

下面开始编故事……

某个周末,走在去加班的路上,脚底突然被某个东西咯噔一下,抬脚一看,竟然是……


捡起来一看……

哈士奇!哈士奇!哈士奇!

竟然是 DF 还在预售的 HuskyLens 人工智能摄像头(中文名:哈士奇) !

这个故事告诉我们:喜欢加班的创客,运气不会太差。

# HuskyLens 功能介绍

HuskyLens 是什么?

这里简单截取官网介绍的一部分:

HuskyLens 是一款简单易用的人工智能摄像头(视觉传感器),内置 6 种功能:人脸识别、物体追踪、物体识别、巡线追踪、颜色识别、标签(二维码)识别。仅需一个按键即可完成 AI 训练,摆脱繁琐的训练和复杂的视觉算法,让你更加专注于项目的构思和实现。


详细介绍,可以查看官网说明:https://www.dfrobot.com.cn/goods-2050.html

哈士奇官方介绍视频,请直接跳转 B 站:

http://player.bilibili.com/player.html?aid=66695069&cid=115655109

用 3 个单词就可以概括 HuskyLens 的特性:ClickLearn & Play

总之:简单、易用、真香!

这么香的工具,到底该怎么玩呢?请继续往下看。

注意:以下章节偏技术性,是对体验视频的文字性详细描述,会略微无聊,请收藏后慢慢阅读。

# HuskyLens 数据读取测试

由于 HuskyLens 目前还没有正式上市,所以关于它的资料非常少,DF 暂时也没有放出 HuskyLens 对应的函数库,更不用说在 Mind+ 等图形化编程工具中调用了。不过相信不久,我们就可以在 Mind+ 中看到它了,到那时,它的使用就会更加简单、更加小白了!

暂时我们只能根据它的通信协议,徒手来撸代码了。

HuskyLens 默认采用串口通信,当然可以在它的设置中改成 I2C 通信。默认的串口波特率为 57600 bps,格式为 8N1( 8 位数据位、无校验、1位停止位 ),默认通信地址为 0x11。本文中,我带领大家使用掌控板来读取 HuskyLens 的数据。

当然你也可以选择使用 Arduino、Raspberry Pi、LattePanda、micro:bit 等控制器来读取 HuskyLens 的数据,原理都是一样的,就留作课后作业吧,看文本文后,你能不能用其他主控板来读取 HuskyLens 的数据呢?

电路连接图如下:


关于掌控板串口的补充说明:

掌控板的主控芯片是 ESP32,ESP32 有 3 个串口,分别是 SerialSerial1Serial2Serial 我们一般用来下载程序, Serial1 默认使用了 GPIO 9GPIO 10 ,但是 ESP32 的 GPIO 6~11 一般用于连接外部 Flash 芯片,所以我们这里使用 Serial2 与 HuskyLens 连接通信。另外,ESP32 可以将串口 RX 映射到几乎所有 IO 口上,TX 映射到 GPIO 0~31 上(此处没有进行验证)。

所以,这里我们将掌控板 Serial2 的 RX 映射到 P14 引脚,将 TX 映射到 P13 引脚。

参考资料:

https://blog.csdn.net/Naisu_kun/article/details/86004049

我们来看一下 HuskyLens 的通信协议。它主要有两种模式,正如视频中看到的那样,大部分情况下, HuskyLens 屏幕上会显示一个方框(Block 模式),在巡线模式下,它会显示一个箭头(Arrow 模式)。这两种模式下,数据的长度和格式基本是一致的,这里我们以 Block 模式为例进行讲解,Arrow 模式原理一样,此处不再赘述。

我们来看一下它的数据格式,可以看到它是以0x550xAA开头的一串数据,紧接着是它的通信地址 Address、数据长度 Data Length、命令代码 Command,以及我们最关心的数据 Data。最后是一个校验位。


每个数据的含义如下:

Block 模式:

哈士奇通信协议说明Block模式

Arrow 模式:

哈士奇通信协议说明Arrow模式

上面两个表格中红框框出来的是相应的数据 Data 1 ~ Data n,其中:

  • X Center 表示方框 Block 的几何中心的 X 坐标;

  • Y Center 表示方框 Block 的几何中心的 Y 坐标;

  • Width 表示方框 Block 的宽度;

  • Height 表示方框 Block 的高度;

  • LearnedIndex 表示识别目标的编号。

我们根据通信协议,编写程序来读取一下 HuskyLens 返回的数据。

首先打开 Mixly 自带的 Arduino IDE,选择 Arduino HandBit (掌控板)进行编程。

最新版 Mixly 1.0 下载地址:

https://mixly.readthedocs.io/zh_CN/latest/basic/02Installation-update.html


程序如下:

void setup()    {void loop()    {

将程序上传到掌控板,打开串口监视器,可以看到会返回类似下图中的数据:


但是这些数据代表着什么意思呢?我们将关键数据圈出来:0x55、0xAA、0x11、0x0A、0x10、0xA3、0x00、0x7B、0x00、0x46、0x00、0x46、0x00、0x01、0x00、0xD5。其中:

  • 0x55 为 Header;

  • 0xAA 为 Header 2;

  • 0x11 为 Address;

  • 0x0A 为 Data Length;

  • 0x10 为 Command,Block 模式下为 0x10,Arrow 模式下为 0x11

  • 0xA30x00 分别为 X Center 的低 8 位和高 8 位,0x00A3 换算后为 163,代表 X 坐标为 163;

  • 0x7B0x00 为 Y Center 的低 8 位和高 8 位,0x007B 换算后为 123,代表 Y 坐标为 123;

  • 0x460x00 为 Width 的低 8 位和高 8 位,0x0046 换算后为 70,代表方框宽度为 70;

  • 0x460x00 为 Height 的低 8 位和高 8 位,0x0046 换算后为 70,代表方框高度为 70;

  • 0x010x00 为 LearnedIndex 的低 8 位和高 8 位,0x0001换算后为 1,代表识别物体的编号为 1;

  • 0xD5 为 Checksum 的低 8 位,我们将上面所有数据相加求和:0x55 + 0xAA + 0x11 + 0x0A + 0x10 + 0xA3 + 0x00 + 0x7B + 0x00 + 0x46 + 0x00 + 0x46 + 0x00 + 0x01 + 0x00 =0x02D5,低 8 位是 0xD5 说明校验通过。

至此,我们就完成了 HuskyLens 数据的简单读取。

但是每次都要这么去读取数据,然后再进行手工计算么?这还怎么做人工智能项目啊?

当然不是的,我们发现,读取这些数据就是都是一件件重复的事情,而程序最擅长的就是做重复的事情了。

# HuskyLens 数据解析

我们将上面的程序简单调整一下,duang~ 就完成了!(程序源代码详见文末下载链接,建议配套代码一起阅读下文)


我们先定义了一些变量,用来存放数据。这些变量的名字,基本可以自解释其含义,此处不再赘述说明。

#define LENG 15 // 0x55 + 15 bytes equal to 16 bytes

setup() 中,主要是对两个串口进行初始化:

void setup()    {

然后在 loop() 中,不断去读取掌控板串口 2(Serial2)中返回的数据。首先要判断第 1 个读到的数据是否是默认的 Header 0x55,我们用了find()函数:

// Header

如果读取到0x55,那么就把剩下的 15 个数据都读取进来,并存储到 buf 变量中。因为一个有效的通信命令共16个数据,大家可以在通信协议中数一下。

// Read the next 15 data

接着去检查第 2 个数据是否是默认的 Header 2 0xAA。这里需要注意的是,我们并没有把第 1 个 Header 数据 0x55 存储到 buf 变量中,所以 buf[0] 不是 0x55,而是 0xAA

// Header 2

如果第 2 个数据也是默认的包头的话,再去对剩下的数据进行校验,这里调用校验和函数 checkSum(),具体这个函数怎么实现的,下面再讲。

// Checksum

校验和通过后,就可以对数据进行处理和计算了。在下面的程序中,我们先把原始数据打印出来:

// print the command list

然后通过 5 个函数分别去计算 Data 中的几个值。最后再将这些数据在串口监视器中打印出来。

// get the values

这样我们就把数据读取出来啦。

# 几个函数说明

## checkSum()

checkSum() 函数的功能就是校验读取到的数据是否正确。只要简单讲读到的数据相加,并最终取和的低 8 位,检查是否和读到的最后一个数据相等即可。相等的话,将标记变量 receiveflag 赋值为 1 即可,否则赋值为 0,并返回 receiveflag 的结果。

// check sum

## getX()

## getY()

## getWidthOrXTarget()

## getHeightOrYTarget()

## getLearnedIndex()

这 5 个函数的原理基本一致,其函数名基本可以自解释含义,此处也不再赘述解释每个函数的功能。

这里以第 1 个函数 getX() 为例,介绍这几个函数内部的原理。

通过查看通信协议,我们可以知道,X 坐标的数值,分别存储在 buf 变量中的第 5 个和第 6 个(实际是完整数据的 6 个和第 7 个数据,但是 buf 变量中没有存储第 1 个数据 0x55),所以这里取 buf[4]buf[5] 来进行计算即可。由于是 16 进制的数据,所以可以通过移位进行计算,当然这里的 << 8 等价为 * 256。最后将计算出来的值返回即可。

// X Center of Block [Block mode] 

其他几个数据,也是同样道理,只要取对应的数据位进行计算即可。

# 总结

通过这一章节,我们根据 HuskyLens 的通信协议,把 HuskyLens 返回的数据都读取出来了。那么我们可以利用这些数据做一些什么有趣好玩的事情呢?

物体追踪,人脸识别,物体识别,巡线追踪,颜色识别,标签识别等功能,要怎么用呢?

交互手势控制、自主机器人、智能门禁、交互式玩具等又要怎么实现呢?

这里先留个悬念,我们下期见!

# 代码下载

请到知识星球下载本教程对应的源代码:

https://t.zsxq.com/RB6EaYf

# 相关推荐

## 51maker 微信公众号

51maker 是由一群教师团队维护的微信公众号,他们来自全国五湖四海,致力于 Scratch 编程及创客入门课程开发,为一线教师提供微视频、课件、教学设计等相关资源,为普及编程 & 创客教育尽一份力量。

## 知识星球创客教育能量站

激活课程制作分享,实现知识变现!能量站是一个付费知识社群,聚集了一大批优秀的老师,几乎每天都有优质的创客教育内容分享。可以扫描下方二维码付费加入,这是我的推荐码,你可以获得一定的优惠,当然我也会有一定的回报。


*欢迎转发朋友圈。如需转载,请注明出处和原作者。 扫描二维码 关注铁熊吧 ▼往期精彩内容▼创客项目缺少高颜值电路图?看这里就对了小白也能学会的激光切割创意盒子设计方法还在羡慕大疆 RoboMaster S1?教你自制麦轮战车不会垃圾分类?教你制作一个瓦力机器人来帮你!萌宠 Pando 机器人,不但能卖萌,还能跳太空步萌宠 Pandy 机器人,谁说智能车不能卖萌!学生获奖作品:戒烟帽学生获奖作品:体感转向安全帽掌控+麦轮,Mixly+Blynk,让你的麦轮战甲嗨炸全场搞定掌控板+Siri语音控制,只要半小时

我知道你在看

esp32 接摄像头_撸狗初体验 | 手把手教你上手 HuskyLens 哈士奇人工智能摄像头相关推荐

  1. 【手把手教你用Matlab做双目摄像头标定】Ubuntu环境

    [手把手教你用Matlab做双目摄像头标定] Ubuntu20.04环境 准备工作 你需要一个标定板 你需要一个双目摄像头 获取双目摄像头的设备号 跑起来看看 分割图像并完成拍照 使用Matlab进行 ...

  2. 手机端创新体验——手把手教你搭建VRAR架构

    声明:本文阿里巴巴技术论坛整理文章,首发于CSDN,未经许可,禁止任何形式的转载. 作者:袁岳峰,阿里移动平台虚拟&互动实验室负责人,GM Lab技术负责人. 责编:钱曙光,关注架构和算法领域 ...

  3. sentinel接入网关应用_微服务初体验(三):集成Gateway网关和Sentinel限流

    前言 最近笔者在对微服务架构进行学习,参考了各种项目的技术文章.框架文档以及视频网站,最终选择使用Nacos+Dubbo+Gateway+Sentinel来搭建一个项目练手.其中Nacos作为服务的注 ...

  4. 大疆TT无人机编程初体验,教你对拥抱开源的无人机为所欲为!

    先放个项目演示视频镇帖: 可能是大疆TT无人机的第一款DIY遥控器!大疆TT无人机编程试飞初体验! 认识我的朋友,大概都知道,我是一个"运气爆棚"的人,经常能"捡&quo ...

  5. 用python打开多个摄像头_了解使用python和OpenCV与VideoCaptu进行多个网络摄像头捕获...

    我正在尝试同时(或几乎同时)从多个网络摄像头捕捉图像.我一直在玩OpenCV.VideoCapture和python编程.但有些困惑,希望有人能帮忙解释... 首先,我尝试了视频捕捉(Markus G ...

  6. acer台式电脑怎么重装系统_电脑怎么重装系统 手把手教你

    电脑,生活中最常用的工具类设备,可是在我们的日常使用中,系统会经常出现问题,如果你的电脑出现了需要重装系统的需要,你不需要去电脑店了,在这里,我手把手教你. 第一步 我们需要准备工具 一个8G以上的优 ...

  7. 富士康科技集团_2018届菁干班_入职初体验

    窗外的轰雷锤醒了我的昏昏午睡,翻出尘封已久的电脑,一时不知从何看起,那就先写篇生活记录吧 7月13日正式入职,由于身体不适,从长沙一路到公司,大包小包都是妈妈帮我提着,我只能打个雨伞.拿个手机乖乖跟着 ...

  8. 5000并发的qps是多少_高并发初体验记录-02

    前言 这半个多月完成了这次活动的业务代码开发和测试,至于性能调优对我而言近乎玄学.总结记录,以备参考.如有错误,欢迎指正.不过其实大佬不用浪费时间看这篇低质量的流水账了. 实测过后,一个月前老板给我说 ...

  9. 试玩系列 | 真香!大疆TT无人机编程初体验,教你对它为所欲为!

    先放个项目演示视频镇帖(点击小程序查看演示视频): 认识我的朋友,大概都知道,我是一个"运气爆棚"的人,经常能"捡"到一些好玩的东西.这不,前两天在家门口&qu ...

最新文章

  1. 06.Java虚拟机问题
  2. 分子动力学模拟软件_基于GPU的分子动力学软件ACEMD的简介与安装
  3. 作用域链(scope chain)和原型链(prototype chain)
  4. 《Delphi XE6 android 编程入门教程》推荐
  5. 南师大计算机语言学,南师大(语言学,文字学,文献学专业备考建议)
  6. Qualcomm QXDM工具简介和log抓取
  7. Apache JMeter:随心所欲进行负载测试
  8. phpMyFAQ 3.0.3 中文版
  9. css33d坐标系,CSS3-3D技术
  10. C++---set/multiset用法介绍
  11. 关于欧几里德第五公设的感言
  12. tcp的time wait为什么要等2个MSL
  13. Altium Designer 16
  14. IE6-IE11兼容性问题列表及解决办法总结
  15. zoom使用教程_如何使用Zoom在线玩Jackbox游戏
  16. 四元数船舶领域Quaternion ship domain
  17. 信息学奥赛一本通(基础算法与数据结构-题解汇总目录)
  18. PMO如何赋能与支撑战略项目管理︱亚马逊PMO负责人宋晓雪
  19. fastadmin列表页展示分类名称通用搜索按分类名称搜索
  20. 垂杨柳中学2021年高考成绩查询时间,2021年中考成绩

热门文章

  1. 深度解析minist例子(lasagne)
  2. virustotal 出现PUP.HighConfidence
  3. android怎么做ab测试工具,开发必读:网易专家解读Android ABTest 框架设计
  4. 软件2016班级分组
  5. sakai配置(中文版)(四)
  6. 蓝牙基带解调(GFSK:Gauss frequency Shift Keying )
  7. hdu6681 Rikka with Cake(主席树)
  8. java计算机毕业设计无人售货机管理系统源码+lw文档+系统+数据库
  9. iowait和iostat监控工具详解
  10. 蓝桥杯:日志统计 尺取法