【毕业设计】基于STM32及OpenMV的云台追踪装置

目录

  • 修改记录
  • 1.摘 要
  • 2.整体功能分析
  • 3.硬件选型
    • 3.1 OpenMV4 Cam H7
    • 3.2 STM32F103ZET6
    • 3.3 DS3120舵机
    • 3.4 LED补光板
    • 3.5 供电及稳压
    • 3.6 硬件连接
  • 4.软件功能实现
    • 4.1 OpenMV部分的功能实现
      • 4.1.1 整体逻辑分析
      • 4.1.2 对被测物体的识别
      • 4.1.2 寻找最大色块区域
      • 4.1.3 判断被测物体所在区域
      • 4.1.5 串口发送数据
    • 4.2 STM32部分软件功能的实现
      • 4.2.1 整体逻辑分析
      • 4.2.2 串口接收数据
      • 4.2.3 定时器输出PWM波
      • 4.2.4 控制舵机旋转
  • 5. 总结
  • 6. 第一次补充(2022.3.12)
    • 6.1 PID控制追踪
    • 6.2 PID控制代码部分
      • 6.2.1 OpenMV代码
      • 6.2.2 STM32代码
    • 6.3 第一次补充总结
  • 7. 第二次补充(2022.10.22)
    • 7.1 硬件部分
      • 7.1.1主控PCB
      • 7.1.2 补光板PCB
      • 7.1.3OPENMV串口扩展板
    • 7.2 代码部分
      • 7.2.1 openmv部分
      • 7.2.2 stm32部分
      • 7.2.3 3D建模
    • 7.4 演示与购买
      • 7.4.1 演示
      • 7.4.2 购买
    • 7.5 第二次补充总结

修改记录

序号 修改时间 修改内容
1 2022-3-12 增加第一次补充内容:PID控制,详细请见“6. 第一次补充(2022.3.12)”
2 2022-4-21 修改了PID代码部分“误差的计算公式”错误 ,由“ pid_x.Actual – pid_x.Set ”修改为“pid_x.Set – pid_x.Actual”,详细请见“6.2.2 STM32代码”部分
3 2022-10-22 增加第二次补充内容:硬件部分改为PCB,主控芯片替换为STM32F103C8T6,详细请见“7. 第二次补充(2022.10.22)”

1.摘 要

本文通过OpenMV作为是识别模块去识别被测物体(以红色小球为例),当其识别到红色小球后,判断小球中心点所在的区域信息,并将其区域标志位通过串口发送给STM32,当STM32接收到位置信息后对x轴、y轴的两个舵机参数进行操作,最后通过定时器输出合适的PWM波,控制舵机旋转相应的角度,使OpenMV摄像头对准被测物体,以实现物体追踪功能。

实现效果

【毕业设计】基于Stm32及OpenMV的云台追踪装置

我会把我做该毕业设计的整体思路以及部分的主要代码在文章中详细介绍,很简单的,在追踪部分没有用到PID控制哦!大家可以放心食用(手动滑稽)!很容易复刻的!

若是你很懒,不想自己一步一步自己做的话,可以直接去下载论文和源代码。
代码:【代码】基于STM32及OpenMV的云台追踪装置_毕业设计
论文:【论文】基于STM32及OpenMV的云台追踪装置_毕业设计
全家桶:【毕设全家桶】基于Stm32及OpenMV的云台追踪装置_毕业设计
(温馨提示:是要花钱的哦,我觉得你看完这篇文章完全可以自己做出来的,没必要花钱的,所以请一定要仔细看下去哦!)


2022.3.12 第一次补充:
新添加了PID控制追踪的代码:
【代码(PID控制)】基于Stm32及OpenMV的云台追踪装置_毕业设计
注:在2022.3.12前,购买过我的云台追踪的代码或是全家桶的小伙伴,可以带着购买记录私信我,可以免费获得这个PID控制的代码。


2.整体功能分析

完成一个好的设计是要在实现了它的功能的基础上,所以在进行设计之前需要确定一下本设计要实现的功能,然后再进行相应的设计。在本设计中使用OpenMV作为视觉模块,STM32作为主控制MCU去控制舵机旋转,以实现追踪功能。整体功能流程图如图2.1所示。

OpenMV:作为识别模块,主要实现物体识别的功能,并将识别到的物体的位置信息通过串口传递给STM32。

STM32的串口部分:主要功能是与OpenMV进行数据交互,接收OpenMV发来的位置信息。

STM32的定时器部分:主要功能是通过库函数输出PWM波,从而控制X、Y轴的两个舵机旋转。以达到追踪效果。

整体功能流程图

【毕业设计】基于STM32及OpenMV的云台追踪装置
本设计中OpenMV部分主要实现三个功能:完成被测物体的识别(以红色小球为例)、寻找最大色块区域、通过串口发送被测物体的位置信息。在这儿强调一下,其引脚3.3v-5v耐压,过高的电压会烧掉其中的芯片。

3.2 STM32F103ZET6

本次设计中使用STM32F103ZET6最小系统板作为核心MCU,实物如图3.3所示。使用其他的芯片已ok的,只需要确定该芯片可以输出两路PWM波、一个串口就行。

