资讯详情

智能车竞赛技术报告 | 智能车视觉 - 西北工业大学 - 赤霄2021

学 校:西北工业大学队伍名称:赤霄2021???参赛队员:武锦辉 龙俊旺 石钰莹带队教师:曲仕茹 胡深奇

第一章


■ 1.1 大赛介绍

??为加强大学生实践、创新能力和团队精神的培养,促进高等教育教学改革, 2005年10月,受教育部高等教育部委托(教育部函[2005]201号文件),教育部高校自动化专业教学指导分委员会(2013年更名为教育部高校自动化专业教学指导委员会并被教育部批准列入国家教学质量与教学改革工程资助项目(教高司函[2010]13号文)。2020年转为中国自动化学会为主办单位。

??以智能汽车为研究对象的创意科技竞赛是全国大学生的探索性工程实践活动,是教育部倡导的大学生科技竞赛之一。竞赛以基于培训、参与、鼓励探索、追求卓越为指导思想,旨在促进高校素质教育,培养大学生综合知识应用能力、基本工程实践能力和创新意识,激发大学生从事科学研究和探索的兴趣和潜力,倡导理论联系实际、务实的学习风格和团队合作人文精神,为优秀人才的脱颖而出创造条件。

??竞赛由竞赛秘书处在规定范围内为参赛队伍提供/购买标准硬件技术平台。竞赛过程包括理论设计、实际生产、车辆调试、现场竞赛等环节,要求学生组成团队,共同工作,初步体验工程研发项目从设计到实现的全过程。本次竞赛融合了科学性、趣味性和观赏性,是一场以快速发展、前景广阔的汽车电子为背景,涵盖自动控制、模式识别、传感技术、电子、电气、计算机、机械、汽车等多学科专业的创意竞赛。比赛规则透明,评价标准客观,坚持公开、公平、公正的原则,确保比赛健康、普及、可持续发展。

??本次比赛以英飞凌半导体公司和江苏国鑫科技有限公司为组织者,受到教育部相关领导和高校师生的高度评价。已发展成为全国30个省、市、自治区近300所大学广泛参与的全国大学生智能汽车竞赛。自2008年起,教育部批准纳入国家教学质量和教学改革项目资助项目(教学函[2007]号。30)。

??原则上,全国大学生智能汽车竞赛由全国自动化专业的高校(包括香港和澳门的大学)参加。比赛首先在每个分区注册和预赛,每个分区的获胜队将参加全国决赛。

??本次比赛分为基本四轮、节能信标、电磁越野、双车接力、全双车接力、全向行驶、自行车拉力、专业基础和智能视觉组。本文主要从机械设计、硬件设计和软件设计三个方面介绍了基于智能视觉组问题的智能汽车系统的设计和生产。

■ 1.2 智能视觉组任务要求

??对于智能视觉组,规定使用C型车模,车模尺寸不限。车模中微控制器使用NXP推荐使用系列单片机i.MX RT任何单片机系列。轨道和环境检测允许使用摄像头、电感、红外光电、激光传感器等设备。赛车模型从车库出发,沿赛道运行两周,然后返回车库。车模需要分别通过三岔路口的两个岔路口。比赛时间从车模驶出车库到返回车库。以下两项任务需要在需要完成以下两项任务:

??1)选择三岔路口。在三岔路口中心前放置靶标,上面有0个 ~ 9单个数字。车模出发后,现场裁判随机确定目标牌上的数字。当车模行驶到岔路口时,需要根据数字的奇偶特性来判断左路口还是右路口。

  • 若为偶数(0、2、4、6、8),选择左路口;
  • 若为奇数(1、3、5、7、9),选择右路口。

??如图1所示.1所示。

▲ 图1.1 选择三岔路口任务示意图

??2)路边目标识别和定位。放置在轨道某一区域(直线或弯道)中心。AprilTag25h9二维码图片。根据二维码对应的数字,靶标牌放置在轨道左侧或右侧,二维码前后50cm内。其中,偶数表示AprilTag靶标牌放置在指向左侧,奇数表示AprilTag靶标牌放置在指向右侧。

