回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

【花雕动手做】AI 视觉传感器 HUSKYLENS 2 之识别标签来控制执行器模块 简单

头像 驴友花雕 2025.10.18 10 0

00 (2).jpg

1、测试实验硬件连接
将HukyLens 2 连接到Arduino主板对应的I2C引脚,使用电源线连接Arduino Uno与电脑。额外供电提示:Arduino Uno的I2C引脚输出的电压不足以支持HUSKYLENS 2正常工作,当HUSKYLENS 2接在Arduino Uno上时须有额外数据线连接HUSKYLENS 2的Type-C接口与电源,为HUSKYLENS 2进行额外供电。接线图可参考下图。

000- (2).jpg

2、设置测试实验平台
打开 Mind+ 编程软件,选择主控板 Arduino,加载HUSKYLENS 2 库

000- (1).jpg

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

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

0-6.jpg

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

(3)AprilTag 与二维码的区别

01.jpg


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

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

(6)相关场景

00-.gif
01 (4).jpg

4、执行器(Actuator)是一种将控制信号转换为物理动作的装置,是自动化系统和机器人中的关键部件。它的作用是根据控制系统的指令,驱动机械结构完成特定动作,如移动、旋转、推动、夹取等。

(1) 执行器的核心定义
执行器是将电信号、液压信号或气动信号转化为机械运动的装置,是“感知—决策—执行”链条中的最后一环。

(2)常见执行器类型

01.jpg


(3)执行器在系统中的作用
动作执行:如机械臂的关节旋转、轮式小车的驱动、夹爪的开合。
反馈闭环:配合传感器形成闭环控制系统,实现精准定位与动态调整。
能量转换:将控制系统的能量信号(电、气、液)转化为机械能。
接口桥梁:连接控制系统与物理世界,是“虚拟指令”落地的关键。

(4)应用场景举例
工业自动化:机器人焊接、搬运、装配
智能家居:窗帘开合、电动门锁、自动调光
航空航天:飞行器舵面控制、姿态调整
医疗设备:手术机器人、康复辅助机械
仿生机器人:模仿肌肉运动的柔性执行器

(5)使用执行器需注意事项
负载匹配:选择合适的执行器类型与规格,避免过载或性能不足
控制精度:需配合编码器、传感器实现闭环控制,提升定位与响应能力
响应速度:不同驱动方式响应时间不同,需根据任务需求选型
能耗与散热:电动执行器需考虑功率与热管理
安全机制:设置限位、急停、过载保护,防止误动作或损坏

(6)为简化测试实验,这里使用简单的执行器LED模块

02.jpg

5、实际测试的几个范本(标签类型为APRIL_TAG25H9)

01 (2).jpg

6、测试实验代码

代码
/*【花雕动手做】AI 视觉传感器 HUSKYLENS 2 之识别标签来控制执行器模块
 * 使用平台:MindPlus
 * 主控板:Arduino Uno
 * 功能说明:本程序使用 HUSKYLENS 2 AI 视觉传感器识别画面中的标签(Tag),
 * 根据不同标签的 ID 控制执行器(此处为 LED 灯)实现快闪、慢闪或熄灭效果。
 */

#include "DFRobot_HuskylensV2.h"  // 引入 HUSKYLENS 2 的驱动库,用于控制 AI 视觉模块

HuskylensV2 huskylens;  // 创建 HUSKYLENS 设备对象,供后续调用识别与数据获取功能

// 初始化函数
void setup() {
  Serial.begin(9600);       // 初始化串口通信,波特率设置为 9600,用于数据输出到串口监视器
  Wire.begin();             // 初始化 I2C 通信,用于与 HUSKYLENS 模块连接
  while (!huskylens.begin(Wire)) {  // 持续尝试连接 HUSKYLENS,直到连接成功
    delay(100);             // 每次尝试之间延迟 100 毫秒
  }
  Serial.println("HUSKYLENS 2 启动成功");        // 输出初始化成功提示信息
  Serial.println("识别标签来控制执行器模块");    // 输出功能说明
  pinMode(13, OUTPUT);      // 设置数字引脚 13 为输出模式,用于控制 LED 灯
}

