记录电赛色块追踪部分

代码其实也很简单,我只不过加入了按键控制暂停、蜂鸣器、led和如何控制追踪的效果(调PID)。B站的那些大神早早地完成了要求,我犯了一个不好地错误,企图三连让他们分享思路,这是不对的,电赛本身的意义是让我们提高自己对问题的解决能力、时间管理等,是一项紧急情况下的应对能力,考验我们的综合能力、团队合作能力。

import sensor, image, time,pyb
from pyb import Pin
from pid import PID
from pyb import Servo			#调用库
from pyb import LEDpan_servo=Servo(1)  #p7
tilt_servo=Servo(2)	#p8			#红色色素块
#red_threshold  = (79, 99, -1, 28, 3, 12) #  (79, 99, -1, 28, 3, 12) ((78, 100, -4, 20, -13, 4)) (72, 85, 18, 100, -3, 16)
red_threshold= [(0, 98, 37, 127, -32, 89)]#pan_pid = PID(p=0.05,i=0.03,d=0.001 imax=90) #脱机运行或者禁用图像传输,使用这个PID
#tilt_pid = PID(p=0.05,i=0.05, imax=90) #脱机运行或者禁用图像传输,使用这个PIDpan_pid = PID(p=0.06,d=0.001,i=0.02, imax=100)#在线调试使用这个PID
tilt_pid = PID(p=0.11,d=0.001,i=0.04, imax=100)#在线调试使用这个PID#由于openmv脱机运行帧率会提高,运行性能会有所改变,所以需要设置“在线联机调试”和“脱机运行”的两个参数sensor.reset() # Initialize the camera sensor.
sensor.set_pixformat(sensor.RGB565) # use RGB565.
sensor.set_framesize(sensor.QVGA) # use QQVGA for speed.
sensor.skip_frames(10) # Let new settings take affect.
sensor.set_auto_gain(False) # 颜色跟踪必须关闭自动增益
sensor.set_auto_whitebal(False) # turn this off.
EXPOSURE_TIME_SCALE = 2.0
#画面翻转
sensor.set_vflip(True)
#sensor.set_hmirror (True)
clock = time.clock() # Tracks FPS.	#基本参数设置def find_max(blobs):max_size=0for blob in blobs:if blob[2]*blob[3] > max_size:max_blob=blobmax_size = blob[2]*blob[3]return max_blob											#找到视野中的最大色素块#初始角度
#pan_servo.angle(35)#openmv上P7为控制云台上舵机的输出引脚(摄像头上下移动)
#tilt_servo.angle(5)         #物理意义的90度pan_servo.angle(0) #openmv上P7为控制云台上舵机的输出引脚(摄像头上下移动)
tilt_servo.angle(5) #物理意义的90度#绿色激光与镜头的x,y距离误差补偿,后来发现用不上,调一下激光笔就好了
#shang_error=160-148
#xia_error=120-100global  pan_output, tilt_output,flag#P1蜂鸣器
buzzer_pin = pyb.Pin("P1", pyb.Pin.OUT)#P2:led
led = pyb.LED(2)#P3:按键
pin1 = Pin('P3', Pin.IN, Pin.PULL_UP)flag = 1while(True):clock.tick() # Track elapsed milliseconds between snapshots().img = sensor.snapshot() # Take a picture and return the image.img.draw_cross(int(img.width()/2),int(img.height()/2),color=(0,0,255),size =5, thickness = 1)#img.draw_cross(148,100,color=(0,255,0),size =4, thickness = 1)buzzer_pin.high()key0 = pin1.value()      ##按键控制blobs = img.find_blobs(red_threshold)					if blobs:max_blob = find_max(blobs)#pan_error = img.width()/2-max_blob.cx()				#	x横轴方向上的修正参数#tilt_error = img.height()/2-max_blob.cy()			   	#	y纵轴方向上的修正参数#print("img.height()/2",img.height()/2)pan_error =  -(img.width()/2-max_blob.cx())    #	x横轴方向上的修正参数tilt_error = -(img.height()/2-max_blob.cy())   #	y纵轴方向上的修正参数#if(pan_error > -100)#pan_error =  -(74-max_blob.cx())    #x横轴方向上的修正参数#tilt_error = -(50-max_blob.cy())   #y纵轴方向上的修正参数print("x_error: ", pan_error) #在参数调试窗口打印色块中心坐标与视野中心坐标的偏离值,便于调试与修正print("y_error:",  tilt_error)img.draw_rectangle(max_blob.rect()) # rect	#在色块外围四周处画框img.draw_cross(max_blob.cx(), max_blob.cy()) # cx, cy     #色块中心坐标处画十字pan_output=pan_pid.get_pid(pan_error,1)/2tilt_output=tilt_pid.get_pid(tilt_error,1)/2#print("pan_output",pan_output)		  	     #在参数调试窗口打印坐标值,便于调试与修正#print("tilt_output",tilt_output)if key0 == 1 :#pid控制pan_servo.angle(pan_servo.angle() + pan_output)tilt_servo.angle(tilt_servo.angle() - tilt_output)if -8<pan_error <8 and -9< tilt_error < 9:buzzer_pin.low()   # 发声print("succes")#pan_servo.angle(pan_servo.angle())#tilt_servo.angle(tilt_servo.angle()flag=0time.sleep(0.5)if key0 == 0 and flag ==0:time.sleep(0.5)buzzer_pin.high()  # 发出声音print("按键按下")#pan_output =0#tilt_output =0pan_servo.angle(pan_servo.angle())tilt_servo.angle(tilt_servo.angle())#flag==0#没有色块,复位# else:#pan_servo.angle(10)#tilt_servo.angle(6)

