【2023年电赛】运动目标控制与自动追踪系统(E 题)最简单实现

news2025/1/16 21:58:26

本方案的思路是最简单的不涉及复杂算法:识别矩形框,标记矩形框,输出坐标和中心点,计算长度,控制舵机移动固定长度!仅供完成基础功能参考,不喜勿喷!

# 实现运动目标控制与自动追踪系统

## 任务概述
本文将介绍如何使用OpenMV开发板和舵机构建一个运动目标控制与自动追踪系统。该系统包括模拟目标运动的红色光斑位置控制系统和指示自动追踪的绿色光斑位置控制系统。通过本文的实现,我们可以在图像中识别目标,控制舵机沿着目标移动,并输出目标矩形框的中心位置和长度。

## 硬件准备
1. OpenMV H7 Plus开发板
2. 红色和绿色激光笔
3. 两个舵机(连接到OpenMV开发板)

## 硬件连接
将两个舵机分别连接到OpenMV开发板的舵机引脚(根据实际引脚选择)。

## 相机设置
在代码中,我们将相机设置为QVGA分辨率和RGB565格式。

import sensor, image, math, pyb

# 初始化相机
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time=2000)

# 其他代码...

## 目标检测与跟踪(目标检测部分代码实测过!)
### 寻找矩形函数
为了在图像中识别目标矩形框,我们需要编写一个寻找矩形函数。该函数将返回第二大的矩形区域,以便我们可以找到目标的位置。

# 寻找矩形函数,返回第二大的矩形区域
def find_second_largest_rectangle(blobs):
    max_area = 0
    max_blob = None
    second_max_area = 0
    second_max_blob = None

    for blob in blobs:
        area = blob.area()
        if area > max_area:
            second_max_area = max_area
            second_max_blob = max_blob
            max_area = area
            max_blob = blob
        elif area > second_max_area:
            second_max_area = area
            second_max_blob = blob

    return second_max_blob

## 主循环
在主循环中,我们将不断获取图像并进行目标检测和跟踪。

while True:
    img = sensor.snapshot() # 获取图像
    blobs = img.find_blobs([black_threshold], pixels_threshold=200, area_threshold=200)

    if blobs:
        # 寻找第二大的矩形区域
        second_max_blob = find_second_largest_rectangle(blobs)
        if second_max_blob:
            img.draw_rectangle(second_max_blob.rect(), color=(255, 0, 0), thickness=4) # 绘制第二大的矩形框,颜色为红色

            # 其他代码...

## 舵机控制
为了实现目标跟踪,我们需要控制舵机使其沿着矩形框移动一圈,并回到中心点。这里我们使用了`pyb.Servo()`来控制舵机运动。

# 舵机参数
servo_pan_pin = 1 # 舵机1的引脚编号
servo_tilt_pin = 2 # 舵机2的引脚编号
servo_pan = pyb.Servo(servo_pan_pin) # 初始化舵机1
servo_tilt = pyb.Servo(servo_tilt_pin) # 初始化舵机2
servo_speed = 50 # 舵机转动速度(0-100,越大越快)
servo_pan_range = (0, 180) # 舵机1转动范围(角度)
servo_tilt_range = (0, 180) # 舵机2转动范围(角度)

# 控制舵机沿着矩形框移动一圈,并回到中心点
for angle in range(servo_pan_range[0], servo_pan_range[1], servo_speed):
    servo_pan.angle(angle) # 控制舵机1水平旋转
    servo_tilt.angle(angle) # 控制舵机2垂直旋转
    pyb.delay(100) # 延时一段时间,控制舵机转动速度