??目标上有两种图案:动物图案和水果图案。动物包括狗、猫、马、猪、牛等,动物图案包括动物全身照片;水果包括苹果、橙子、葡萄、香蕉、榴莲等,水果图案包括整个水果照片。

??如果路边标志上的图案属于动物类,车模需要在二维码所在区域(前后50cm)不少于3秒才能驶出车模停止区域。

??如果路边标志上的图案属于水果类,模型需要使用小型车载激光发射器对准目标中心发送一束激光来刺激目标目标响应。靶心检测激光束的范围是一个直径为5厘米的圆形区域激光点落在靶心可以触发目标目标的响应。

??如图1所示.2所示。

▲ 图1.2 路边目标识别和定位任务示意图

■ 1.3 框架的系统设计

??系统在检测电磁场信号和轨道图像信号的基础上,通过单片机处理信号,控制车身,使车身能够沿预设路径准确巡逻。系统电路包括电源管理系统电路、电机驱动电路、舵机驱动电路、电磁输放电路等。;外部传感器设备包括获取轨道信息的摄像头、速度测量的编码器、车身姿势的陀螺仪、靶向激光发射模块、调试的无线串口模块、人机交互TFT屏幕和按钮;此外,还有机械装置用于固定电池、电路板和各种传感器。综上所述,本智能汽车系统包含以下模块:

??1. 单片机最小系统模块(NXP i.MX RT1064单片机) ??2. 电机驱动模块 ??3. 舵机转向模块 ??4. 摄像头传感器模块 ??5. 电磁运放模块 ??6. 编码器测速模块 ??7. 陀螺仪模块 ??8. OpenART模块 ??9. 激光发射模块 ??10. 云台模块 ??11. 调试模块 ??12. 人机交互模块

??如图1所示,系统框架图.3所示。

▲ 图1.3 系统框架图

第二章 统一机械设计说明


2.1 系统机械设计参数要求要求系统机械设计参数

??在本次比赛中,智能视觉组的要求如下:

??1. 车模要求:车模采用C型车模。车模尺寸无限。 ??2. 微控制器要求:使用车模中微控制器NXP推荐使用系列单片机i.MX RT任何单片机系列。 ??3. 传感器要求:允许使用摄像头、电感、红外光电、激光传感器等。

2.2 调整系统机械的整体参数

??智能车的整体参数,包括车身重心、传感器布置等,对整个智能车系统的稳定运行起着至关重要的作用。因此,调整智能汽车机械系统有助于提高智能汽车的速度。智能汽车的布局应尽可能简洁牢固。通过车辆传感器和电路板的合理布局,确保车辆重心应靠近车辆的几何中心,使车辆模具的四个轮胎具有良好的抓地力,提高车辆模具的整体运动能力。

??智能车整体机械布局图如图2所示.1所示。

▲ 图2.1 智能车整体机械布局图

2.3 云台安装

??云台的作用为控制摄像头的转向和激光发射方向。云台通过3D打印设计与实现,前后共设计了3版。   第一版,设计如图2.2所示。

▲ 图2.2 云台ver.1

  该设计方案为将舵机云台放置在智能车转向舵机的上方,由于该方案会使激光与OPENART无法放置在较低的位置,且整体靠前,不利于转向、打靶等动作的完成,因此放弃该方案 。

  第二版,设计如图2.3所示。

▲ 图2.3云台ver.2

  该设计方案将视觉任务的舵机后移,下方不再有转向舵机,因此高度可调范围增大。但由于仅由两个铜柱与车身固定,智能车在行进的过程中舵机云台会有较大的晃动,这对视觉任务与行进任务都是不利的。综合考虑后,改善并确定了方案。

  第三版,在第二版的基础上增加了两个螺孔,使用4根铜柱将云台与车身连接,效果明显改善,智能车机械结构稳定性增强。如图2.4所示。

▲ 图2.4 云台ver3

  考虑到激光左右打靶任务的对称性,设计3D打印件使激光能固定在碳素杆正前方,确定好任务后,用热熔胶固定。3D打印件设计如图2.5所示。

▲ 图2.5 激光器固定件

  最终,云台安装如图2.6所示。

▲ 图2.6 云台安装

2.4 电池及PCB安装

  PCB板用三根铜柱固定在车身前部,电池通过3D打印件固定在车身后侧,更加牢固同时方便更换。如图2.7所示。

