【2024艾迈斯欧司朗竞赛】用TMF8821实现角度测算
该项目使用了TMF8821,实现了角度测算的设计,它的主要功能为:通过获取TMF8821传感器的数据进行传感器与平面之间的夹角以及最小距离。
标签
TMF8821
2024艾迈斯欧司朗竞赛
dTOF传感器
角度测算
无言的朝圣
更新2025-03-06
23

一、项目简介

本项目基于艾迈斯欧司朗TMF8821多区域直接飞行时间(dToF)传感器,结合Raspberry Pi RP2040微控制器平台,构建了一套角度系统。系统通过分析传感器输出的多区域测距数据中的部分数据,实时计算被测平面与传感器模块之间的空间夹角及最小垂直距离,实现了非接触式角度测量功能。通过选取特定检测区域数据构建几何模型,结合余弦定理与三角函数关系,实现平面参数的快速解算。

二、硬件组成

1、TMF8821传感器模块

    • 多区域dToF传感器(支持3x3、4x4区域模式)
    • 940nm VCSEL光源,Class 1人眼安全
    • 最大检测距离5米,±3%精度
    • I2C数字接口(默认地址0x41)

2、RP2040主控平台

    • Raspberry Pi官方双核ARM Cortex-M0+处理器
    • 133MHz主频,264KB SRAM
    • 支持MicroPython固件开发
    • 集成硬件I2C、SPI、UART接口
    • LCD显示屏(240x240分辨率)

3、辅助硬件

传感器固定支架

三、硬件框图


0

本次活动提供了主控平台和传感器。

四、设计思路

本项目主要使用TMF8821传感器模块进行多区域数据采集,取其中中心区域长度数据构建成平面几何结构(三角形),一般采集出的数据为3*3数据,其中第5个数据为中心数据,其与传感器处于垂直状态,然后通过余弦定理实现第三个边的测量,并再次通过余弦定理计算相关角度,基本原理如下:


0

夹角的测算:

我们可以在tof数据中得知A和B的长度,视场角师傅定的所以c的角度就是视场角的一般,根据余弦定理:

C*C = A*A+B*B-2*A*B*cos(c);

可以得到C的长度,同样通过余弦定理可以得到a的角度,在通过直角三角形得到目标夹角的大小(90-a)。

最小距离的测算:

实际上就是上图的H,通过直角三角形,知道a的角度(或者夹角90-a)以及B的长度通过,正弦或余弦公式计算既可以:H=cos(90-a)*B。

五、软件流程


0

六、关键代码介绍

本次的开发设计主要代码包括传感器驱动和平面算法两个部分。

传感器驱动


class Tmf8821Utility(Tmf8821App):

def __init__(self, ic_com: I2C_com):
super().__init__(ic_com)

def open(self, i2c_settings: I2C_Settings = I2C_Settings()):
return super().open(i2c_settings)

def init_bootloader_check(self):
print("Started Bootloader check")
self.enable()

if not self.isAppRunning():
print("Image not found. Initiate Image Download")
self.downloadAndStartApp()
print("Application {} started".format(self.getAppId()))

def measure_frame(self, number_of_frames: int = 1):
frames = list()
status = self.startMeasure()
if status != Tmf8821Device.Status.OK:
return

read_frames = 0
while read_frames < number_of_frames:
if self.readAndClearInt(self.TMF8X2X_APP_I2C_RESULT_IRQ_MASK):
read_frames = read_frames + 1
frame = self.readResult()
frames.append(frame)

self.stopMeasure()
return frames

我们首先需要进行接口的适配,然后进行传感器的配置,最后定期读取传感器数据;

算法代码:

def TirangleGPS(A,B):
angle_A = A
angle_B = B
angle_C = 0

a_rad = math.radians(16)
COSangle_a = math.cos(a_rad)
angle_C2 = angle_A*angle_A+angle_B*angle_B-2*angle_B*angle_A*COSangle_a
angle_C = math.sqrt(angle_C2)
COSangle_x = (angle_B*angle_B+angle_C2-angle_A*angle_A)/2/angle_B/angle_C
print(COSangle_x)
COSangle_x = max(-1,min(1,COSangle_x))
x_rad = math.asin(COSangle_x)
COSangle_x = math.cos(x_rad)
length = angle_B*COSangle_x
angle = math.degrees(x_rad)
return length,angle

我们将固定的传感器长度数据传入这个函数中,最后返回最小距离以及夹角数据,注意两条线之间的角度是视场角的一般,这里用16度;使用math.cos时注意,这里的参数是弧度,所以使用之前需要将角度转化为弧度,使用完之后在进行逆转换。

七、效果展示


0

通过简约的效果进行展示,直观的表现任务的两个参数,具体效果可参看视频。

八、心得体会

在测试过程中也遇到了一些问题和挑战,比如math的使用,当然本次设计还有很大的优化空间,本次主要实现了基本的驱动以及算法测算,由于数据的漂移问题,整体结果还不是很稳定,后续可以加入一些滤波算法进行处理。

非常感谢电子森林和艾迈斯欧司朗组织的本次竞赛,也算是对2024的完美收官,让我们可以接触最新的传感器TMF8821,感受TOF传感器的魅力,还锻炼了实践能力,让我们切实感受到TOF传感器的巨大潜力,为后续检测设备开发奠定了技术基础。通过本次竞赛,本人在传感器应用、嵌入式开发和算法转化等方面积累了宝贵经验,这些经验将直接应用于后续的系统开发中。

附件下载
TMF8821_dToF 20250114.zip
团队介绍
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号