在这里插入图片描述
一、相关知识点
1、HUSKYLENS 2(二哈识图2)是DFRobot推出的新一代AI视觉传感器,搭载6TOPS算力的Kendryte K230双核RISC-V芯片,集成1GB LPDDR4内存与8GB存储,支持人脸识别、物体检测、姿态估计等20余种预置AI模型,同时允许用户通过自训练模型部署实现定制化识别
。其硬件配置包括200万像素摄像头、2.4英寸触摸屏、可更换镜头模组(支持显微/夜视)及RGB补光灯,搭配UART/I2C接口可无缝连接Arduino、树莓派等开发板,实现实时图传与多模态交互。内置MCP服务打通本地视觉与大模型能力,例如识别午餐图片后可生成膳食建议,而模型广场提供车牌识别、跌倒检测等垂直领域即用型方案。作为教育利器,它已融入《中小学人工智能通识教育指南》课程体系,通过Mind+图形化编程工具降低AI开发门槛,助力创客教育与STEAM实践。

在这里插入图片描述
2、行空板 K10 是一款专为中小学信息科技教学和创客项目设计的国产 AIoT 开发板,以 ESP32-S3 为核心,高度集成 2.8 英寸全彩 LCD 屏、摄像头、双麦扬声器、WiFi 蓝牙模块及温湿度、光线、加速度等多种传感器,无需额外配件即可实现离线语音识别(支持 200 词库)、人脸识别、二维码读取、物联网联动等功能,支持 Mind + 图形化编程与 MicroPython 代码编程,兼顾入门便捷性与功能扩展性,丰富的扩展接口还能连接外部传感器、执行器,轻松落地 AI、物联网类创意项目,是编程学习与科创实践的高性价比选择。

在这里插入图片描述
3、Mind + 是 DFRobot 旗下蘑菇云科创教育团队研发的、拥有自主知识产权的国产青少年编程软件,它兼容 Scratch3.0,既支持零基础学习者拖拽图形化积木编程,也能切换至 Python/C/C++ 代码编程,且积木可自动转换为对应代码助力进阶学习,同时适配行空板M10\ K10、Arduino、micro:bit 等众多主流开源硬件与上百种电子模块,集成图像识别、语音识别等 AI 功能及物联网开发能力,还搭配实时交互、程序烧录脱机运行等模式与丰富教学案例,适配校内外编程教学、创客项目及竞赛等场景,是兼顾低入门门槛与高拓展性的科创教育工具。

二、硬件连接
准备材料
行空板K10 x 1
HUSKYLENS 2 x 1
USB数据线 x 2
4pin连接线(或杜邦线)x 1

准备一根USB数据线和一根4Pin白色硅胶线。使用USB数据线连接电脑与行空板K10,使用4Pin黑胶先连接行空板K10与HuskyLens 2,再使用额外的USB数据线n连接示意图如下连接HUSKYLENS 2的Type-C接口与电源,为HUSKYLENS 2进行额外供电。接线图可参考下图。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、AprilTag 标签识别是一种视觉识别与空间定位技术,其核心目标是:通过摄像头自动检测图像中的 AprilTag 标签,并精确识别其身份编号、位置坐标与空间姿态(方向角度)。AprilTag 标签识别是视觉 AI 中极具工程价值的技术之一。它是机器人视觉、无人机导航、增强现实(AR)等领域中常用的定位与识别手段,具有高精度、低误识率、识别速度快等优势。AprilTag标签在线生成网站链接:https://www.2weima.com/aruco.html

(1)什么是 AprilTag?
AprilTag 是一种类似二维码的二维视觉标记系统,由黑白方块组成,但结构更简洁,识别更稳定。每个标签包含:
唯一 ID 编码:每个标签代表一个独立编号,便于识别与区分。
定位边框:四角的黑白边框用于快速检测与几何定位。
内部编码区域:用于识别身份与容错处理。

在这里插入图片描述

(2)AprilTag 标签识别的基本流程
图像采集:通过摄像头获取包含标签的图像。
标签检测:识别图像中是否存在 AprilTag 标签。
ID 解码:解析标签的唯一编号。
姿态估计:计算标签在三维空间中的位置与方向(6自由度)。
结果输出:返回标签 ID、位置坐标、旋转角度等信息。

(3)AprilTag 与二维码的区别

在这里插入图片描述
(4)应用场景举例
机器人导航:识别地面或墙上的标签,实现路径规划与定位。
无人机降落:通过识别地面标签进行精准悬停或着陆。
教育实验:学生用标签训练 AI 视觉识别与空间计算。
机械臂控制:识别工件上的标签,辅助抓取与装配。
AR 增强现实:识别标签位置叠加虚拟内容。

