Openmv学习day2——AprilTag

2023-05-16

仅作为个人学习,原文地址:链接: link.

AprilTag的简介

在这里插入图片描述

AprilTag是一个视觉基准系统,可用于各种任务,包括AR,机器人和相机校准。这个tag可以直接用打印机打印出来,而AprilTag检测程序可以计算相对于相机的精确3D位置方向id

AprilTag的种类

AprilTag的种类叫家族(family),有下面的几种:

TAG16H5 → 0 to 29
TAG25H7 → 0 to 241
TAG25H9 → 0 to 34
TAG36H10 → 0 to 2319
TAG36H11 → 0 to 586
ARTOOLKIT → 0 to 511
也就是说TAG16H5的家族(family)有30个,每一个都有对应的id,从0~29。
那么不同的家族,有什么区别呢?

比如说TAG16H5的有效区域是4 x 4的方块,那么它比TAG36H11看的更远(因为他有6 x 6个方块)。但是TAG16H5的错误率比TAG36H11高很多,因为TAG36H11的校验信息多,所以,如果没有别的理由,推荐用TAG36H11

AprilTag基础使用代码

# 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

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

while(True):
    clock.tick()
    img = sensor.snapshot()
    for tag in img.find_apriltags(): # defaults to TAG36H11 without "families".
        img.draw_rectangle(tag.rect(), color = (255, 0, 0))
        img.draw_cross(tag.cx(), tag.cy(), color = (0, 255, 0))
        degress = 180 * tag.rotation() / math.pi     #弧度转化为角度
        print(tag.id(),degress)

3D定位

AprilTag最神奇的是3D定位的功能,它可以得知Tag的空间位置,一共有6个自由度,三个位置,三个角度。

