所有分类
主题 主题
平台 平台
我的工作台
userHead
注册时间 [[userInfo.create_time]]
创造力 [[userInfo.creativity]]
[[userInfo.remark]]
[[d.project_title]]
articleThumb
[[d.material_name]]
timelineThumb
进入工作台
折叠
所有分类 我的工作台
展开

课时六:综合项目3--无人机人脸跟踪(队伍:PlutoCharon)

宫冰玉 宫冰玉 2021-01-03 13:46:18

一、课程引入

(1)HuskyLens二哈识图传感器原理

(2)HuskyLens二哈识图传感器的调试

(3)HuskyLens二哈识图传感器人脸识别功能学习

(4)Gravity: VL53L0X ToF 激光测距传感器学习

(5)人脸跟踪思路

二、知识原理讲解

2.1 HuskyLens二哈识图传感器介绍

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

HuskyLens板载UART / I2C接口,可以连接到Arduino、Raspberry Pi、LattePanda、micro:bit等主流控制器,实现硬件无缝对接。HuskyLens直接输出识别结果给控制器,你无需折腾复杂的算法,就能制作非常有创意的项目。

projectImage
projectImage

接口说明:

USB接口:连接到电源,给HuskyLens供电;也可以连接到电脑的USB接口,给HuskyLens升级固件。

4pin接口(UART模式)

projectImage

4pin接口(I2C模式)

projectImage

注意:

(1)USB接口与4pin接口,任接一个,即可对HuskyLens供电。

(2)由于板载了电源自动切换电路,USB接口与4pin接口可以同时接电源,且优先使用USB接口上的电源。

(3)请确保电源电压与功率足够,防止HuskyLens工作异常

2.2 HuskyLens二哈识图传感器的调试

功能按键与学习按键的操作:

功能按键与学习按键的基本操作如下:

(1)向左或向右拨动“功能按键”,切换到不同的功能

(2)短按“学习按键”,学习指定的物体;长按“学习按键”,从不同的角度和距离持续学习指定的物体;如果HuskyLens之前学习过,则短按“学习按键”,可让HuskyLens忘记当前功能下所学的

(3)长按“功能按键”,进入当前功能的二级菜单参数设置界面,向左、向右拨动或向下短按“功能按键”即可设置相关参数

projectImage

升级固件步骤(Win10系统):

本教程需要的固件版本不低于V0.5.1。此版本把所有功能(包括物体分类)全部集成在一起。

 

步骤1 步骤1
查看当前固件版本号 往右拨动功能按键,直到最后一个选项常规设置(General Settings),短按功能按键,进入二级菜单; 往右拨动功能按键,拨到版本号的选项时,即可看到版本号。如下图,版本号为:Version *.*.* Norm(是否为0.5.1,若不是,则按照如下步骤升级)。
projectImage
步骤2 步骤2
升级固件 下载附件
步骤3 步骤3
解压
projectImage
步骤4 步骤4
双击打开文件夹
projectImage
步骤5 步骤5
解压串口驱动
projectImage
步骤6 步骤6
双击文件夹CP210x_Windows_Drivers
projectImage
projectImage
projectImage
projectImage
projectImage
步骤7 步骤7
双击exe文件
projectImage
projectImage
projectImage
projectImage

(3)设置中文语言环境

菜单界面的默认语言为英文。本教程使用中文语言界面。要将菜单界面的语言设置为中文,请按照如下步骤操作:

①向右拨动“功能按键”,至屏幕顶端显示“General Settings”。

②向下短按或长按”功能按键“,进入“General Settings”的二级菜单参数设置界面。

③向右拨动“功能按键”,选择“Language”参数(位于最后一个),然后短按“功能按键”,再向右拨动“功能按键”选择“简体中文”,再短按“功能按键”,此时HuskyLens会自动切换到中文语言。

projectImage
projectImage
projectImage
projectImage
projectImage

2.3 HuskyLens二哈识图传感器人脸识别功能学习

坐标系:

当HuskyLens识别学过的物体时,在屏幕上会有彩色方框将其框选,你可以读取这些方框的坐标、长宽等数据。HuskyLens的坐标系如下所示, 这有助于你了解方框的坐标值、长宽等数据。

projectImage

人脸识别:

本功能可以侦测任何脸部轮廓;识别、追踪学习过的人脸。

识别单个人脸:

默认设置为学习并识别单个人脸。

操作设置:

向左拨动“功能按键”,直至屏幕顶部显示“人脸识别”。

projectImage
projectImage

未检测到人脸RGB灯不亮

projectImage

检测到人脸RGB灯亮绿灯

projectImage

HuskyLens Mind+模块库说明:

projectImage
projectImage
projectImage

2.4 Gravity: VL53L0X ToF 激光测距传感器学习

 

VL53L0X激光测距传感器是一款基于意法半导体(STMicroelectronics)新出的基于飞行时间测距 (ToF) 原理设计的高精度测距传感器。与传统的技术不同,VL53L0X无论目标反射率如何,都能提供精确的距离测量,最高测量距离2米。 DFRobot基于VL53L0X设计的Gravity传感器模块,提供Gravity-I2C接口,即插即用,支持3.3V~5V供电使用,兼容更多的主板,适应更多的应用场景。 VL53L0X集成了尖端的SPAD (Single Photon Avalanche Diodes) 阵列,并嵌入ST的第二代FlightSenseTM专利技术。精度达±3%,响应时间小于30ms,正常工作模式下功耗仅20mW,待机功耗为5uA。 VL53L0X的940nm VCSEL发射器(垂直腔面发射激光器)对人眼来说是完全不可见的,加上内部物理红外滤波器,它可以实现更远的距离,更强的抗环境光的能力,以及更好的覆盖玻璃光学截面。

