×

ESP32 UWB室内定位测试开源项目

消耗积分:2 | 格式:zip | 大小:0.00 MB | 2023-06-14

手托初梦

分享资料个

描述

我们做了一个 ESP32 UWB 室内定位测试,使用 2 个 UWB 锚点和 1 个 UWB 标签,当标签移动时,UWB 标签的实时位置可以图形显示在 PC 上。

补给品

● ESP32 超宽带 *3

● 移动电源

● 5v电源*2

第 1 步:概述

1.1 介绍

DW1000 是世界上第一款基于超宽带技术的单芯片无线收发器。它为实时定位和室内定位系统、基于位置的服务、无线传感器网络提供了一种新方法。它能够开发具有成本效益的 RTLS 解决方案,其室内和室外定位精确到 10 厘米以内。

Makerfabs ESP32 UWB基于 ESP32 和 DW1000 解决方案,它就像一个连续扫描雷达,精确锁定另一个设备并与之通信,从而计算自己的位置,配合 ESP32 WiFi/蓝牙,它可能是无线解决方案室内定位。

1.2 关于超宽带

超宽带是一种在宽带宽(>500 MHz)上传输信息的技术。这允许传输大量的信号能量,而不会干扰相同频带中的传统窄带和载波传输。许多国家/地区的监管限制允许有效使用无线电带宽,并实现高数据速率个人区域网络 (PAN) 无线连接、远程低数据速率应用以及雷达和成像系统,与现有的透明共存通讯系统。

pYYBAGNY3xuAe2FTAAA7iLkfxxc431.jpg
 

传统无线电传输和 UWB 之间的显着区别在于,传统系统通过改变正弦波的功率水平、频率和/或相位来传输信息。UWB 传输通过在特定时间间隔产生无线电能量并占用大带宽来传输信息,从而实现脉冲位置或时间调制。通过编码脉冲的极性、其幅度和/或通过使用正交脉冲,也可以在 UWB 信号(脉冲)上调制信息。UWB 脉冲可以以相对较低的脉冲速率偶尔发送以支持时间或位置调制,但也可以以高达 UWB 脉冲带宽的倒数的速率发送。Pulse-UWB 系统已在超过 1 的通道脉冲速率下得到证明。

1.3 超宽带测距

UWB 无线电系统可用于确定各种频率下传输的“飞行时间”。当然,“飞行”的速度与光速一样,所以核心问题是如何查看“飞行”的时间,从而计算出距离。

距离 = 光速 * Tprot

对于最基本的系统,至少有2项:Device_A(称为A)和Device_B(称为B),  主要有2种测量方式:

  • 单面双向测距
  • 双面双向测距

1.3.1 单面双向测距

这是最基本的测量方法:

poYBAGNY3x2AIdjlAAAr4RIGGNA695.png
 

 

 
pYYBAGNY3yKAesUwAAAAbBl6Af8147.png
 

首先A发送消息(TX)并记录时间标记,B收到消息,记录时间标记,延迟(Treplay)后,B发送消息(TX)并记录时间标记时间标记,最后A收到消息,并有时间标记的记录。

然后是飞行时间:

pYYBAGNY3ySAE8MYAAAKFJJ7FtA774.png
 

由于 Tround 和 Treply 存储在同一个设备上,所以时间误差偏移;当然,A(eA) 和 B(eB) 之间存在误差,误差是:

pYYBAGNY3yaABPWFAAAOjha3lgw043.png
 

也就是说,误差与 Treply 是线性的。所以这种方式并不普及,只适用于很短距离的测量。

1.3.2 双面双向测距

“单面双向测距”后,如果 A 再次反馈给 B,则为:

pYYBAGNY3yiAINcJAABQceLkOyQ488.png
 

这种测量我们称为 3 消息模式

在“单边双向测距”之后,如果 B 再次发起另一条消息和 A 反馈,则为:

pYYBAGNY3yuAb7M4AABgDEsoWrk151.png
 

这种测量我们称为 4 消息模式

在 3 条消息模式或 4 条消息模式下,飞行时间计算如下:

pYYBAGNY3y-AOhSgAAAaZOgkZ-w602.png
 

 

pYYBAGNY3zKAXh2mAAAhOoe-oog688.png
 

第 2 步:使用 ESP32 UWB 进行室内定位

2.1 查看

在这个应用中,我们使用了 3 个 Makerfabs ESP32 UWB 模块,2 个模块作为 UWB 锚点,1 个作为 UWB 标签,在房间内移动。当标签获得其位置时,它会将其位置传输到设备(PC 浏览器、手机应用程序),以显示实时位置。

pYYBAGNY3zSALSbtAABSrP8sKio860.jpg
 

2.2 平面定向算法