# 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

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)
    print(clock.fps())

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Openmv学习day2——AprilTag 的相关文章

  • day2

    malevolent m l v l nt adj 恶毒的 xff1b 心肠坏的 male volent male坏的 43 vol意愿 43 ent 形容词后缀 有坏的意愿 adj 恶毒的 xff1b 心肠坏的 benediction b
  • openmv是双串口

    openmv是双串口
  • openmv与其他单片双向串口通信

    Openmv与其他单片双向串口通信 目的 为了让openmv进行阈值切换或者只运行某一部分代码 xff0c 因此需要openmv与其他单片建立双向通信进行更改内部参数 起因 openmv自带接收函数uart read 进行接收 xff0c
  • Openmv+STM32F103C8T6视觉巡线小车

    Openmv巡线 机器视觉巡线处理是参考openmv官方代码 Openmv官网源代码 xff1a book openmv cc project follow lines html 根据官网视频及教程将源码注入openmv中 小车巡的是黑线
  • Apriltag生成

    Apriltag生成 一 单个Apriltag生成 生成单个的二维码 xff0c 下面给出30cmx30cm打印大小的生成脚本 xff0c 输入路径直接用 apriltag imgs 工程的tag36h11系列的图片即可 生成结果得到587
  • 2021电赛F题之openmv巡线(附代码)

    效果展示 xff1a 出错解决方法 openmv数字识别源代码 gitee 通过使用不同阈值的方法可以得到当前区域中什么区域有红线 xff0c 对于电控而言作用类似于红外对管 xff0c 之后电控通过逻辑判断如何运动 xff0c 这就是我们
  • 蓝牙 舵狗 openmv通信相关

    总的思路是以openmv 接收蓝牙的指令 xff0c 如果是自动选项 xff0c 就在openmv 运行识别红球进行固定距离跟踪的程序 xff1b 如果是手动选项 xff0c openmv就直接把所得到的数据传给STM xff13 xff1
  • OPENMV配置记录(一)

    文章目录 1 刷写固件2 开始配置openmv3 图像获取与显示4 修改图像 xff0c 获取像素 xff0c 添加元素5 使用图像进行基本操作 颜色追踪6 xff0c 识别码7 模版匹配8 通过比例的方法来求解距离9 组合使用 正好回家带
  • OPENMV巡线

    将openmv图片划分成三个ROI区域 import sensor image time lcd from pyb import UART from pyb import LED ROIS 61 0 0 160 40 0 6 0 40 16
  • OpenMV:20追踪其他物体的云台

    文章目录 追踪人脸的云台追踪AprilTags的云台追踪圆形的云台 和追踪小车的原理是一样的 首先获得目标物体的x y坐标 xff0c 然后通过目标物体的xy坐标来控制我们云台的两个舵机的pid运动 无论追踪什么物体 xff0c 都是通过物
  • 【DIY】基于OpenMV的STM32追球小车

    目录 xff1a 总体设计1 基础硬件DIY设计1 xff09 整体原理图2 xff09 PCB电路 2 OpenMV简单识别程序设计 与 STM32控制程序设计1 xff09 OpenMV简单识别程序设计 microPython 2 xf
  • 【openmv专题】串口通信

    这篇文章主要讲述openmv串口通信过程中会出现错位 xff0c 因缓存空间不足带来的串口报错问题 xff0c 直接进入正题 xff1a 串口通信有同步和异步之分 xff0c 而openmv用的是异步通信 xff0c 需要有缓存区 xff0
  • 【OpenMV小车——第1.2篇】OpenMV主控板的简介与入门使用

    前言 xff1a 视觉小车最重要的是视觉功能 xff0c 其实现方式主要有 xff1a Opencv 43 外置计算机摄像头 需要计算机作为上位机 Stm32 43 OV7670 较难 xff0c 大师级 OpenMV摄像头 较简单 xff
  • openmv 自学笔记(APRILTAG标记追踪)

    由图可知 id 为5 旋转角度 为11 0 左边旋转 角度增加 正式时候调度接近0 右边旋转 角度减少 由360度 向右减少 Tx 在左边的时候 为负数 右边为正值 Ty 在上边的时候为正数 左边为负值 Tz 从远处 到近处 由负数到向正数
  • OpenMV——色块识别

    OpenMV有很多示例代码 xff0c 下面是我学习过程中有关知识的总结 目录 前言 一 阈值选择 二 代码 前言 函数RGB 255 0 0 表示的是红色 RGB 255 0 0 含义 xff1a 红色值 Red 61 255 xff1b
  • 通过openmv生成apriltag标签

    Apriltag官网提供的tag图片分辨率很低 xff0c 完全无法使用 xff0c 通过openmv生成apriltag标签 生成方法如下 xff1a openmv IDE的下载与安装 openmv官方提供了各种版本的IDE xff0c
  • 代码随想录day2 leetcode977,209,59,54

    977 有序数组的平方 class Solution public vector lt int gt sortedSquares vector lt int gt amp nums vector lt int gt res nums siz
  • OpenMV:21控制多个舵机(需要模块PCA9685)

    文章目录 连接代码控制单个舵机的旋转pc8596 pyservo pymain py利用两个舵机拓展板控制16个舵机 今天我们来学习下 OpenMV的舵机拓展板来控制多个舵机同时使用 如果我们想控制三个以上的舵机 xff0c 就需要用到舵机
  • 通过Python调用OpenMV识别小球获取坐标

    OPenMV介绍 OpenMV是基于Python的嵌入式机器视觉模块 xff0c 目标是成为机器视觉界的 Arduino 它成本低易拓展 xff0c 开发环境友好 xff0c 除了用于图像处理外 xff0c 还可以用Python调用其硬件资
  • OpenMv测距(Apriltag)

    利用OpenMv测离Apriltag的距离 xff08 其他色块啥的算法都差不多 xff0c 主要是Apriltag精确一些 xff09 span class token comment 本次利用OpenMv单目测距Apriltag离摄像头