【毕业设计】基于STM32及OpenMV的云台追踪装置
工作原理:通过给舵机的信号线(橙黄色)输入周期为20ms的PWM波,通高电平的时间为:0.5 ~ 2.5ms,可以使舵机旋转0~180°。如图3.6所示。
补光板

3.5 供电及稳压

供电使用3s锂电池作为整体装置的供电,3S锂电池可以提供11.1V的电压,3S锂电池实物图如图3.9所示。

【毕业设计】基于STM32及OpenMV的云台追踪装置

3.6 硬件连接

硬件连接部分使用杜邦线连接,连接如下:3S锂电池接稳压板输入端以及直接给LED补光板供电,稳压板输出端接OpenMV的VIN和GND引脚、STM32的5V和GND引脚以及两个舵机的正(红色)负(棕色)极。OpenMV的P4引脚(串口3的TX)接STM32的PA10引脚(串口1的RX),OpenMV的P5引脚(串口3的RX)接STM32的PA9引脚(串口1的TX),STM32的PC7引脚(定时器3通道2)接x轴的舵机的信号线(橙黄色),STM32的PC7引脚(定时器3通道1)接y轴的舵机的信号线(橙黄色)。

【毕业设计】基于STM32及OpenMV的云台追踪装置

4.软件功能实现

软件部分的功能主要分为两部分,一个是OpenMV部分,另一是STM32部分,OpenMV主要实现功能:完成被测物体的识别、寻找最大色块区域、判断被测物体所在区域、通过串口发送被测物体的位置信息。STM32部分主要实现功能:使用串口接收OpenMV发来的数据、通过定时器输出PWM波、以及实现控制舵机旋转追踪的目的。

4.1 OpenMV部分的功能实现

4.1.1 整体逻辑分析

首先对OpenMV部分实现功能:首先进行摄像头的初始化,确保其可以正常的使用。其次设置图像格式,选用RGB模式,使其图像为彩色模式,然后设置图像大小,设置为QVGA格式,分辨率为320*240 dpi。而后设置颜色阈值,确保OpenMV可以识别到此颜色。然后设置白平衡,关闭自动白平衡,避免对识别的影响。接着对串口初始化,确保串口可以正常的发送数据。到此准备工作完成,进入识别部分,首先截取图像并返回,然后判断图像内是否识别到红色区域:否则循环等待,是则判断区域是否为最大区域,否则返回等待,是则用矩形框标出中心位置,判断中心位置所在的区域,并将位置信息通过串口发出。以上部分除了判断所在区域外的所有代码都可以在星瞳科技的官网上找到,并且官方还有配套的详细讲解。

戳这里直接进入:星瞳科技官网

【毕业设计】基于STM32及OpenMV的云台追踪装置
注:在不同的光照环境下会对颜色识别造成很大的影,所以请在稳定的光照环境下调整阈值以及识别。

调整好红色阈值后,赋值LAB阈值的参数,并赋值给red_threshold,调用MicroPython函数库中的image.find_blobs()函数,对该色域进行识别。该功能部分程序如下:

其中:
while循环之前为OpenMV初始化部分:
RGB565为彩色模式(颜色识别嘛,肯定得用彩色模式);
QVGA为图像大小(320dpi * 160dpi,像素点),这个可以根据选的OpenMV的性能来选择;
关闭白平衡:是指关闭系统的自动白平衡,自动白平衡会对颜色识别造成影响。

while循环内:
image.find_blobs()函数:参数主要为6个:LAB的最大最小值(可以通过之前的阈值编辑器中得到)。
img.draw_rectangle()函数:则是用矩形框框出识函数参数的区域。
img.draw_cross()函数:在参数位置上绘制出十字架。其中函数参数blobs.cx(), blobs.cy():分别为blobs区域的中心x、y轴坐标。

4.1.2 寻找最大色块区域

在OpenMV追踪识别的过程中,可能出现背景或是其他区域出现小面积的红色区域,如图所示。这会对识别造成影响,所以需要用程序过滤掉那些小的红色区域。

【毕业设计】基于STM32及OpenMV的云台追踪装置

4.1.3 判断被测物体所在区域

本段程序是判断被测物体所在区域,将OpenMV拍摄到的画面分为五个区域,分别为中心区域、左上区域、右上区域、左下区域、右下区域,分布结构如图所示。

【毕业设计】基于STM32及OpenMV的云台追踪装置

本部分程序逻辑为先判断被测物体的中心位置是否在左上区域,如果在则标志位flag被赋值为1,否则为不变(初始值为0),判断被测物体的中心位置是否在右上区域,如果在则标志位flag被赋值为2,否则为不变,判断被测物体的中心位置是否在左下区域,如果在则标志位flag被赋值为3,否则为不变,判断被测物体的中心位置是否在右下区域,如果在则标志位flag被赋值为4,否则为不变,判断被测物体的中心位置是否在中心区域,如果在则标志位flag被赋值为5,否则为不变。流程图如图所示。

来源:番杰

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年9月19日
下一篇 2022年9月19日

相关推荐