(5)标签设计与使用建议
标签尺寸应根据识别距离调整(越远越大)
打印时保持高对比度与清晰边缘
安装时避免反光、遮挡或倾斜过大
可使用 3D 打印或激光雕刻制作耐用标签。

(6)相关场景

在这里插入图片描述

在这里插入图片描述
四、HUSKYLENS 2能识别出现在画面中的AprilTag标签,可以通过编程获取画面中检测到的标签相关数据。可以读取的标签数据有:指定标签的数据,包括标签ID、标签内容、标签宽度、标签高度以及标签中心点的X坐标位置和Y坐标位置等、检测到的标签总数。

1、实际测试的几个范本
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2、测试实验代码

/*【花雕动手做】HUSKYLENS 2 AI视觉传感器之识别AprilTag标签输出相关数据
 * MindPlus
 * esp32s3bit
 */

#include "unihiker_k10.h"          // 引入UniHiker开发板库,提供屏幕显示控制
#include "DFRobot_HuskylensV2.h"   // 引入HUSKYLENS AI视觉传感器库

// 创建对象
HuskylensV2  huskylens;           // 实例化HUSKYLENS视觉传感器对象
UNIHIKER_K10 k10;                 // 实例化UniHiker开发板对象  
uint8_t      screen_dir=2;        // 屏幕方向设置(2通常表示横向显示)


// 主程序开始
void setup() {
	k10.begin();                    // 初始化UniHiker开发板硬件
	Wire.begin();                   // 初始化I2C通信协议
	
	// 尝试初始化HUSKYLENS传感器,采用重试机制确保连接稳定
	while (!huskylens.begin(Wire)) {
		delay(100);                 // 等待100ms后重试,避免总线冲突
	}
	
	k10.initScreen(screen_dir);     // 按照指定方向初始化LCD屏幕
	k10.creatCanvas();              // 创建画布缓冲区,实现双缓冲显示
	
	// 设置HUSKYLENS算法模式为AprilTag标签识别
	// AprilTag是一种类似QR码的视觉基准标记系统,用于机器人定位和AR应用
	huskylens.switchAlgorithm(ALGORITHM_TAG_RECOGNITION);
}

void loop() {
	// 从HUSKYLENS获取AprilTag识别结果
	huskylens.getResult(ALGORITHM_TAG_RECOGNITION);
	
	// 检查是否有可用的标签识别结果
	if ((huskylens.available(ALGORITHM_TAG_RECOGNITION))) {
		// 显示靠近画面中心的标签ID - 红色突出显示
		k10.canvas->canvasText((String("靠中心的标签ID: ") + 
			String((RET_ITEM_NUM(huskylens.getCachedCenterResult(ALGORITHM_TAG_RECOGNITION), Result, ID)))), 
			2, 0xFF0000);  // 第2行,红色文字,强调视觉焦点
		
		// 显示检测到的标签总数 - 蓝色显示统计信息
		k10.canvas->canvasText((String("标签总数: ") + 
			String((huskylens.getCachedResultNum(ALGORITHM_TAG_RECOGNITION)))), 
			3, 0x0000FF);  // 第3行,蓝色文字
		
		// 显示第一个检测到的标签ID - 红色突出
		k10.canvas->canvasText((String("第一个标签ID: ") + 
			String((RET_ITEM_NUM(huskylens.getCachedResultByIndex(ALGORITHM_TAG_RECOGNITION, 1-1), Result, ID)))), 
			4, 0xFF0000);  // 第4行,红色文字
		
		// 显示第一个标签的名称标签 - 红色
		k10.canvas->canvasText("第一个标签名称: ", 5, 0xFF0000);  // 第5行,红色标签
		
		// 注意:这里使用了getCachedResultByID而不是getCachedResultByIndex
		// 通过ID=1直接获取特定标签的信息,适用于已知标签ID的场景
		k10.canvas->canvasText((RET_ITEM_STR(huskylens.getCachedResultByID(ALGORITHM_TAG_RECOGNITION, 1), Result, name)), 
			6, 0x0000FF);  // 第6行,蓝色显示实际名称
		
		// 显示第一个标签的内容标签 - 蓝色
		k10.canvas->canvasText("第一个标签内容: ", 7, 0x0000FF);  // 第7行,蓝色标签
		
		// 显示第一个标签的具体内容 - 红色突出内容
		k10.canvas->canvasText((RET_ITEM_STR(huskylens.getCachedResultByIndex(ALGORITHM_TAG_RECOGNITION, 1-1), Result, content)), 
			8, 0xFF0000);  // 第8行,红色显示内容
	}
	
	// 更新画布显示,将缓冲区内容刷新到物理屏幕
	k10.canvas->updateCanvas();
	
	// 延迟50ms,控制循环频率为20Hz,平衡响应速度和系统负载
	delay(50);
}