随机推荐

  • 1.语音增强技术概述

    一 语音增强发展历史 1987年 xff1a Lim和Oppenheim发表语音增强的维纳滤波方法 xff1b 1987年 xff1a Boll发表谱减法 xff1b 1980年 xff1a Maulay和Malpass提出软判决噪声一直方
  • PCB软件对比分析(AD、Pads、Allegro)

    文章目录 前言一 国内的EDA软件市场二 Altium三 Mentor四 Candence总结 前言 今天来说一说国内用的最多的三款PCB软件对比 一 国内的EDA软件市场 国内的EDA软件几乎被三家瓜分 1 Altium 2 Canden
  • (二)立创EDA之新建工程,原理图,PCB

    文章目录 前言一 界面介绍二 工程广场介绍三 新建工程3 1 修改图纸属性 四 基本的操作介绍4 1 添加器件4 2 连接导线4 3 添加插针4 4 查看封装4 5 修改封装 五 原理图转PCB5 1设置PCB高亮显示元器件5 2 布局传递
  • stm32mp157 wm8960音频驱动调试笔记

    这次调试wm8960音频驱动遇到了好多的坑 xff0c 研究好几天终于调试好了 驱动调试步骤 驱动能不能成功加载是调试的第一大步骤 xff0c 也是最关键的步骤之一 1 查看硬件原理图 2 打开对应的设备树 xff08 stm32mp157
  • ROS发布者(Publisher)和订阅者(Subscriber)的python编程实现(讲解超级详细)

    有时候想想 xff0c 国内有些资源确实比较稀缺 xff0c 但是我们一样不会落后 xff01 学习python和ROS这么久了 xff0c 一直很少去实战 xff0c 另外看到基于python编程的ROS话题通信教程实在是稀缺了 xff0
  • C#工控上位机——框架

    C 工控上位机 第一部分 xff1a UI模块 先点击一下Panel xff0c 在点击一下屏幕 先选中Panel xff0c 在进行属性设置 图标连接 嵌入式窗体 设置按键的事件 using
  • docker镜像启动es/kibana

    下载镜像elasticsearch docker search elasticsearch docker pull elasticsearch 启动镜像 docker run name my elasticsearch p 9200 920
  • 虚拟串口的使用

    虚拟串口的使用
  • 修改闭包内使用的外部变量

    修改闭包内使用的外部变量的错误示例 定义一个外部函数 def func out num1 定义一个内部函数 def func inner num2 这里本意想要修改外部num1的值 xff0c 实际上是在内部函数定义了一个局部变量num1
  • 嵌入式软件面试题

    CSDN的小伙伴们 xff0c 我是林君 今天给小伙伴们分享一些嵌入式软件开发工程师的校招面试题 企业校招对基础考察较多 其次 xff0c 在校参加的相关比赛 xff0c 项目经历 我在生病前 xff0c 面试了一周 xff0c 收到八九个
  • 嵌入式软件工程师技术等级

    1 初级 xff1a 8051或其他单片机 xff0c UCOS xff0c I C xff0c SPI xff0c UART 汇编和C语言能力一般 xff0c 系统集成能力弱 2 中级 xff1a 在初级的基础上 xff0c ARM MI
  • FreeRTOS之动态方法任务创建和删除实验

    一 实验设计 start task xff1a 用来创建其他两个任务 task1 task 当此任务运行5次就调用vTaskDelete 删除任务task2 task task2 task 此任务为普通的应用任务 一 宏定义 任务优先级 d
  • 人工智能研究主要有哪三大学派,其特点是什么?

    人工智能研究主要有哪三大学派 xff0c 其特点是什么 xff1f xff08 1 xff09 符号主义 xff1a 又称为功能模拟学派 xff0c 主要观点认为智能活动的基础是物理符号系统 xff0c 思维过程是符号模式的处理过程 其特点
  • FreeRTOS入门

    目录 一 任务要求二 FreeRTOS移植1 简介2 参考教程3 多任务程序管理实现4 执行结果 三 总结 一 任务要求 在STM32下完成一个基于FreeRTOS的多任务程序 xff0c 执行3个周期性task xff0c 具体任务不限
  • 2021年全国大学生电子设计大赛F题——智能送药小车,全方位解决方案+程序代码(详细注释)山东赛区国奖

    目录 1 赛题及硬件方案分析 xff1a 2 用到的主要器件清单 xff1a 3 各部分思路及代码实现 1 小车舵机 马达驱动 2 蓝牙通信 3 单片机与OpenMV的串口通信 4 单片机与OpenMV的通信协议 5 单片机main文件中的
  • C++学习小记之代码重用问题(1)

    C 43 43 Primer Plus第六版第14章程序清单14 2给的示例代码中有以下两段代码 xff1a double amp Student operator int i return scores i double Student
  • 出现“ ‘xxx‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。”的一个解决方法

    XXX 不是内部或外部命令 xff0c 也不是可运行的程序或批处理文件 前提是已经安装成功某一个插件 有时候 xff0c 我们想用cmd xff08 以管理员身份运行 xff09 执行命令的时候 xff0c 总会出现 XXX 不是内部或外部
  • RK算法分析

    这一节介绍一下由Rabin和Karp提出的RK算法 1 xff0c RK算法的基本思想 HASH xff01 如果两个字符串hash后的值不相同 xff0c 则它们肯定不相同 xff1b 如果它们hash后的值相同 xff0c 它们不一定相
  • Xilinx ZYNQ FreeRTOS+Tracealyzer(移植)

    PL端配置 使用ZYNQ IP Core 打开串口 网口等所需接口 新手注意 xff1a 需要生成bit文件后 xff0c 并输出相应硬件平台 xff0c 网上教程很多 xff0c 请参考其它教程 PS端配置 1 创建任务 xff0c 注意
  • Openmv学习day2——AprilTag

    仅作为个人学习 xff0c 原文地址 xff1a 链接 link AprilTag的简介 AprilTag是一个视觉基准系统 xff0c 可用于各种任务 xff0c 包括AR xff0c 机器人和相机校准 这个tag可以直接用打印机打印出来