首页 > 其他分享 >OPENMV——追踪AprilTags,并将位置信息传给单片机从而控制小车追AprilTags

OPENMV——追踪AprilTags,并将位置信息传给单片机从而控制小车追AprilTags

时间:2024-06-06 20:58:36浏览次数:20  
标签:默认值 img image 单片机 tag OpenMV sensor AprilTags OPENMV

# AprilTags Example
#
# This example shows the power of the OpenMV Cam to detect April Tags
# on the OpenMV Cam M7. The M4 versions cannot detect April Tags.

import sensor, image, time, math
from machine import UART
uart = UART(3, 115200)   #OpenMV RT 注释掉这一行,用下一行UART(1)
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QQVGA) # we run out of memory if the resolution is much bigger...
sensor.skip_frames(30)
sensor.set_auto_gain(False)  # must turn this off to prevent image washout...
sensor.set_auto_whitebal(False)  # must turn this off to prevent image washout...
clock = time.clock()

# 注意!与find_qrcodes不同,find_apriltags 不需要软件矫正畸变就可以工作。

# 注意,输出的姿态的单位是弧度,可以转换成角度,但是位置的单位是和你的大小有关,需要等比例换算

# f_x 是x的像素为单位的焦距。对于标准的OpenMV,应该等于2.8/3.984*656,这个值是用毫米为单位的焦距除以x方向的感光元件的长度,乘以x方向的感光元件的像素(OV7725)
# f_y 是y的像素为单位的焦距。对于标准的OpenMV,应该等于2.8/2.952*488,这个值是用毫米为单位的焦距除以y方向的感光元件的长度,乘以y方向的感光元件的像素(OV7725)

# c_x 是图像的x中心位置
# c_y 是图像的y中心位置

f_x = (2.8 / 3.984) * 160 # 默认值
f_y = (2.8 / 2.952) * 120 # 默认值
c_x = 160 * 0.5 # 默认值(image.w * 0.5)
c_y = 120 * 0.5 # 默认值(image.h * 0.5)

def degrees(radians):
    return (180 * radians) / math.pi

while(True):
    clock.tick()
    img = sensor.snapshot()
    for tag in img.find_apriltags(fx=f_x, fy=f_y, cx=c_x, cy=c_y): # 默认为TAG36H11
        img.draw_rectangle(tag.rect(), color = (255, 0, 0))
        img.draw_cross(tag.cx(), tag.cy(), color = (0, 255, 0))
        print_args = (tag.x_translation(), tag.y_translation(), tag.z_translation(), \
            degrees(tag.x_rotation()), degrees(tag.y_rotation()), degrees(tag.z_rotation()))
        # 位置的单位是未知的,旋转的单位是角度
        print("Tx: %f, Ty %f, Tz %f, Rx %f, Ry %f, Rz %f" % print_args)
        
        
        if tag.z_translation() > -3:
            uart.writechar(0x41)                     #发送停止
            time.sleep_ms(50)
            print("stop")
        
        else:
            if -1<tag.x_translation()<=1:
                uart.writechar(0x30)                     #发送前进
                time.sleep_ms(50)
                print("go")
            
            elif tag.x_translation()<=-1:
                uart.writechar(0x4C)                     #发送左转
                time.sleep_ms(50)
                print("left")
                
            elif 1<tag.x_translation():
                uart.writechar(0x31)                     #发送右转
                time.sleep_ms(50)
                print("right")        
                
                
            else:
                uart.writechar(0x41)                     #发送停止
                time.sleep_ms(50)    
                print("stop")      
        
    #print(clock.fps())

标签:默认值,img,image,单片机,tag,OpenMV,sensor,AprilTags,OPENMV
From: https://blog.csdn.net/2302_80529671/article/details/139509926

