openmv 自学笔记(APRILTAG标记追踪)
由图可知 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标记追踪)相关推荐
- OpenMV自学笔记
OpenMV自学笔记1 目的 学习OpenMV是为了准备农业机器人大赛,也是为了后续课题中使用图像处理.主要目的是:使用OpenMV识别到物体(色块),并将色块信息(位置.大小等)输出到arduino ...
- 2019电赛--OpenMV学习笔记
此文章在我的博客链接:https://sublimerui.top/archives/f10b0e1a.html NOTES:2019电赛结束啦~辛辛苦苦4天后,现已经写成了针对题目的OpenMV总结 ...
- JAVA自学笔记24
JAVA自学笔记24 1.能使用同步代码块就使用同步代码块,除非锁对象是this,就可以考虑使用同步方法.静态方法的锁是类的字节码对象. 2.JDK5新特性 1)接口Lock void Lock()/ ...
- JAVA自学笔记22
JAVA自学笔记22 1.操作基本数据类型的流 DataInputStream DataOutputStream 数据输出流允许应用程序以适当方式将基本的Java数据类型写入输出流中.然后,应用程序可 ...
- JAVA自学笔记23
JAVA自学笔记23 1.多线程 1)引入: 2)进程 是正在运行的程序.是系统进行资源分配和调用的独立单位.每一个进程都有它自己的内存空间和系统资源. 多进程: 单进程的计算机只能做一件事情,而现在 ...
- JavaWeb自学笔记(一)
JavaWeb自学笔记(一) 学习视频:BV12J411M7Sj 文章目录 JavaWeb自学笔记(一) 1.基本概念 1.1 web应用程序 1.2 静态web 1.3 动态web 2.web服务器 ...
- C语言入门 —— 非科班大一学生的C语言自学笔记
初入前端的北京某211大一非科班生(没错上学期还是日语生)的C语言自学笔记 本文约8k字,将介绍:编程基础 数据类型 表达式 语句与控制流 函数 数组,指针 结构体等会随着学习进度推进持续更新~ 学习 ...
- SpringMVC自学笔记
SpringMVC自学笔记 视频:BV1aE41167Tu 官方文档:https://docs.spring.io/spring-framework/docs/current/reference/ht ...
- 计算机网络自学笔记004_Real(数据链路层002)
计算机网络自学笔记004_Real(数据链路层002)(MAC地址.IP地址.ARP协议.交换机.虚拟局域网) 一.MAC地址.IP地址.ARP协议 (一)概述 MAC地址是以太网的MAC子层所使用的 ...
最新文章
- RBAC用户角色权限设计方案
- LeetCode Reverse Linked List II 反置链表2
- 阿里巴巴创新研究计划 AIR2018 正式发布 邀全球学者共创未来
- vSphere5.5安装教程
- HashMap和ConcurrentHashMap
- android 中文参数,(原)Android: 启动另外的APP及传递参数
- 设计师网站导航的好处
- linux 查看进程启动路径
- 第八章 拦截器机制——《跟我学Shiro》[张开涛]
- html5 回合制网页游戏,盘点史上最流行的十款回合制网页游戏
- knockoutjs总结
- Hadoop Shell总结
- python 多线程 假的_天啦噜!Python多线程居然是骗人的
- LIN总线开发:智能雨量传感器
- 给深度学习新手做项目的10个建议
- ROS到ROS2的多节点组合运行
- 牛逼!100多个常用 API 接口整理大全,常用的都有。。
- php redis操作详解
- 怎么去搭建聚合支付系统比较划算
- 从0到ros2玩rmf
热门文章
- 3阶贝塞尔曲线沿线长等距分割方法
- 服务器中毒怎么办,如何防御?
- Word 2003打不开Word 2000编辑的文件问题
- 【金融量化】通道突破策略之布林带策略(Bollinger Band )、肯特纳通道策略(Keltner Channel)、唐奇安通道策略(Donchian)原理简介
- 【寻找最佳小程序】10期:小小房贷计算器——快捷、易用,小白购房必备
- layui表格监听全选_layui表格(表单)的全选功能
- 史上最全Java容器集合技术
- 公布一经验,看开盘后半小时的趋势,可预测收盘的阴阳!(80%准确率)
- 技术大牛详解:Django框架之环境安装
- 分享百度快照不更新的解决技巧