projectImage

功能引脚:

projectImage
projectImage

GPIO1:传感器中断输出引脚,用来指示数据是否准备好

XSHUT:传感器关闭引脚,默认被拉高,当引脚被拉低时传感器进入关闭模式

 

2.5线路连接

projectImage

2.6人脸跟踪思路步骤

projectImage

三、项目实施步骤

(请注意保持与无人机桨叶的距离)

项目8:无人机人脸跟踪

项目描述:

该项目通过HuskyLens二哈识图传感器实现人脸检测,并与无人机通信,实现人脸识别的跟踪

任务拆解:

步骤流程图:

projectImage

学生能力基础:

(1)会使用HuskyLens二哈识图传感器及其参数配置

(2)会使用激光测距传感器

(3)传感器与无人机的通讯

(4)编程思想

材料清单 材料清单
1x
RoboMaster TT无人机
1x
huskylens pro
1x
Gravity: VL53L0X ToF 激光测距传感器

演示视频:

项目文件:

projectImage
代码 代码
	                    					/*!
 * MindPlus
 * telloesp32
 *
 */
#include <RMTT_Libs.h>
#include <DFRobot_VL53L0X.h>
#include <DFRobot_HuskyLens.h>

// 动态变量
volatile float mind_n_Distance, mind_n_t, mind_n_x, mind_n_y;
// 创建对象
RMTT_Protocol     protocol;
RMTT_RGB          tt_rgb;
DFRobot_HuskyLens huskylens;
DFRobot_VL53L0X   vl53l0x;


// 主程序开始
void setup() {
	Serial1.begin(1000000, 23, 18, SERIAL_8N1);
	tt_rgb.Init();
	protocol.startUntilControl();
	tt_rgb.SetRGB(0,0,255);
	delay(1000);
	tt_rgb.SetRGB(255,0,0);
	huskylens.beginI2CUntilSuccess();
	huskylens.writeAlgorithm(ALGORITHM_FACE_RECOGNITION);
	vl53l0x.begin();
	vl53l0x.setMode(vl53l0x.High, vl53l0x.Continuous);
	tt_rgb.SetRGB(0,255,0);
	protocol.sendTelloCtrlMsg("takeoff");
	protocol.sendTelloCtrlMsg((char *)String(String("up ")+int(50)).c_str());
	delay(100);
}
void loop() {
	mind_n_Distance = vl53l0x.getDistance();
	huskylens.request();
	if (huskylens.isLearned(1)) {
		if (huskylens.isAppearDirect(HUSKYLENSResultBlock)) {
			mind_n_t = 0;
			mind_n_x = huskylens.readBlockParameter(1).xCenter;
			mind_n_y = huskylens.readBlockParameter(1).yCenter;
			if (((mind_n_x>=0) && (mind_n_x<=40))) {
				protocol.sendTelloCtrlMsg((char *)String(String("ccw ")+int(12)).c_str());
				delay(10);
			}
			if (((mind_n_x>40) && (mind_n_x<=80))) {
				protocol.sendTelloCtrlMsg((char *)String(String("ccw ")+int(10)).c_str());
				delay(10);
			}
			if (((mind_n_x>80) && (mind_n_x<=120))) {
				protocol.sendTelloCtrlMsg((char *)String(String("ccw ")+int(8)).c_str());
				delay(10);
			}
			if (((mind_n_x>120) && (mind_n_x<160))) {
				protocol.sendTelloCtrlMsg((char *)String(String("ccw ")+int(6)).c_str());
				delay(10);
			}
			if ((mind_n_x==160)) {
				protocol.sendTelloCtrlMsg("stop");
				delay(10);
				if (((abs((mind_n_x - 160)))<=20)) {
					if ((mind_n_Distance<=2000)) {
						if ((mind_n_Distance>400)) {
							protocol.sendTelloCtrlMsg((char *)String(String("forward ")+int(20)).c_str());
							delay(10);
						}
						if ((mind_n_Distance<400)) {
							protocol.sendTelloCtrlMsg((char *)String(String("back ")+int(20)).c_str());
							delay(10);
						}
						if ((mind_n_Distance==400)) {
							protocol.sendTelloCtrlMsg("stop");
							delay(10);
						}
					}
					else {
						protocol.sendTelloCtrlMsg("stop");
						delay(10);
					}
				}
			}
			if (((mind_n_x>160) && (mind_n_x<=200))) {
				protocol.sendTelloCtrlMsg((char *)String(String("cw ")+int(6)).c_str());
				delay(10);
			}
			if (((mind_n_x>200) && (mind_n_x<=240))) {
				protocol.sendTelloCtrlMsg((char *)String(String("cw ")+int(8)).c_str());
				delay(10);
			}
			if (((mind_n_x>240) && (mind_n_x<=280))) {
				protocol.sendTelloCtrlMsg((char *)String(String("cw ")+int(10)).c_str());
				delay(10);
			}
			if (((mind_n_x>280) && (mind_n_x<=320))) {
				protocol.sendTelloCtrlMsg((char *)String(String("cw ")+int(12)).c_str());
				delay(10);
			}
		}
	}
	else {
		protocol.sendTelloCtrlMsg("stop");
		delay(10);
	}
}

	                    				
附件 附件
Makelog作者原创文章,未经授权禁止转载。
2
1
评论
[[c.user_name]] [[c.create_time]]
[[c.parent_comment.count]]
|
[[c.comment_content]]