网站策划与网上营销,官网建设需要多少钱,东莞最新网站建设软件,17.zwd一起做网站本方案的思路是最简单的不涉及复杂算法#xff1a;识别矩形框#xff0c;标记矩形框#xff0c;输出坐标和中心点#xff0c;计算长度#xff0c;控制舵机移动固定长度#xff01;仅供完成基础功能参考#xff0c;不喜勿喷#xff01;
# 实现运动目标控制与自动追踪系…本方案的思路是最简单的不涉及复杂算法识别矩形框标记矩形框输出坐标和中心点计算长度控制舵机移动固定长度仅供完成基础功能参考不喜勿喷
# 实现运动目标控制与自动追踪系统
## 任务概述 本文将介绍如何使用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(time2000)# 其他代码...## 目标检测与跟踪目标检测部分代码实测过 ### 寻找矩形函数 为了在图像中识别目标矩形框我们需要编写一个寻找矩形函数。该函数将返回第二大的矩形区域以便我们可以找到目标的位置。
# 寻找矩形函数返回第二大的矩形区域
def find_second_largest_rectangle(blobs):max_area 0max_blob Nonesecond_max_area 0second_max_blob Nonefor blob in blobs:area blob.area()if area max_area:second_max_area max_areasecond_max_blob max_blobmax_area areamax_blob blobelif area second_max_area:second_max_area areasecond_max_blob blobreturn second_max_blob## 主循环 在主循环中我们将不断获取图像并进行目标检测和跟踪。
while True:img sensor.snapshot() # 获取图像blobs img.find_blobs([black_threshold], pixels_threshold200, area_threshold200)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), thickness4) # 绘制第二大的矩形框颜色为红色# 其他代码...## 舵机控制 为了实现目标跟踪我们需要控制舵机使其沿着矩形框移动一圈并回到中心点。这里我们使用了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), thickness2)## 运行效果 将硬件连接好后上传代码到OpenMV开发板并调整舵机参数和位置。运行代码后你将看到舵机沿着目标矩形框移动并在图像中标记出矩形框的位置和中心点。 ## 结束语 通过本文的实现我们成功搭建了一个运动目标控制与自动追踪系统。通过使用OpenMV开发板和舵机我们能够在图像中识别目标并控制舵机使其跟踪目标。
## 参考链接 1. OpenMV官方网站: https://openmv.io/ 2. Pyb Servo文档: https://docs.openmv.io/library/pyb.Servo.html
欢迎大家提出宝贵的意见和建议共同探讨学习和改进。谢谢阅读