假设所有三个 UWB 模块都处于相同的水平高度。UWB可以得到Tag和两个anchor的距离,再加上预先设置的两个anchor的距离,就可以得到一个三角形三边的长度。

pYYBAGNY3zeAaRq1AAAYQn4eLxg681.png
 

两个点“AB”分别是两个锚点,“C”是标签点。“c”是两个anchor的距离,UWB会得到两个长度“a”和“b”。标签是“b”远离点“A”和“a”远离点“B”。

现在我们知道了三角形三边之间的距离,我们可以计算点“C”的坐标。

我使用余弦定律计算角度“A”的余弦:

pYYBAGNY3zmAJyo9AAAHnIkoZ0Y504.jpg
 

我有勾股定理,它给了我角度“A”的正弦:

pYYBAGNY3zuAboSGAAAHZfJyw3A193.png
 

cos_a = (b * b + c * c - a * a) / (2 * b * c) sin_a = sqrt(1 - cos_a * cos_a)

如果我们将点“A”设置为坐标系的原点 (0, 0),那么我们得到点 C (bcosα, bsinα)。

第 3 步:代码解释

3.1 图书馆

我们使用 arduino-dw1000库。提供基本功能的库,可将 Decawave 的 DW1000 芯片/模块与 Arduino 一起使用(arduino-dw1000 库)

请注意根据 Github 修改 DW1000 库,否则无法编译为 ESP32。ESP32 UWB GitHub 上的指南 

***此应用程序的完整代码位于:  Makerfabs GitHub ***

3.2 Device_Anchor

由于系统中有 2 个锚点,我们需要为这两个锚点设置不同的锚点地址。

#define ANCHOR_ADD "83:17:5B:D5:A9:9A:E2:9C"// modify the address when multiple anchors, such as 83/82.

该库默认使用随机短地址,我们需要将其设置为使用我们设置的静态地址。所以我们需要将UWB模块设置为Anchor模式,LONGDATA_RANGE_LOWPOWER模式,并关闭随机短地址,通过以下代码:

DW1000Ranging.startAsAnchor(ANCHOR_ADD,
DW1000.MODE_LONGDATA_RANGE_LOWPOWER, false);

Anchor 代码位于:  https ://github.com/Makerfabs/Makerfabs-ESP32-UWB/tree/main/example/anchor

3.3 Device_Tag

标签需要读取两个锚点之间的距离,通过UDP协议发送给PC。

首先,设置 WiFi 和目标 IP 地址(PC)。

pYYBAGNY3z-AYRXzAAAex7iXnpA456.png
 

在 Windows cmd 中,使用“ipconfig”检查 PC 本地 IP。

pYYBAGNY30GAN9vsAADEq9YJi_8000.png
 

并设置UWB工作在标签模式。

poYBAGNY30SAAe92AAAn9gKDmbw973.png
 

我使用了一个链表来存储检测到的锚点,它非常适合 UWB 的工作方式。链表的内容被转换成 JSON 格式。

得到的JSON字符串格式如下:

pYYBAGNY30aAPAfpAAAXfcmJYBU980.png
 

最后通过UDP协议每秒向PC发送一次数据。

poYBAGNY30iABD4QAAAwWMpazf0895.png
 

标签代码位于:  https ://github.com/Makerfabs/Makerfabs-ESP32-UWB/tree/main/example/IndoorPositioning/udp_uwb_tag

3.4 Python代码

一个简单的演示,用于计算标签的位置并以图形方式显示它。使用海龟绘制。

一开始想用Matplotlib,但是有点复杂。Turtle 很简单,但提供的功能很简陋。我自己添加了一些绘图功能来快速绘制线条、圆形、矩形等。

pYYBAGNY302AXpvrAABuOVSm-gI285.png
 

这是我的位置计算功能。

pYYBAGNY30-AE8vMAABEAd_5Jzw850.png
 

其实一开始我是用海伦公式计算坐标的,但是分不清三角形是锐角还是钝角。

demo的功能是接收通过UDP协议传输的标签的数据,计算出标签的位置并绘制在屏幕上。

第四步:室内定位测试

在所有 UWB 锚点和标签都编程 OK 后,首先我将两个 UWB 锚点放在桌子的两侧。

poYBAGNY31GAFaFPAAGYu0BcKsw423.png
 

并在PC端运行Python程序。将 UWB 标签贴到移动电源上,等待它连接到房间里的 WiFi。Tag连接PC后,弹出图形界面。

pYYBAGNY31SAXlJ0AACW6uWP044187.png
 

移动UWB标签,在PC端可以实时监控标签位置:

pYYBAGNY31qAVBlfAABwYi3GMiE713.jpg
 

 

pYYBAGNY31yAaAsTAABqLOMztns887.jpg
 

 


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !