由图可知 id 为5 旋转角度 为11.0

左边旋转 角度增加 正式时候调度接近0

右边旋转 角度减少 由360度 向右减少

Tx 在左边的时候 为负数 右边为正值

Ty 在上边的时候为正数 左边为负值

Tz 从远处 到近处 由负数到向正数变化

Rx :前倾斜 增加 后倾斜 减少

Rz :左侧转 增加 右侧转 减少

Ry :正右转 增加 正后转 减少

通过这个可以实现 3D 定位

例如: 小球的定位 跟物体的追踪 可以利用每个二维码独特的id 然后贴在物体上 不但可以辨识物体 也可以用来定位 可以确定一些舞台的具体位置 从而实线物体定位。

串口通信 用于与单片机之间的通信。

解答:

比如你测得的tx=0.00068,实际apriltag距离摄像头x方向80mm,那比例k就是80mm/tx

可是,那是不是x,y,z三个方向有三个k值呢 ?

d= 根号(x平方 + y平方 + z平方) K=实际距离/d

实现串口通信

# 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 json
import sensor, image, time, math
from pyb import UART
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()
uart = UART(3, 19200)
# 注意!与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.piwhile(True):clock.tick()img = sensor.snapshot()for tag in img.find_apriltags(fx=f_x, fy=f_y, cx=c_x, cy=c_y): # 默认为TAG36H11img.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)#uart.write(tag.x_translation())data_out = json.dumps(tag.x_translation())#time.sleep_ms(1000)print(data_out)uart.write(data_out)#print("Tx: %f",tag.x_translation())# print(clock.fps())
data_out = json.dumps(tag.x_translation())
#time.sleep_ms(1000)
print(data_out)
uart.write(data_out)

这段话需要将数据从函数提取出来,然后再进行发送,不然会报错

json.dumps()

json.dumps将一个Python数据结构转换为JSON

import json
data = {'name' : 'myname','age' : 100,
}
json_str = json.dumps(data)

json库的一些用法

结果运行:

openmv 自学笔记(APRILTAG标记追踪)相关推荐

  1. OpenMV自学笔记

    OpenMV自学笔记1 目的 学习OpenMV是为了准备农业机器人大赛,也是为了后续课题中使用图像处理.主要目的是:使用OpenMV识别到物体(色块),并将色块信息(位置.大小等)输出到arduino ...

  2. 2019电赛--OpenMV学习笔记

    此文章在我的博客链接:https://sublimerui.top/archives/f10b0e1a.html NOTES:2019电赛结束啦~辛辛苦苦4天后,现已经写成了针对题目的OpenMV总结 ...

  3. JAVA自学笔记24

    JAVA自学笔记24 1.能使用同步代码块就使用同步代码块,除非锁对象是this,就可以考虑使用同步方法.静态方法的锁是类的字节码对象. 2.JDK5新特性 1)接口Lock void Lock()/ ...

  4. JAVA自学笔记22

    JAVA自学笔记22 1.操作基本数据类型的流 DataInputStream DataOutputStream 数据输出流允许应用程序以适当方式将基本的Java数据类型写入输出流中.然后,应用程序可 ...

  5. JAVA自学笔记23

    JAVA自学笔记23 1.多线程 1)引入: 2)进程 是正在运行的程序.是系统进行资源分配和调用的独立单位.每一个进程都有它自己的内存空间和系统资源. 多进程: 单进程的计算机只能做一件事情,而现在 ...

  6. JavaWeb自学笔记(一)

    JavaWeb自学笔记(一) 学习视频:BV12J411M7Sj 文章目录 JavaWeb自学笔记(一) 1.基本概念 1.1 web应用程序 1.2 静态web 1.3 动态web 2.web服务器 ...

  7. C语言入门 —— 非科班大一学生的C语言自学笔记

    初入前端的北京某211大一非科班生(没错上学期还是日语生)的C语言自学笔记 本文约8k字,将介绍:编程基础 数据类型 表达式 语句与控制流 函数 数组,指针 结构体等会随着学习进度推进持续更新~ 学习 ...

  8. SpringMVC自学笔记

    SpringMVC自学笔记 视频:BV1aE41167Tu 官方文档:https://docs.spring.io/spring-framework/docs/current/reference/ht ...

  9. 计算机网络自学笔记004_Real(数据链路层002)

    计算机网络自学笔记004_Real(数据链路层002)(MAC地址.IP地址.ARP协议.交换机.虚拟局域网) 一.MAC地址.IP地址.ARP协议 (一)概述 MAC地址是以太网的MAC子层所使用的 ...

最新文章

  1. RBAC用户角色权限设计方案
  2. LeetCode Reverse Linked List II 反置链表2
  3. 阿里巴巴创新研究计划 AIR2018 正式发布 邀全球学者共创未来
  4. vSphere5.5安装教程
  5. HashMap和ConcurrentHashMap
  6. android 中文参数,(原)Android: 启动另外的APP及传递参数
  7. 设计师网站导航的好处
  8. linux 查看进程启动路径
  9. 第八章 拦截器机制——《跟我学Shiro》[张开涛]
  10. html5 回合制网页游戏,盘点史上最流行的十款回合制网页游戏
  11. knockoutjs总结
  12. Hadoop Shell总结
  13. python 多线程 假的_天啦噜!Python多线程居然是骗人的
  14. LIN总线开发:智能雨量传感器
  15. 给深度学习新手做项目的10个建议
  16. ROS到ROS2的多节点组合运行
  17. 牛逼!100多个常用 API 接口整理大全,常用的都有。。
  18. php redis操作详解
  19. 怎么去搭建聚合支付系统比较划算
  20. 从0到ros2玩rmf

热门文章

  1. 3阶贝塞尔曲线沿线长等距分割方法
  2. 服务器中毒怎么办,如何防御?
  3. Word 2003打不开Word 2000编辑的文件问题
  4. 【金融量化】通道突破策略之布林带策略(Bollinger Band )、肯特纳通道策略(Keltner Channel)、唐奇安通道策略(Donchian)原理简介
  5. 【寻找最佳小程序】10期:小小房贷计算器——快捷、易用,小白购房必备
  6. layui表格监听全选_layui表格(表单)的全选功能
  7. 史上最全Java容器集合技术
  8. 公布一经验,看开盘后半小时的趋势,可预测收盘的阴阳!(80%准确率)
  9. 技术大牛详解:Django框架之环境安装
  10. 分享百度快照不更新的解决技巧