• 113
•
近年来随着交通运输业的快速发展,智能汽车技术在我国交通安全和汽车行业的发展中发挥了重要的作用,受到了人们的广泛关注。现在的定位技术也为我们的生活提供了极大的便利,所以智能汽车的安全以及准确的定位和跟踪功能也备受关注。目前,由于存在多种不同的环境,四旋翼飞行器具有容易携带,低
空飞行性能好,可以探测和识别、自动定位、自动跟踪地面移动信标车等功能特点。可以高效、快速、稳定地实时跟踪地面目标,并且可快速完成在复杂环境下的侦察任务,如洞穴、隧道和幽闭恐怖场所。本文所介绍的智能车定位追踪系统主要采用无人机加上机器视觉设备openmv 作为航拍体系,利用LAB 彩模型、圆形识别的霍夫变换以及AprilTag 码检测实现精准计算出AprilTag 码和信标灯位置差
图2 主控PCB图
图3 驱动板PCB图
1 组件硬件
汽车测速器1.1 整体结构图
本系统各模块完成了以下任务:嵌入式模块是使STM32F103RCT6作为主控芯片,主要功能是数据采集、处理、发送,以及控制驱动。测速模块使用的是霍尔编码器,用于直流电机测速。图像数据采集则是使用openmv 作为摄像头模块。电源模块使用LM2596和AMS1117作为电源芯片实现电压转换。蓝牙模块使用BC417
作为蓝牙主芯
图1 整体结构图
片,主要用于数据的发送和接受。电机驱动模块使用BTN 驱动。显示模块显示信息使用OLED 显示屏。
总体结构图如图1所示。1.2 主控与驱动模块
• 114
•
STM32F103RCT6是32位微处理器,其flash 程序内存为256字节,其最高工作频率为72MHz 。主控如图2所示。本设计使用的直流减速电机的工作电压为(7-13)V ,采用BTN 系列芯片。因为BTN 系列芯片工作电压范围宽,从5V 到28V ,最大工作电流可达70A 且外围电路设计简单,驱动模块图3所示。1.3 OPENMV介绍
openmv 是基于STM32F4系列单片机和OV2640图像传感器的开源微型机器视觉模块。其自身携带Micro
Python 解释器,可以利用编辑Python 程序来实现各种功能,包括IO 端口控制等功能。1.4 信标系统
信标灯由三部分组成:白圆柱形灯罩、金属底座和固定底盘。灯罩采用圆柱形达到圆形效果,其材质为白塑料,内部的红信号能透灯罩。本文用蓝线和白线连接两个带线圈的信号灯。在信标控制器的控制下,灯亮了。当小车到达发光信号灯位置时,在永磁体和线圈的作用下,信标灯熄灭,另一信标灯亮。1.5 AprilTag码介绍
AprilTag 是一种视觉基准系统,可以应用于多种任务包括AR 、机器人和相机校准。AprilTag 标签可直接打印纸上,AprilTag 探测器就能计算出与相机相关的精准3D 位置、方向和id 。AprilTag 内容包含三个主要步骤。第一步是根据梯度来检测图像中的边缘。第二步是在边缘图像中到所需要的四边形图案再进行筛选。AprilTag 试图尽可能多地检测边缘。首先,删除非直边,在直边上搜索相邻边。最后是对所获得AprilTag 码进行编码和解码。利用单个线性变换矩阵结合多个摄像头的信息,得到二维码的相关姿态信息。
2 软件算法
2.1 openmv追踪小车流程
使用openmv 精确定位的三维坐标,视觉的位置有一个相对于相机坐标系建立在地上,在相机图像将更
快的计算机生成一个坐标数据的基础上,形成计算机图像及图像坐标系统。事实上,这是因为相机的标签在地上旋转后在一系列的姿态和位置的翻译。实验场景图如图4。
如图4所示,在四旋翼飞行器上连接openmv 摄像头,在摄像头的视野范围内放置一定数量的信号灯和贴有AprilTag 码的车,openmv 通过检测信标灯和小车上的AprilTag 码的位置,实现精准定
位,并通过算法来计算两者偏差,通过蓝牙传输给小车主控,然后小车通过位置PID 和速度PID 输出四个电机的PWM 波到达目的地完成对目标的追踪。整体程序流程图如图5
所示。
图4 装置场景图
图5 整体程序流程图
2.2 信息发送接收方法
当摄像头检测信号灯时,它先检测到红光,再检测圆形。所以我们首先确定阈值,通过find_blobs 函数到块相机想要锁定的阈值,用霍夫变换算法进行圆的识别。使用find_circles()方法查完全位于图像内部的圆。相机就可以准确的定位信标灯。然后再通过摄像头检测AprilTag 码的位置值,将其赋给小车,然后将小车与信号灯进行位置比较以判别方向。车头在0°到180°时,从电
• 115
•
脑中串口接收的值为0,2,4,6。当车头在180°到360°时,测得的数据是1,3,5,7。但是一旦超过180°,算法会自动减去180°,传送给小车,这样小车不需要调转车头仍然向信标灯的位置前进。在数据发送之前需要对数据进行处理:将车与目标位置X轴、Y轴、角度偏差放大50倍在除以256换算成16进制数便于处理发送。例如:R1=int(hex(int(abs((car_X-color_X)*50)/256)))。
2.3 串口传输
小车通过蓝牙串口获取摄像头发送的目标位置信息后,先读取数据,为了实现数据的真正传输,它将传输的10字节的数据定义为一帧数据,从0xff和0xfe开始。如果检测到,只接收从0xff和0xfe 开始的数据帧,才认定其数据为正确数据。通过此协议构造出串口中断服务程序接收数据。将小车上收到的数据解析后通个另一个蓝牙串口发送到电脑上进行验证数据的准确,并将摄像头发送的数据打印在串口终端上进行对比,对比过程中得到摄像头发送的数据:0xff,0xfe,0x01,0x07,0x9e,0x06,0x72,0x00,0x02,0x01,与接收到的数据相同达到了成功通信,根据通信协议处理后得到需要的数据为0x01,0x07,0x9e,0x06,0x72,0x00,0x02。这些数据代表运动模式和X轴Y轴及Z轴的值。小车在接收到数据后进行读取并获得目标位置偏差,以及运动方向,在数据中去掉头部协议字节,后面分别为X轴偏差,Y轴偏差,和车的行驶角度,在得到数据后进行运动分析解算出车的四个轮子的转速,然后将目标值和测量值输入到PID算法分析函数中进行PID运算最后得到PWM 波输出。
3 数据误差分析及解决方案
当红阈值不变时,同时检测到信号灯和ApirlTag码,由于曝光问题,扫描信号灯时会对AprilTag码产生误判,这就对分析效果产生很大的影响,如图6所示。
因此,我们需要通过修改门限值来达到信号灯和AprilTag码检测互不影响的效果。使得最终摄像头只识别到了信标灯,虽然会对信号灯的扫描像素有影响但是不受AprilTag码的影响,达到精准定位的效果。如图7所示。现实环境扫描结果如图8所示,红代表锁定信号灯,绿代表锁定到车,且各自独立。
4 小结
本系统主要设计了一种基于STM32定位追踪系统,利用了无人机定高加上摄像头openmv对信标灯和AprilTag码经过一系列算法的精准定位来判断小车车头位置,计算小车与信标灯位置的差值并进行合成,再通过配对蓝牙将数据传输给小车,小车的串口接收数据后进行位置解算,确定最终姿态以达到追踪效果。使用python编写使得代码更为简洁,加快了定位速度,增强了定位精度,使用STM32RCT6作为嵌入式平台,体积小重量轻便于携带。
项目名称:一种基于图像识别技术的四旋翼飞行器的设计与实现,项目编号:201813617015
。
图6 受AprilTag码干扰 图7 消除干扰 图8 实物图
发布评论