// 主循环函数
void loop() {
  huskylens.getResult(ALGORITHM_TAG_RECOGNITION);  // 请求 HUSKYLENS 执行标签识别算法,处理当前画面
  if (huskylens.available(ALGORITHM_TAG_RECOGNITION)) {  // 判断是否有识别结果可用
    Serial.println("画面中的标签总数为:" + 
      String(huskylens.getCachedResultNum(ALGORITHM_TAG_RECOGNITION)));  // 输出当前识别到的标签数量

    // 如果识别到 ID 为 1 的标签,执行 LED 快闪
    if (huskylens.getCachedResultByID(ALGORITHM_TAG_RECOGNITION, 1) != NULL) {
      Serial.println(RET_ITEM_STR(huskylens.getCachedCenterResult(ALGORITHM_TAG_RECOGNITION), Result, content) + "LED快闪");
      digitalWrite(13, LOW);   // 熄灭 LED
      delay(200);              // 延迟 200 毫秒
      digitalWrite(13, HIGH);  // 点亮 LED
      delay(200);              // 延迟 200 毫秒
    }

    // 如果识别到 ID 为 2 的标签,执行 LED 慢闪
    if (huskylens.getCachedResultByID(ALGORITHM_TAG_RECOGNITION, 2) != NULL) {
      Serial.println(RET_ITEM_STR(huskylens.getCachedResultByID(ALGORITHM_TAG_RECOGNITION, 2), Result, content) + "LED慢闪");
      digitalWrite(13, HIGH);  // 点亮 LED
      delay(800);              // 延迟 800 毫秒
      digitalWrite(13, LOW);   // 熄灭 LED
      delay(800);              // 延迟 800 毫秒
    }

    // 如果识别到 ID 为 0 的标签,关闭 LED 灯
    if (huskylens.getCachedResultByID(ALGORITHM_TAG_RECOGNITION, 0) != NULL) {
      Serial.println(RET_ITEM_STR(huskylens.getCachedResultByID(ALGORITHM_TAG_RECOGNITION, 0), Result, content) + "LED灯灭");
      digitalWrite(13, LOW);   // 熄灭 LED
    }
  }

  delay(500);  // 每次识别后延迟 500 毫秒,控制识别频率,避免过于频繁地读取数据
}

7、实际测试的代码解读

(1)该程序实现了以下功能:
初始化 HUSKYLENS 模块并启动标签识别算法
统计当前画面中识别到的标签数量
根据标签 ID 控制 LED 灯的闪烁方式:
ID = 1 → 快闪(200ms 间隔)
ID = 2 → 慢闪(800ms 间隔)
ID = 0 → 熄灭
每次识别间隔 500ms,适合稳定测试与演示

(2)程序核心目标
通过 HUSKYLENS 识别图像中的标签(Tag),根据标签的 ID 控制 LED 灯的状态或闪烁方式,实现视觉驱动的智能控制。

(3)代码结构与功能说明
1. 引入库与创建对象
cpp
#include "DFRobot_HuskylensV2.h"
HuskylensV2 huskylens;
引入 HUSKYLENS 官方库,提供与设备通信的函数接口。
创建 huskylens 对象,用于调用识别算法和获取识别结果。

2. 初始化函数 setup()
cpp
void setup() {
Serial.begin(9600);
Wire.begin();
while (!huskylens.begin(Wire)) {
delay(100);
}
Serial.println("HUSKYLENS 2 启动成功");
Serial.println("识别标签来控制执行器模块");
pinMode(13, OUTPUT);
}
初始化串口通信(用于数据输出)和 I2C 通信(用于与 HUSKYLENS 连接)。
持续尝试连接 HUSKYLENS,直到连接成功。
设置数字引脚 13 为输出模式,用于控制 LED 灯。

3. 主循环函数 loop()
cpp
huskylens.getResult(ALGORITHM_TAG_RECOGNITION);
请求 HUSKYLENS 执行标签识别算法,处理当前画面。

cpp
if (huskylens.available(ALGORITHM_TAG_RECOGNITION)) {
判断是否有识别结果可用,避免空数据处理。

4. 输出标签总数
cpp
Serial.println("画面中的标签总数为:" + String(huskylens.getCachedResultNum(ALGORITHM_TAG_RECOGNITION)));
获取当前画面中识别到的标签数量,并通过串口输出。

5. 根据标签 ID 控制 LED 灯
标签 ID = 1:LED 快闪
cpp
if (huskylens.getCachedResultByID(ALGORITHM_TAG_RECOGNITION, 1) != NULL) {
Serial.println(... + "LED快闪");
digitalWrite(13, LOW);
delay(200);
digitalWrite(13, HIGH);
delay(200);
}
快速闪烁 LED 灯,每 200 毫秒切换一次状态。

标签 ID = 2:LED 慢闪
cpp
if (huskylens.getCachedResultByID(ALGORITHM_TAG_RECOGNITION, 2) != NULL) {
Serial.println(... + "LED慢闪");
digitalWrite(13, HIGH);
delay(800);
digitalWrite(13, LOW);
delay(800);
}
慢速闪烁 LED 灯,每 800 毫秒切换一次状态。

标签 ID = 0:LED 熄灭
cpp
if (huskylens.getCachedResultByID(ALGORITHM_TAG_RECOGNITION, 0) != NULL) {
Serial.println(... + "LED灯灭");
digitalWrite(13, LOW);
}
直接关闭 LED 灯。

6. 控制识别频率
cpp
delay(500);
每次识别后延迟 500 毫秒,避免过于频繁地读取数据。

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

03.jpg

9、实验串口返回情况

04.jpg

10、实验场景图 动态图

05 (1).jpg
05 (2).jpg
00230-.gif

11、实验记录视频

 

【【花雕动手做】AI 视觉传感器 HUSKYLENS 2 之识别标签来控制执行器模块】 

 

https://www.bilibili.com/video/BV19PsAzCEv2/?share_source=copy_web&vd_source=371a292a55e5ca9be994cbb4a86cc987

 


 

评论

user-avatar
icon 他的勋章
    展开更多