3、代码解读:

系统架构分析

  1. 硬件平台组成
    cpp
// 核心硬件组件:
ESP32-S3主控芯片 + UniHiker开发板 + HUSKYLENS视觉传感器

ESP32-S3: 提供强大的计算能力和丰富的IO接口
UniHiker: 集成显示屏和用户交互接口的开发平台
HUSKYLENS: 专为嵌入式设计的AI视觉传感器,内置多种算法

  1. 软件架构层次
    text
    应用层: AprilTag识别显示系统

    算法层: HUSKYLENS固件(封装AprilTag算法)

    驱动层: I2C通信协议 + 屏幕驱动

    硬件层: 摄像头模组 + 处理芯片 + 显示屏

核心技术原理

  1. AprilTag算法解析
    AprilTag是一种视觉基准标记系统,其工作原理:
    识别流程:

text
图像采集 → 边缘检测 → 四边形检测 → 编码解码 → 位姿估计
技术优势:
高精度: 可达到亚像素级别的定位精度
抗干扰: 对光照变化和部分遮挡具有鲁棒性
快速识别: 优化算法实现毫秒级识别速度

  1. 数据处理流程详解
    cpp
// 数据获取链分析
huskylens.getResult(ALGORITHM_TAG_RECOGNITION)// 触发传感器执行AprilTag识别算法
// 返回识别结果缓存到内部存储器

huskylens.available(ALGORITHM_TAG_RECOGNITION)// 检查是否有新的有效识别结果
// 避免重复处理相同帧数据

关键函数深度解析

  1. 结果获取函数对比
    cpp
// 三种不同的结果获取方式:

// 1. 中心优先策略 - 视觉焦点获取
huskylens.getCachedCenterResult(ALGORITHM_TAG_RECOGNITION)
// 用途: 获取画面中心区域的标签,符合人眼观察习惯
// 应用: 机器人导航中的目标跟踪

// 2. 索引顺序获取 - 检测顺序
huskylens.getCachedResultByIndex(ALGORITHM_TAG_RECOGNITION, 1-1)
// 用途: 按检测到的顺序获取标签
// 注意: 索引从0开始,1-1即为第一个元素

// 3. ID直接获取 - 精确标识
huskylens.getCachedResultByID(ALGORITHM_TAG_RECOGNITION, 1)
// 用途: 通过标签固有ID直接获取特定标签
// 优势: 结果稳定,不受检测顺序影响
  1. 数据提取宏分析
    cpp
// RET_ITEM_NUM宏: 提取数值类型数据
RET_ITEM_NUM(结果对象, Result, ID)
// 从复杂的结果结构中提取ID数值字段

// RET_ITEM_STR宏: 提取字符串类型数据  
RET_ITEM_STR(结果对象, Result, name/content)
// 提取标签的名称和编码内容字符串

显示系统架构

  1. 双缓冲显示机制
    cpp
k10.creatCanvas();        // 创建离屏画布缓冲区
// 所有绘制操作先在内存中完成

k10.canvas->updateCanvas(); // 将完整画面一次性刷新到屏幕
// 避免闪烁,提升视觉体验
  1. 信息层级设计
    text
    第2行: [中心标签ID] - 最高优先级,视觉焦点
    第3行: [标签总数] - 环境感知,总体情况
    第4-8行: [首个标签详情] - 详细信息,深度分析

  2. 颜色编码策略
    cpp

0xFF0000 (红色): 用于关键标识符(ID)和重要标签
0x0000FF (蓝色): 用于辅助信息和数据内容
// 通过颜色心理学提升信息可读性

实时性分析

  1. 时序控制策略
    cpp
delay(50); // 20Hz更新频率

设计考量:

响应速度: 50ms延迟保证对标签移动的快速响应

计算负载: 平衡识别精度和处理器负担

功耗控制: 适中的刷新率有利于节能

  1. 数据处理优化
    cpp
if (huskylens.available()) {
    // 条件执行,避免不必要的显示更新
    // 只在有新识别结果时刷新显示
}

4、测试实验MInd+图形编程

在这里插入图片描述

5、实验场景图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