▲ 图2.7 电池与PCB版安装

2.5 本章小结

  机械结构是智能车的基础,其首先决定了智能车的性能,特别是转向和加速性能,本章主要通过对转向机构的分析以及对汽车理论知识的学习和应用,找到了影响小车转向范围和效率的因素并进行了改进,使得小车的转向灵敏度得到提高,同时电机差速效率也得到较大提高。此外还针对智能视觉组的任务要求,对电磁传感器、云台等硬件的布局进行合理规划。

 

第三章 统硬件电路设计说明


3.1 单片机最小系统模块

  基于NXP i.MX RT1064核心的单片机最小系统是本智能车的核心。图3.1为NXP i.MX RT1064核心板示意图。

▲ 图3.1 NXP i.MX RT1064核心板

  3.2 电源管理系统   本智能车系统由一块2S锂电池进行供电。智能车系统各硬件组成部分分别需要5V、3.3V以及6V的电压供电。

  核心板、OPENART模块、OPENMV模块以及电磁传感模块需要5V的电压供电。在该硬件电路设计中,为避免各模块之间相互干扰,使用三块LP38692MP-5.0稳压芯片产生5V稳压。

  摄像头模块、TFT彩屏、人机交互模块、蜂鸣器、激光、信号缓冲芯片、编码器、无线串口以及陀螺仪需要3.3V的供电。其中,摄像头模块通过RT9013-33GB稳压芯片供电,这是因为本基于RT1064单片机的系统需要严格的上电次序,在单片机内核启动成功后才能给外设上电。单片机的CR引脚在内核启动成功后会变为高电平,再经过3.3V LDO输入RT9013-33G的使能引脚。除摄像头外,用一块LP38692MP-3.3供电。

  舵机部分需要6V的供电 ,该硬件系统设计了三个舵机,考虑到之后智能车性能提升的需要,选用了两片可调节输出电压的LM2941SX稳压芯片,分别给三个舵机供电。

  电源管理系统如图3.2所示。

▲ 图3.2 电源管理系统

3.3 传感器模块

  传感器是小车最重要的模块之一。本系统主要使用摄像头模块作为主传感器,辅以OpenART模块、OpenMV模块、编码器测速模块、陀螺仪模块等作为辅传感器。经过考虑后,没有使用电磁运放模块。

3.3.1 摄像头模块

  本系统使用逐飞总钻风MT9V034灰度传感器作为摄像头模块。摄像头模块接口原理图如图3.3所示。

▲ 图3.3 摄像头模块接口原理图

3.3.2 OpenART模块

  OpenART是实现智能视觉组别AI任务的核心,其与主控之间通过UART接口进行通讯,该硬件电路共引出三个OpenART模块,接口原理图如图3.4所示。

▲ 图3.4 OpenART模块接口原理图

3.3.3 OpenMV模块

  为了提高识别的准确性,除OpenART模块外,辅以OpenMV模块,其与主控的通信方式也是UART通信,接口原理图如图3.5所示。

▲ 图3.5 OpenMV模块接口原理图

3.3.4 编码器测速模块

  本小车使用逐飞1024线、带方向输出的光电编码器进行小车的测速。处理器通过读取编码器脉冲数来实现小车速度的检测,通过读取编码器旋转方向脚的高低电平来检测电机的正反转。其接口原理图如图3.6所示。

▲ 图3.6编码器测速模块接口原理图

3.3.5 陀螺仪模块

  陀螺仪模块可获取车模的角速度和加速度,可辅助进行元素识别和运动控制。其接口原理图如图3.7所示。

▲ 图3.7陀螺仪模块接口原理图

3.4 电机驱动模块

  电机采用BTN8982芯片,构成完整的全桥驱动分别控制两个电机,可以很好实现电机的正转、反转和刹车制动。其电路原理图如3.8所示。

▲ 图3.8 电机驱动模块原理图

3.5 人机交互模块

  为了方便调试,本车有无线串口模块,通过UART通信方式进行通讯和传输数据。除此之外,主板还设置了按键、拨码开关和TFT显示屏,以方便控制参数的修改,便捷地进行智能车的调试。各模块原理图如图3.9所示。