相关文章

  • 51单片机独立按键控制流水灯,按一次左流水,再按一次反向流水
    1、功能描述独立按键控制流水灯,按一次左流水,再按一次反向流水2、实验原理单片机的I/O口可以通过编程设置为输入或输出模式。在流水灯实验中,我们将I/O口配置为输出模式,用于控制LED灯的亮灭。同时,我们还需要一个输入口来检测按键的状态,以实现按键控制流水灯的功能。流水灯的效......
  • 51单片机独立按键控制LED灯,按键按一次亮,再按一次灭
    1、功能描述独立按键控制LED灯,按键按一次亮,再按一次灭2、实验原理轻触按键:相当于是一种电子开关,按下时开关接通,松开时开关断开,实现原理是通过轻触按键内部的金属弹片受力弹动米实现接通和断开;独立按键原理图如下:其在MCU上的位置如下所示:由上面两张图可以知道,独立按键......
  • 51单片机实现流水灯
    单片机的流水灯控制,无非就是控制led等的开通与关断,而开通与关断依照电路结构,就是某个引脚输入高低电平,比如说引脚P2.1控制led1灯的开通与关断,而引脚P2.2控制led2灯的开通与关断,那么交替闪烁,是不是就是流水灯了呢?我这里使用的是51单片机,用的软件是keil软件。具体代码如下:#i......
  • 基于51单片机的智能晾衣架设计资料
    第三章:硬件单元电路经过上述分析明确了本次设计的主要目标,为了实现晾衣自身能够完成对外界数据的采集与分析,集成控制环节我们采用了ATMEL公司生产的AT89C52单片机,与市面上的其他嵌入式控制单元相比较在体积与功耗方面都相当出色。此次设计主要突破在于设计合理的控制电路单元......
  • 单片机火灾报警器(防火系统)设计
    火灾作为一种在时空上失去控制的燃烧所引发的灾害,对人类生命财产和社会安全构成了极大的威胁。由此引发的重大安全事故比皆是,所以人类一直也未停止过对它的研究。火灾早已成为我国常发性和破坏性以及影响力最强的灾害之一。随着经济和城市建设的快速发展,城市高层、地下建筑以......
  • 基于单片机的脉搏测量仪毕业设计
    脉搏携带有丰富的人体健康状况的信息,自公元三世纪我国最早的脉学专著《脉经》问世以来,脉学理论得到不断的发展和提高。在中医四诊(望、闻、问、切)中,脉诊占有非常重要的位置。脉诊是我国传统医学中最具特色的一项诊断方法,其历史悠久,内容丰富,是中医“整体观念”、“辨证论证”的基......
  • 402、基于51单片机的火灾报警(3房间,温度,数码管)(程序+Proteus仿真+原理图+流程图+元器件
    毕设帮助、开题指导、技术解答(有偿)见文未目录方案选择单片机的选择一、设计功能二、Proteus仿真图单片机模块设计三、原理图四、程序源码资料包括:需要完整的资料可以点击下面的名片加下我,找我要资源压缩包的百度网盘下载地址及提取码。方案选择单片机的选择方......
  • 400、基于51单片机的电压表(1路,ADC0832,LCD1602)(程序+Proteus仿真+原理图+流程图+元器件
    毕设帮助、开题指导、技术解答(有偿)见文未目录方案选择单片机的选择显示器选择方案一、设计功能二、Proteus仿真图单片机模块设计三、原理图四、程序源码资料包括:需要完整的资料可以点击下面的名片加下我,找我要资源压缩包的百度网盘下载地址及提取码。方案选择......
  • 80C51单片机-LED流水灯效果(汇编版)
    8051单片机跑马灯实验:LED流水灯效果本文将介绍一个基于8051单片机的跑马灯实验,通过编写汇编代码实现LED流水灯效果。这个实验将使用8051单片机的P2口来控制8个LED灯,实现流水灯效果。实验准备8051单片机8个LED灯8PIN排线JP11(P2)和J12(LED灯)连接将JP11(P2)和J12(LED灯)使用8PIN排......
  • 80C51单片机-LED流水灯效果
    8051单片机跑马灯实验:LED流水灯效果本文将介绍一个基于8051单片机的跑马灯实验,通过编写代码实现LED流水灯效果。这个实验将使用8051单片机的P2口来控制8个LED灯,实现流水灯效果。实验准备8051单片机8个LED灯8PIN排线JP11(P2)和J12(LED灯)连接将JP11(P2)和J12(LED灯)使用8PIN排线连......