openmv模板匹配+控制舵机来控制小车使P点触碰到靶心
(注:每行代码的解释均已标注,适合复习使用和openmv新手学习)
-
import sensor, time, image
-
from image import SEARCH_EX, SEARCH_DS
-
from pyb import UART
-
from pid import PID
-
from pyb import Servo
-
import ustruct
-
import json
定义舵机,servo(1)用的是openmv的p7引脚,servo(2)用的是openmv的p8引脚,servo(3)用的是openmv的p9引脚
pan_servo=Servo(1)#舵机1
设置对应的脉宽,分别对应为:允许的最小脉宽:500、允许的最大脉冲:2500、中心/零位置对应的脉宽:500
pan_servo.calibration(500,2500,500)
pid包的函数,设置舵机的pid参数,一般只需要调整p,如果云台抖动的很厉害(速度过快),可以将p调小
pan_pid = PID(p=0.07, i=0, imax=90)
接下来就是常规设置
-
# Reset sensor
-
sensor.reset()#c初始化摄像头
-
-
# Sensor settings
-
sensor.set_contrast(3)#设置对比度
-
sensor.set_gainceiling(16)#设置图像增益
-
sensor.set_framesize(sensor.QQVGA)#设置图像分辨率
-
sensor.set_windowing((320, 240))#将相机的分辨率设置为当前分辨率的子分辨率
-
sensor.set_pixformat(sensor.GRAYSCALE)#设置图像格式为灰度图
-
-
sensor.skip_frames(time = 2000)# 跳过2000s,使新设置生效,并自动调节白平衡
-
sensor.set_auto_gain(False, value=100)#关闭自动自动增益。默认开启的,在颜色识别中,一定要关闭白平衡。
-
-
clock = time.clock() # 追踪帧率
-
-
-
uart = UART(3, 115200)#初始化串口号及其波特率
设置给32传递数据的函数
-
def sending_data(cx,cy):
-
global uart;
-
#frame=[0x2C,18,cx%0xff,int(cx/0xff),cy%0xff,int(cy/0xff),0x5B];
-
#data = bytearray(frame)
-
data = ustruct.pack("<bbhhb", #格式为俩个字符俩个短整型(2字节)
-
0x2C, #帧头1
-
0x12, #帧头2
-
int(cx), # up sample by 4 #数据1
-
int(cy), # up sample by 4 #数据2
-
0x5B)
-
uart.write(data); #必须要传入一字节的数组,这个函数似乎不能发送单个字节,必须得一次发送多个字节
通过在IDE视图窗口的截图,保存目标模板,如进行多模板匹配则保存多个
-
templates2 = ["/2.1.pgm", "/2.2.pgm", "/2.3.pgm", "/2.4.pgm"] #保存多个模板
-
templates1 = ["/1.1.pgm", "/1.2.pgm", "/1.3.pgm", "/1.4.pgm"] #保存多个模板
-
templates4 = ["/2.1.pgm", "/2.2.pgm", "/2.3.pgm", "/2.4.pgm"] #保存多个模板
-
templates3 = ["/1.1.pgm", "/1.2.pgm", "/1.3.pgm", "/1.4.pgm"]
设置舵机转到的角度
-
pan_servo.angle(45)#可以直接设置舵机直接转到45度
-
#控制舵机的相关代码
-
#s1 = Servo(1) # 设置引脚
-
#s1.angle(45) # 转到45度
-
#s1.angle(-60, 1500) # 1.5s内转到-60度
-
#s1.speed(50) # 用于连续旋转舵机时的速度设置
最后就是小车的运行过程(根据比赛要求编写):
-
while (True):
-
clock.tick()
-
img = sensor.snapshot()# 从感光芯片获得一张图像
-
for t1 in templates1:
-
template1 = image.Image(t1)
-
#对每个模板遍历进行模板匹配
-
r1 = img.find_template(template1, 0.70, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60))
-
#find_template(template, threshold, [roi, step, search]),threshold中
-
#的0.7是相似度阈值,roi是进行匹配的区域(左上顶点为(10,0),长80宽60的矩形),
-
#注意roi的大小要比模板图片大,比frambuffer小。
-
#把匹配到的图像标记出来
-
if r1:
-
img.draw_rectangle(r1)
-
print(t1) #打印模板名字
-
#发送数据让小车转向靶子
-
sending_data(0,0)
-
break
-
for t2 in templates2:
-
template2 = image.Image(t2)
-
#对每个模板遍历进行模板匹配
-
r2 = img.find_template(template2, 0.70, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60))
-
#find_template(template, threshold, [roi, step, search]),threshold中
-
#的0.7是相似度阈值,roi是进行匹配的区域(左上顶点为(10,0),长80宽60的矩形),
-
#注意roi的大小要比模板图片大,比frambuffer小。
-
#把匹配到的图像标记出来
-
if r2:
-
img.draw_rectangle(r2)
-
print(t2) #打印模板名字
-
print('1,1')
-
sending_data(1,1)#发送信号小车STOP
-
pan_servo.angle(-45)
-
time.sleep_ms(5000)
-
sending_data(2,2)#发送信号小车倒车
-
time.sleep_ms(800)
-
break
-
for t3 in templates3:
-
template3 = image.Image(t3)
-
#对每个模板遍历进行模板匹配
-
r3 = img.find_template(template3, 0.70, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60))
-
#find_template(template, threshold, [roi, step, search]),threshold中
-
#的0.7是相似度阈值,roi是进行匹配的区域(左上顶点为(10,0),长80宽60的矩形),
-
#注意roi的大小要比模板图片大,比frambuffer小。
-
#把匹配到的图像标记出来
-
if r3:
-
img.draw_rectangle(r3)
-
print(t3) #打印模板名字
-
#发送数据让小车转向靶子
-
sending_data(3,3)
-
break
-
for t4 in templates4:
-
template4 = image.Image(t4)
-
#对每个模板遍历进行模板匹配
-
r4 = img.find_template(template4, 0.70, step=4, search=SEARCH_EX) #, roi=(10, 0, 60, 60))
-
#find_template(template, threshold, [roi, step, search]),threshold中
-
#的0.7是相似度阈值,roi是进行匹配的区域(左上顶点为(10,0),长80宽60的矩形),
-
#注意roi的大小要比模板图片大,比frambuffer小。
-
#把匹配到的图像标记出来
-
if r4:
-
img.draw_rectangle(r4)
-
print(t4) #打印模板名字
-
print('4,4')
-
sending_data(4,4)#发送信号小车STOP
-
break
-
#pan_servo.angle(-45)
-
#time.sleep_ms(5000)
-
#sending_data(2,2)#发送信号小车倒车
-
#time.sleep_ms(800)
-
# Draw FPS
-
#打印帧率。
-
img.draw_string(0, 0, "FPS:%.2f"%(clock.fps()))
-
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhhkjjgg
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
微信运动停用后别人还能看到步数吗
PHP中文网 07-22