openmv利用模板匹配+控制舵机来控制小车使P点触碰到靶心

这篇具有很好参考价值的文章主要介绍了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) # 用于连续旋转舵机时的速度设置

最后就是小车的运行过程(根据比赛要求编写):文章来源地址https://www.toymoban.com/news/detail-629202.html

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()))
​

到了这里,关于openmv利用模板匹配+控制舵机来控制小车使P点触碰到靶心的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 二轮平衡小车1:舵机与电机的基本控制

    今日开始使用STM32F103 C8T6尝试做一个二轮平衡小车,从电机舵机控制开始,小车也是在三个小时的自主设计下框架结构与引脚安排都做好了。 本文主要贴代码,之前的文章都有原理,代码中相应初始化驱动部分也有注释~~ 文章提供源码,解释以及工程下载,测试效果视频。

    2024年02月10日
    浏览(42)
  • STC89C52 小车-舵机转向/蓝牙控制/寻迹,有PCB有讲解,更新

    推荐单片机:STC89C52或51(尽量52 还有提供 可用于测试直接烧录的89单片机文件(hex),不需要重新编译 。 还是老话: 源代码可以直接编译通过。 本人是自学,原创内容--转载请务必说明!! 所有下载在文章结尾(包全代码,附件) 代码:为个人gitHub库,无法或不会下载的可以评论

    2024年02月02日
    浏览(42)
  • OpenMV:14巡线小车

    这个例子展示了在OpenMV Cam上使用get_regression()方法获得ROI的线性回归。使用这种方法,可以轻松让机器人跟踪所有指向相同大致方向的线。 本例程可以用于机器人巡线,效果非常好。 “巡线小车”的原理和“追小球的小车”是差不多一样的,其中car.py和pid.py完全一样,改

    2024年02月17日
    浏览(38)
  • 51智能小车(舵机、超声波、蓝牙)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 本项目实现超声波舵机自动避障,手机连接蓝牙控制小车运动、调速两个功能并实现两个功能的切换。 整体思路: 1.T1作为串口的波特率发生器,串口连接HC06蓝牙模块(从机)与手机连接,手机发送数

    2024年02月03日
    浏览(50)
  • 基于STM32的智能小车--舵机云台设计

    第一章 基于STM32的智能小车方案设计 第二章 基于STM32的智能小车–电机驱动设计 第三章 基于STM32的智能小车–循迹设计 第四章 基于STM32的智能小车–避障设计

    2024年02月14日
    浏览(41)
  • STM32循迹小车系列教程(四)—— 使用OpenMV循迹

     本章节主要讲解如何使用OpenMV循迹以及OpenMV与STM32串口通信 软件:STM32CubeMx、Keil5 MDK、串口调试助手XCOM、OpenMV_IDE 硬件:OpenMV、STM32F103C8T6核心板、下载器ST_LINK、USB转TTL或J-LINK、小车一辆 OpenMV是一个开源,功能强大的 机器视觉 模块。 它以STM32F427CPU为核心,集成了OV7725摄像头

    2024年02月04日
    浏览(111)
  • Openmv+STM32F103C8T6视觉巡线小车

    机器视觉巡线处理是参考openmv官方代码 Openmv官网源代码:book. openmv.cc/project/follow-lines.html 根据官网视频及教程将源码注入openmv中。 小车巡的是黑线,所以颜色阈值要更改。 在文件示例中打开helloworld.py。 打开工具/机器视觉/阈值编辑器/缓冲区。 将我们需要寻迹的黑线调至全

    2023年04月09日
    浏览(59)
  • 电赛智能送药小车_OpenMV巡线&识别十字路口完整代码

      整体思路 :通过划分ROI区域分区进行识别,中央 ROI 区域为巡线,左右两侧的 ROI_L 和 ROI_R 为十字路口识别 . 主程序如下 : # 本文代码中所导入的pid.py就是OpenMV官网上例程的代码 需要完整源码请私信我。

    2024年02月12日
    浏览(59)
  • 一起玩儿物联网人工智能小车(ESP32)——26. 舵机的使用方法

    摘要:本文介绍舵机的使用方法 在前面介绍TT马达的时候,提到过舵机。舵机是一种精密控制类电动机,也是电动机的一种,它的主要作用是旋转到某一指定位置,在机器人领域使用得相当的广泛,用来实现各种机械臂和机器人关节的运动。 下面就来了解一下舵机的工作原理

    2024年02月21日
    浏览(59)
  • Openmv第五天之特征点匹配和测距

    回顾昨日,昨天的模板匹配方法,我认为他给人的优点就是很简单,你只需要传入模板就可以找到和模板 几乎一样的 目标,但是这几乎一样导致了他的局限性,那么就是你稍微大一点或者小一点,亦或是角度不对就会导致你识别不成功,但有个有趣的事情,昨天看了一个人

    2024年02月13日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包