# 将舵机回到中心点
servo_pan.angle((servo_pan_range[0] + servo_pan_range[1]) // 2)
servo_tilt.angle((servo_tilt_range[0] + servo_tilt_range[1]) // 2)

## 结果输出
在检测到目标后,我们将输出目标矩形框的中心位置和长度。同时,我们会在图像中标记出矩形框的位置。(测试坐标和长度还是比较准备 )

# 获取矩形框的中心点坐标
x, y = second_max_blob.cx(), second_max_blob.cy()

# 计算矩形框的长度和宽度(单位:厘米)
width_cm = 2 * distance_cm * math.tan(math.radians(H_FOV / 2)) * (second_max_blob.w() / img.width())
height_cm = 2 * distance_cm * math.tan(math.radians(V_FOV / 2)) * (second_max_blob.h() / img.height())

# 输出矩形框的中心点坐标和长度(单位:厘米)
print("Rectangle Center Coordinates (cm): x={}, y={}".format(x, y))
print("Rectangle Width (cm): {}, Height (cm): {}".format(width_cm, height_cm))

# 绘制黄色圆点标记矩形框中心位置
img.draw_circle(x, y, 5, color=(255, 255, 0), thickness=2)

## 运行效果
将硬件连接好后,上传代码到OpenMV开发板,并调整舵机参数和位置。运行代码后,你将看到舵机沿着目标矩形框移动,并在图像中标记出矩形框的位置和中心点。

## 结束语
通过本文的实现,我们成功搭建了一个运动目标控制与自动追踪系统。通过使用OpenMV开发板和舵机,我们能够在图像中识别目标,并控制舵机使其跟踪目标。

## 参考链接
1. OpenMV官方网站: https://openmv.io/
2. Pyb Servo文档: https://docs.openmv.io/library/pyb.Servo.html

欢迎大家提出宝贵的意见和建议,共同探讨学习和改进。谢谢阅读!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/829689.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用上 Spring 的事件机制

本文主要是简单的讲述了Spring的事件机制,基本概念,讲述了事件机制的三要素事件、事件发布、事件监听器。如何实现一个事件机制,应用的场景,搭配Async注解实现异步的操作等等。希望对大家有所帮助。 Spring的事件机制的基本概念 …

Windows驱动开发必备工具

Windows驱动开发必备工具 设备树文软件 可以查看设备信息 数字签名工具安装包 开发用的数字签名证书密钥 断点命中工具包(双机调试必备) 二进制文件解析工具 日志查看工具(必备) IRP查看工具 C驱动开发相关书籍 有需要工具、书籍…

零基础也能懂:用9个简单步骤解说Spring MVC运行流程!

大家好,我是小米!今天,我将带你深入探索 Spring MVC 的运行流程,让你对这个技术有更深刻的理解。无需担心,我会用简单易懂的语言,详细解释每个步骤,让你信心满满地迎接校招面试的挑战&#xff0…

安装金蝶云星空出错 T_META FORMENUMITEM

找不到对象"T_META FORMENUMITEM”,因为它不存在或者你没有所需的权限 解决方案 如果出现以下问题

闲人闲谈PS之四十五——锁表功能引发的“血案”

惯例闲话:这次不说闲话了,刚刚解决一个系统事故级别的问题,没被领导问责已经很幸运了。 分享下处理问题的过程 事件经过 和往常一样,早上闲人打开电脑第一件事情是打开SAP,查看系统日志,结果跳出来一大堆…

DP学习第六篇之下降路径最小和

DP学习第六篇之下降路径最小和 931. 下降路径最小和 - 力扣(LeetCode) 一.题目解析 二. 算法原理 状态表示 tips: 经验题目要求。以[i,j]位置为结尾,。。。 dp[i][j]: 到达[i, j]位置时,此时的最小下降路径和 状态转移方程 ti…

富文本粘贴图片改为图片上传的方式

代码 <template><div><el-upload:action"uploadUrl":before-upload"handleBeforeUpload":on-success"handleUploadSuccess":on-error"handleUploadError"name"file":show-file-list"false":heade…

RPC框架引入zookeeper服务注册与服务发现

Zookeeper概念及其作用 ZooKeeper是一个分布式的&#xff0c;开放源码的分布式应用程序协调服务&#xff0c;是Google的Chubby一个开源的实现&#xff0c;是大数据生态中的重要组件。它是集群的管理者&#xff0c;监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理…

海外ASO优化之如何提高应用的可见度和安装量

关键词的投放能够激励用户通过搜索查询找到我们的应用程序&#xff0c;安装它并在他们的设备上运行它。如果有足够的流量&#xff0c;应用程序在搜索中的某些关键词的排名将会提升&#xff0c;并且有助于提高我们应用程序的知名度和自然下载量。 1、选择正确的关键词来提升。 …

【韩顺平】JDBC

第一节 JDBC概述 1.1 JDBC原理图 Java不可能具体地去操作数据库&#xff0c;因为数据库有许多种&#xff0c;直接操作数据库是一种很低效且复杂的过程。 因此&#xff0c;Java引入JDBC&#xff0c;规定一套操作数据库的接口规范&#xff0c;从而要求数据库厂商去实现JDBC接口。…

金鸣识别将无表格线的图片转为excel的几个常用方案

我们知道&#xff0c;金鸣识别要将横竖线齐全的表格图片转为excel非常简单&#xff0c;但要是表格线不齐全甚至没有表格线的图片呢&#xff1f;这就没那么容易了&#xff0c;在识别这类图片时&#xff0c;我们一般会使用以下的一种或多种方法进行处理&#xff1a; 1. 基于布局…

04 Ubuntu中的中文输入法的安装

在Ubuntu22.04这种版本相对较高的系统中安装中文输入法&#xff0c;一般推荐使用fctix5&#xff0c;相比于其他的输入法&#xff0c;这款输入法的推荐词要好得多&#xff0c;而且不会像ibus一样莫名其妙地失灵。 首先感谢文章《滑动验证页面》&#xff0c;我是根据这篇文章的教…

网络安全--原型链污染

目录 1.什么是原型链污染 2.原型链三属性 1&#xff09;prototype 2)constructor 3)__proto__ 4&#xff09;原型链三属性之间关系 3.JavaScript原型链继承 1&#xff09;分析 2&#xff09;总结 3)运行结果 4.原型链污染简单实验 1&#xff09;实验一 2&#xff0…

matlab编程实践18、19

浅水方程 浅水方程可以建立起海啸和浴缸中波浪的数学模型。浅水方程建立了水或者其它不可压缩液体受扰动时传播的模型。隐含的假设是&#xff0c;液体的深度和波浪的长度、扰动等相比是很小的。 在这样的记号下&#xff0c;浅水方程为双曲守恒定律的一个例子。 使用拉克斯-冯特…

0基础学习VR全景平台篇 第77篇:全景相机-圆周率外接收音方案

一、相机外接收音准备工作 需要自行购买USB外置声卡&#xff0c;无线麦克风&#xff0c; Type-c的拓展器。 USB外置声卡 &#xff1a; 产品参数 品牌: HAGiBiS/海备思 名称: USB三合一声卡 接口:耳麦孔/耳机孔/麦克风孔 工作电流:≤38mA 工作电压: DV 5V 输入信噪比:≥90dB …

Facebook营销推广怎么做?有哪些技巧?

Facebook是使用人数比较多的一个社交软件,也是跨境电商的首要选择平台。要想做好Facebook宣传推广&#xff0c;做好以下步骤很重要。 一、基础设置 1.创建 Facebook 业务公共主页 这相当于商业版的Facebook个人资料。您可以添加自己的品牌名称&#xff0c;上传个人资料和封面…

K8s工作原理

K8s title: Kubernetes之初探 subtitle: K8s的工作原理 date: 2018-09-18 18:26:37K8s概述 我清晰地记得曾经读到过的一篇博文&#xff0c;上面是这样写的&#xff0c; “云端教父AWS云端架构策略副总裁Adrian Cockcroft曾指出&#xff0c;两者虽然都是运用容器技术&#xff0…

“窗口期”开启!多域融合大趋势下,中国智能汽车OS如何破局?

操作系统已经成为了各大车厂、互联网企业的必争之地。 过去几年&#xff0c;丰田、大众、奔驰等众多车企&#xff0c;以及阿里、百度、腾讯、华为等纷纷加大了操作系统的布局&#xff0c;智能汽车操作系统的抢位战已经火热开启。 汽车电子电气架构已经迈入了域集中式架构、多…

国产GOWIN实现低成本实现CSI MIPI转换DVP

CSI MIPI转换DVP&#xff0c;要么就是通用IC操作&#xff0c;如龙讯芯片和索尼芯片&#xff0c;但是复杂的寄存器控制器实在开发太累。对于FPGA操作&#xff0c;大部分都是用xilinx的方案&#xff0c;xilinx方案成本太高&#xff0c;IP复杂。 而用国产GOWIN已经实现了直接mipi …

工作日报怎么写?聪明灵犀工具能帮你

工作日报怎么写&#xff1f;在工作中每天写日报是必不可少的&#xff0c;日报不仅可以记录每天的工作内容&#xff0c;也可以帮助自己更好的规划下一步的工作任务。但是&#xff0c;如何写出一份好的日报呢&#xff1f;今天我们就来介绍一些工具&#xff0c;让你的写日报更加高…