▲ 图3.9 人机交互模块

3.6其他外设模块

3.6.1蜂鸣器模块

  蜂鸣器模块通过MOS管与主控的IO口连接,可进行调频实现各种效果。蜂鸣器模块接口原理图如图3.10所示。

▲ 图3.10 蜂鸣器模块

·3.6.2激光模块

  激光模块用来实现任务中的打靶部分,由于裁判系统要求激光具有一定的频率,因此通过MOS管令激光与主控的I/0口连接,实现125Hz的调频。激光模块接口原理图如图3.11所示。

▲ 图3.10 蜂鸣器模块

3.7 PCB板整体布局

 

第四章 统软件设计说明


4.1 AI任务部分

4.1.1 AI任务介绍

  本届竞赛,智能视觉组别在车模行进过程中,需要完成两种任务,分别为三岔路口选择和路边目标识别与定位。

  1)选择三岔路口。在三岔路口中心前方放置一个靶标牌,上面有0 ~ 9单个数字。在车模出发后,由现场裁判员随机确定靶标牌上的数字。车模行进到三岔路口时,需要根据数字的奇偶特性判断左边路口还是右边路口。

  • 若为偶数(0、2、4、6、8),选择左侧路口;
  • 若为奇数(1、3、5、7、9),选择右侧路口。

  该任务示意图如图4.1所示。

▲ 图4.1 选择三岔路口任务示意图

  2)路边目标识别与定位。在赛道某一区域(直线或者弯道)中心放置AprilTag25h9二维码图片。根据二维码对应数字,分别在赛道左侧,或者右侧,二维码前后50厘米范围内放置靶标牌。其中,偶数表示以AprilTag指向的左侧放置靶标牌,奇数表示以AprilTag指向的右侧放置靶标牌。

  靶标上张贴有两类物品的图案:动物图案和水果图案。其中动物类包括狗、猫、马、猪、牛等,动物图案包含有动物全身照片;水果类包括苹果、橘子、葡萄、香蕉、榴莲等,水果图案包括有水果整体照片。

  如果路边目标牌上的图案属于动物类,则车模需要在二维码所在的区域(前后50厘米)内不少于3秒钟,方能驶出车模停止区域。

  如果路边目标牌上的图案属于水果类,则车模需要使用车载小型激光发射器对准靶点中心发送一束激光,激发目标靶响应。靶心检测激光束的范围是直径为5厘米的圆形区域,激光点落在靶心便可以触发目标靶位的响应。   该任务示意图如图4.2所示。

▲ 图4.2 路边目标识别与定位任务示意图

  其中,三岔路口选择任务需要针对阿拉伯数字进行识别,路边目标识别与定位任务则包含AprilTag码识别、动植物图案识别和激光打靶三个环节。故智能视觉组别的AI任务可细分为以下四个任务:数字识别与处理、AprilTag码识别与处理、动植物图案识别与处理、激光打靶处理。

4.1.2 神经网络模型部署

  根据智能视觉组赛题要求,本届比赛中的数字识别与处理任务、动植物图案识别与处理任务都需要使用神经网络模型进行部署实现。对于图像识别,由竞赛规则可知所用到的图像均为全身或是整体图片,可以得到以下推论:

  1)待检测图片内部只包含其中一种物体,也就是说不会涉及到多物体检测,不需要采用OD类模型(OD是object detection的简称,一般模型体量会比较大,执行耗时比可比图像分类多几十倍,但好处在于可以一次性检出画面上所有的待检物体,并且提供位置信息)来做。

  2)待检测图片背景不复杂,全图只有待检物体本身,大大降低了背景噪声的引入对分类模型的影响。

  无论是数字识别任务,还是动植物识别任务,任务本身都是一个典型的十分类问题,从任务难度上看并不会特别困难。CNN领域有一些经典的十分类问题,以最耳熟能详的例子cifar10和lenet为例,数据集本身的体量很大,每一子类都有1w的可用数据。然而我们所使用的基于RT1064核心的OpenART模块,对于一些体量比较大的模型,由于MCU算力有限,处理的速度会比较慢,会耗费大量的时间来进行目标的识别。算力和模型精度是一对欢喜冤家,往往好的模型,体量都不会太小,这也就使得我们在设计模型的时候,要通盘考虑,如何设计出一款小而精的模型,从而在识别速度和准确率上脱颖而出。

  本系统的神经网络模型使用开源人工神经网络库Keras进行设计、调试、评估和应用。Keras是一个用python编写的深度学习API,可以在机器学习平台Tensorflow上运行,作为神经网络的推理引擎。

  首先,需要对数据进行预处理。在进行深度神经网络训练时,一般往往要求输入的数据范围在(-1,1)或(0,1)之间,因此,我们要对数据进行归一化处理,并将标签数据转换为one-hot码。对于智能视觉组赛题,数字和动植物的识别都是10分类,要训练一个10分类的网络(对10种物体进行分类),那么要将标签(图片所对应的类别号)转换为长度为10,并且仅有其所对应的类别号的位置的数据为1,其余均为0,这样一组n维向量就被称为one-hot码,以方便网络进行迭代学习。同时,需要对数据集进行拆分,将其划分为训练集与测试集,训练集用于模型自身迭代,测试集用于诊断模型能力。相关代码如下:

	x = np.load('./x.npy') # 数据集读入 
	y = np.load('./y.npy') # 数据集读入 
	x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.2, random_state = 40) # 拆分数据集,80%作为训练集,20%作为测试集 
	np.save("test_x", x_test)  
	np.save("test_y", y_test)  
	x_train = x_train / 128.0 - 1 # 数据集归一化处理 
	y_train = to_categorical(y_train) # 转换为one-hot码 
	x_test = x_test / 128.0 - 1 # 数据集归一化处理 
	y_test = to_categorical(y_test) # 转换为one-hot码 

  接着需要搭建一个神经网络模型。我们构建了一个拥有3Conv+1Dense的CNN,即一个具有3层卷积+1层全连接的简单卷积神经网络模型,如图4.3所示。

▲ 图4.3 3层卷积+1层全连接的简单卷积神经网络模型

  相关代码如下:

	def model_sequential():  
	    mopdel = Sequential()  
	  
	    model.add(Conv2D(32, (3,3), padding='same', input_shape=(32,32,3)))
	    model.add(pooling((2,2)))  
	    model.add(Activation("relu"))  
	  
	    model.add(Conv2D(64, (3,3), padding='same'))  
	    model.add(pooling((2,2)))  
	    model.add(Activation("relu"))  
	  
	    model.add(Conv2D(128, (3,3), padding='same'))  
	    model.add(pooling((2,2)))  
	    model.add(Activation("relu"))  
	  
	    model.add(Flatten())  
	    model.add(Dense(10))  
	    model.add(Activation("softmax"))  
	  
	    return model  

  搭建完神经网络模型后,就可以开始训练。

  对于学习率(lr)设置,过大的学习率会提高模型的学习速度,但是太大了可能反而适得其反,还可能会导致模型无法得到最优解;而过小的学习率,会导致训练速度过慢,陷入局部最优不能自拔,选择上要进行试错调整。这里选择   0.001作为学习率:

	opt = Adam(lr=0.001)  

  对于训练的评价标准,我们选择categorical_crossentropy,是专门适用于多分类问题的损失函数:   model.compile(optimizer=opt, loss=‘categorical_crossentropy’, metrics=[“acc”])

  训练函数如下:

	early_stop = EarlyStopping(patience=20)  
	reduce_lr = ReduceLROnPlateau(patience=15)  
	save_weights = ModelCheckpoint("./models/model_{epoch:02d}_{val_acc:.4f}.h5",  save_best_only=True, monitor='val_acc')  
	callbacks = [save_weights, reduce_lr]  
	model.fit(x_train, y_train, epochs = 100, batch_size=32,  validation_data = (x_test, y_test), callbacks=callbacks)  

  其中epochs代表总共迭代遍历数据集多少多少次,batch_size为一次迭代需要使用多少数据。小了能让模型迭代快,但是训练效果容易震荡,还妨碍学到全局特征;大了能让学习过程更平稳,但模型收敛效率会下降,还可能陷入局部最优。save_weights和callbacks函数负责模型的保存,会将训练过程中遇到的最好结果即时保存下来。   以上即为神经网络模型训练的流程和相关代码,训练时的界面如图4.4所示,其训练后会得到如图4.5所示的.h5格式文件。