此次电赛,我主要负责的是色块追踪部分,在官方给出的代码基础上加以修改以符合电赛的要求,经过测试其精度达不到要求,即误差大于3cm。一方面是算法的原因,没有深究其原理,做到如何精准识别;另一方面是硬件本身的问题,一个好的硬件往往可以帮助我们节约大量的工作和时间。

比赛时现场作品制作图

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

无人机巢的作用及应用领域解析

无人机巢作为无人机领域的创新设备&#xff0c;不仅可以实现无人机的自主充电和电池交换&#xff0c;还为无人机提供安全便捷的存放空间。为了帮助大家更好地了解无人机巢&#xff0c;本文将着重解析无人机巢的作用和应用领域。 一、无人机巢的作用 无人机巢作为无人机技术的重…

读发布!设计与部署稳定的分布式系统(第2版)笔记28_控制层上

1. 控制层囊括所有在后台运行的成功处理生产负载的软件和服务 1.1. 处理用户生产数据的那些软件&#xff0c;就是生产软件 1.2. 主要工作是管理其他软件的软件&#xff0c;就是控制层 1.3. 工具和问题之间存在着重叠和空白&#xff0c;并不是每个工具组合都能协同工作&#…

yxBUG记录

1、 原因&#xff1a;前端参数method方法名写错。 2、Field ‘REC_ID‘ doesn‘t have a default value 问题是id的生成问题。 项目的表不是自增。项目有封装好的方法。调用方法即可。 params.put("rec_id",getSequence("表名")) 3、sql语句有问题 检…

MySql之慢Sql定位分析

MySql之慢Sql定位分析 定位低效率执行SQL 可以通过以下两种方式定位执行效率较低的SQL语句。 慢查询日志:通过慢查询日志定位那些执行效率较低的SQL语句,用- log-slow-queries[ file name]选项启动时, mysqld是一个包含所有执行时间超过 long_query_time秒的sql请句的日志文…

常用SQL语句总结

SQL语句 文章目录 SQL语句1 SQL语句简介2 DQL&#xff08;数据查询语句&#xff09;3 DML&#xff08;数据操纵语句&#xff09;4 DDL&#xff08;数据定义语句&#xff09;5 DCL&#xff08;数据控制语句&#xff09;6 TCL&#xff08;事务控制语句&#xff09; 1 SQL语句简介…

备战秋招 | 笔试强训24

目录 一、选择题 二、编程题 三、选择题题解 四、编程题题解 一、选择题 1、请指出选择排序&#xff0c;冒泡排序&#xff0c;快速排序的时间复杂度分别是&#xff08;&#xff09; A. O(n^2)、O(n^2)、O(n*log2n) B. O(n*log2n)、、O(n^2)、O(n*log2n&#xff09; C. O(n…

scanf函数读取数据 清空缓冲区

scanf函数读取数据&清空缓冲区 scanf 从输入缓冲区读取数据数据的接收数据存入缓冲区scanf 中%d读取数据scanf中%c读取数据 清空输入缓冲区例子用getchar()吸收回车练习 scanf 从输入缓冲区读取数据 首先&#xff0c;要清楚的是&#xff0c;scanf在读取数据的时候&#xff…

uniapp:图片验证码检验问题处理

图形验证码功能实现 uniapp&#xff1a;解决图形验证码问题及利用arraybuffer二进制转base64格式图片&#xff08;后端传的图片数据形式&#xff1a;x00\x10JFIF\x00\x01\x02\x00…&#xff09;_❆VE❆的博客-CSDN博客 UI稿&#xff1a; 需求&#xff1a;向后端请求验证码图片&…

HttpServletRequest和HttpServletResponse的获取与使用

相关笔记&#xff1a;【JavaWeb之Servlet】 文章目录 1、Servlet复习2、HttpServletRequest的使用3、HttpServletResponse的使用4、获取HttpServletRequest和HttpServletResponse 1、Servlet复习 Servlet是JavaWeb的三大组件之一&#xff1a; ServletFilter 过滤器Listener 监…

深度学习(35)—— StarGAN(2)

深度学习&#xff08;34&#xff09;—— StarGAN&#xff08;2&#xff09; 完整项目在这里&#xff1a;欢迎造访 文章目录 深度学习&#xff08;34&#xff09;—— StarGAN&#xff08;2&#xff09;1. build model&#xff08;1&#xff09;generator&#xff08;2&#…

react中hooks的理解与使用

一、作用 我们知道react组件有两种写法一种是类组件&#xff0c;另一种是函数组件。而函数组件是无状态组件&#xff0c;如果我们要想改变组件中的状态就无法实现了。为此&#xff0c;在react16.8版本后官方推出hooks&#xff0c;用于函数组件更改状态。 二、常用API 1、use…

解决运行flutter doctor --android-licenses时报错

问题描述&#xff1a; 配置flutter环境时&#xff0c;会使用flutter doctor命令来检查运行flutter的相关依赖是否配好。能看到还差 Android license status unknown.未解决。 C:\Users\ipkiss.wu>flutter doctor Flutter assets will be downloaded from https://storage.…