▲ 图4.4 神经网络模型训练界面

▲ 图4.5 神经网络模型训练导出文件

  训练完毕后,需要对训练导出的文件进行模型的量化和部署。由于所使用的模型层数较少,所以我们使用性能最佳的NNCU工具。

  首先针对导出的模型文件进行量化。量化可以在减小模型尺寸的同时,加速模型的运行。在nncu底层使用的CMSIS-NN老式库中,量化系数给出了是由多少个位来表达tensor中的整数部分和分数部分,并且整数都是有符号整数。比如,对于8位量化,如果由3个位表示分数,那么就有1个符号位,4个整数位,和3个分数位,表达范围是[-128/8,127/8],分辨率为1/8;如果是4个位表达分数,则表达范围就是[-128/16,127/16],分辨率为1/16。在nncu中量化模型,既可以由用户指定一个全局的数值来配置表达分数的位数,就像是在电磁AI中的做法;又可以像tflite那样提供一个代表性的数据集来估算各tensor的取值范围。图4.6为nncu工具调整量化参数的界面。

▲ 图4.6 nncu工具量化参数界面

  模型量化后,需要把模型部署到OpenART模块上。量化导出的文件格式为.nncu,把该量化后的文件放在OpenART模块的SD卡根目录上,即可调用相关API实现模型部署。相关代码如下:

	net_path = "_1s_model_03_0.9957_xxxx.nncu" # 定义模型的路径 
	labels = [line.rstrip() for line in open("/sd/labels_animal_fruits.txt")] # 加载标签 
	net = nncu.load(net_path, load_to_fb=True) # 加载模型 
	while TRUE:  
	    for r in img.find_rects(threshold = 50000): # 在图像中搜索矩形 
	        img.draw_rectangle(r.rect(), color = (255, 0, 0)) # 绘制矩形外框,便于在IDE上查看识别到的矩形位置 
	        img1 = img.copy(r.rect()) # 拷贝矩形框内的图像 
	        for obj in nncu.classify(net , img1, min_scale=1.0, scale_mul=0.5, x_overlap=0.0, y_overlap=0.0):  
	            sorted_list = sorted(zip(labels, obj.output()), key = lambda x: x[1], reverse = True)  

  至此,完成了从数据集制备到模型部署的所有工作。神经网络模型部署这一步骤适用于后文的数字识别与处理任务和动植物图案识别与处理任务。

4.1.3 数字识别与处理

  在三岔路口需要对路口处的数字进行识别,并根据数字的奇偶性,来决策应该走左边还是走右边。我们使用OpenART模块来完成此任务。

  要实现该任务,首先需要实现被识别图片矩形框的寻找和提取。OpenART提供了寻找矩形的函数img.find_rects,但由于竞赛标靶与赛道间仍有一定距离,车模在实际运行时,标靶后的背景会严重干扰矩形框的寻找定位。针对该问题,由于比赛时标靶的图片矩形框颜色是固定的(如分赛区比赛时为紫色,其RGB值为(68,0,98)),我们使用指定颜色提取的方法,把非矩形框的颜色信息全部滤除。我们先对图像色彩空间进行预处理,把RGB色彩空间转换为HSI色彩空间,其转换公式为:

θ=cos^(-1)⁡〖{ 
        ([(R-G)+(R-B)]/2)/√(〖(R-G)〗^2+(R-B)(G-B))}〗
H={ 
        █(θ@360-θ)┤  (B≤G)¦(B>G)
S=1-(3*min⁡(R,G,B))/(R+G+B)
I=(R+B+G)/3

  相关代码如下:

	void RGBtoHSI()  
	{ 
          
	  int i,j;  
	  double r,g,b,numm,den,min,theta,H,S,I;  
	  uint16 color_tran;  
	  for(i=0;i<SCC8660_CSI_PIC_H;i++)  
	    for(j=0;j<SCC8660_CSI_PIC_W;j++)  
	    { 
          
	      color_tran = ((image_RGB[i][j]>>8)|(image_RGB[i][j]<<8));  
	      b = 1.0 * (color_tran & 0x1f) / 0x1f;  
	      g = 1.0 * ((color_tran >> 5) & 0x3f) / 0x3f;  
	      r = 1.0 * ((color_tran >> 11) & 0x1f) / 0x1f;  
	      //几何推导法转换  
	      numm=0.5*((r-g)+(r-b));  
	      den=sqrt((r-g)*(r-g)+(r-b)*(g-b));  
	      if(den==0)  
	        H=0;  
	      else  
	      { 
          
	        theta=acos(numm/den);  
	        if(b>g)  
	          H=(2.0*M_PI-theta)/(2.0*M_PI);  
	        else  
	          H=theta/(2.0*M_PI);  
	      }  
	      min=(b>g)?g:b;  
	      min=(min>r)?r:min;  
	      den=r+g+b;  
	      if(den==0)  
	        S=0;  
	      else  
	        S=1-3.0*min/den;  
	      I=(r+g+b)/3.0;  
	      image_H[i][j] = (uint16)(H * 360.0);  
	      image_S[i][j] = (uint8)(S * 255.0);  
	      image_I[i][j] = (uint8)(I * 255.0);  
	    }  
	}  

  转换完毕后,根据矩形框的实际颜色给所提取的HSV三值设定阈值范围,处于阈值范围内的像素点设为白色,处于阈值范围外的像素点为黑色,把整幅图像二值化。

  把图像进行颜色提取二值化后,即可大幅度滤掉背景的干扰,对于被识别图片矩形框的寻找和提取的效果、准确度和灵敏度有非常大的提升。

  我们使用约1500个数据集建立数字模型训练数据库,如图4.7所示。

▲ 图4.7 数字模型训练数据库

  寻找到矩形框后,把矩形框内的图片放入部署好的数字神经网络模型里,即可得到识别结果。数字识别的具体效果如图4.8所示。(2代表奇数,1代表偶数)

▲ 图4.8 数字识别效果图

4.1.4 AprilTag码识别与处理

  AprilTag是一个视觉基准库,在AR,机器人,相机校准领域广泛使用。设定为与二维码相似但相对更简单的特定标志,实现快速检测。在赛题中AprilTag码也代表着数字,依然通过识别其所代表的数字,并判断奇偶性来得知靶标牌是在赛道的哪一侧。我们使用OpenART模块来完成此任务。

  OpenART提供了识别AprilTag码的函数find_apriltags,其效果如图4.11所示。

▲ 图4.9 AprilTag识别效果图

4.1.5 动植物图案识别与处理

  赛题中包含动物图案和水果图案,这部分内容也是该组别最能体现“AI”的一个环节。动物类包含狗、猫、马、猪、牛五个子类别,水果类包含苹果、橘子、葡萄、香蕉、榴莲五个子类别,图案对象均为全身或整体照片。

  关于动物和水果的识别,需要采用第十五届AI电磁组部署神经网络模型的方式,来实现对图案的识别,区别是数据量大了许多,所以这个环节的任务采用OpenART模块部署AI模型进行训练和实现。

  与数字识别与处理任务的流程类似,要实现该任务,首先需要实现被识别图片矩形框的寻找和提取。此部分已在4.1.3中叙述,此处不再簪述。

  我们使用约14万个数据集建立动植物模型训练数据库,如图4.10所示。 (0代表动物,1代表水果)

▲ 图4.10 动植物模型训练数据库

  寻找到矩形框后,把矩形框内的图片放入部署好的动植物神经网络模型里,即可得到识别结果。动植物识别的具体效果如图4.11所示。

▲ 图4.11 动植物识别效果图

4.1.6 激光打靶处理

  在识别到图案为水果时,需要使用车载小型激光发射器对准靶心发送一束激光,打中才算完成该项任务。在识别到AprilTag后,OpenArt与激光向相应的方向旋转90°,然后车体缓缓向前移动,直到OpenART识别到水果,并确认图像位于OpenART位置中心时,确认为激光也对准水果图片中心,然后以125Hz的频率开启激光一秒后关闭,打靶结束。

4.2 巡线

标签: 空心电感能够产生多高磁场强度传感器配套磁座传感器线色白色智能电子连接器热熔胶传感器系列拉线传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台