【物联网无线通信技术】UWB定位从理论到实现(DW1000)

news2024/9/20 18:17:41

超宽带(UWB)是一种基于IEEE 802.15.4a和802.15.4z标准的无线电技术,可以非常精确地测量无线电信号的飞行时间,从而实现厘米级精度的距离/位置测量。UWB技术除了提供定位功能外,它本身是一种通信技术,其提供了一种安全的无线通信新方式,为新形式的安全交易打开了大门。

DW1000芯片是DecaWave公司于2012年推出的一款超宽带定位芯片,DecaWave公司已于2020年被苹果供应商Qorvo(威讯联合半导体)收购,最新推出的DW3000可与受支持的 Apple 产品配合使用实现附近互动功能(寻物等)。

本篇文章采取由上到下的思路来介绍UWB,首先介绍的是UWB这项技术的一些背景,再整体的从MDEK1001(Module Development & Evaluation Kit)开发套件讲起,直观的了解如何使用UWB技术来实现RTLS(实时定位系统),然后再介绍DWM1001-DEV(DWM1001模组的开发板),最后着重介绍DWM1001(DWM1001模组,集成了DW1000等芯片)的开发使用。

UWB技术概述

超宽带技术是一种全新的、与传统通信技术有极大差异的通信新技术。它不需要使用传统通信体制中的载波,而是通过发送和接收具有纳秒或纳秒级以下的极窄脉冲来传输数据。 FCC对UWB系统的定义为带宽 >500MHz且载波中心频率>2.5GHz。

超宽带无线通信的实现方案有三种。

  • IR-UWB(脉冲无线电)。
  • DS-UWB(脉冲无线电的改进版)。
  • MB-UWB(调制技术)。

目前真正用于定位领域的是IR-UWB(下面介绍的也是这一种),利用纳秒级的非正弦波窄脉冲传输数据。


技术优势

超宽带技术射频发射的脉冲工作脉宽一般为0.1-1.5ns (1纳秒= 十亿分之一秒),重复周期在25-1000ns。因为信号脉冲极窄,它的频谱无法像蓝牙这种持续信号能够通过傅里叶变化得到对应频率的尖峰(如下图蓝色部分在2.4G展示)而是得到一个以脉冲频率为中心,宽度大于500MHz的频谱结果,好似信号的能量被分摊到以500MHz为带宽,脉冲频率为中心的所有频率中(如下图的橙色部分),脉冲的频率被"隐藏"了起来。极高的带宽和极低的功率谱密度可以使其与其他窄带和宽带无线通信系统共享频谱且具备一定的抗干扰性。

这种发波的物理特性带来的好处还有一下两点:

  • UWB 系统使用间歇的脉冲来发送数据,脉冲持续时间很短,可能在1ns,有很低的占空因数,系统耗电可以做到很低。
  • 纳秒级窄脉冲,因为其持续时间远小于多径传播的时延,所以在接收端能够有效分离多径信号,使UWB技术具有了较强的抗多径能力。

与蓝牙或WiFi等其他技术不同,UWB技术射频信号的物理特性从一开始就被专门定义,以实现实时,超精确,超可靠的定位和通信。Qorvo收购了DecaWave之后,在 UWB 芯片的发展方向中添加了低功耗和低成本,使其的通用性更强。


定位实现方法

UWB 基本原理是通过将信号的飞行时间(ToF)乘以光速来测量两个无线电收发器之间距离。根据这一基本原理,又分为到达时间差(TDoA),双向量程(TWR)以及到达相位差(PDoA)。

到达时差 (TDoA)

TDoA方法与GPS非常相似。多个参考点(称为锚点)部署在一个场地中,并且时间同步。将信标放置在移动物体上, 当锚点收到信标信号时,它将为其添加时间戳.然后将来自多个锚点的时间戳发送回中央定位引擎,该引擎将根据信标信号到达的时间差运行多点定位算法,以计算移动设备的 X、Y、Z坐标.

 这种方式具有以下优点:

  • 标签的电池寿命长达 7 年(CR2032 – 0.1Hz 更新率)。
  • 可部署设备密度非常高 – 数千台。

这种方式同时具有以下缺点:

  • 锚点需要时间同步。
  • 更复杂的部署。

这种方式的应用场景如下:

  • 在拥挤的场所(即体育场,商场,贸易展览)寻找家人,朋友和同事。
  • 跟踪大型仓库中的员工。
  • 跟踪学校的孩子(确保他们在上学日结束前不会离开校园)。

双边测距(TWR)

TWR方法依赖于两个设备之间的双向通信。在通信时,这些设备还会测量它们之间 UWB射频信号的飞行时间。通过将信号的往返时间乘以光速,然后除以2,可以得出两个设备之间的实际距离。如果在两个设备之间应用 TWR 方案,您将获得两个设备之间的距离 (D)。基于 TWR 方案, 您还可以通过测量移动标签和多个固定信标之间的距离来实现 2D 甚至 3D 定位 – 这称为三角测量。

方法优势:

  • 不需要同步时间。
  • 方便部署。
  • 双向通信可实现。

方法劣势:

  • 由于设备使用双向通信,功耗更高 – 电池寿命从数月到一年(取决于实际使用情况)。
  • 移动设备数量有限(数百台)。

应用场景:

  • 查找家中丢失的物品。
  • 根据您的距离锁定和解锁您的电脑。
  • 使用智能遥控器或手机指向和控制物联网设备。

到达相位差(PDoA)

PDoA 方法包括将提供两个设备之间距离的 TWR 方案与两个设备之间的方位测量相结合。距离和方位的组合允许计算两个设备的相对位置(X,Y,z),而无需任何其他基础设施。为此,其中一个设备携带两个天线,能够测量射频信号到达的相位差。

方法优势:

  • 降低锚点安装位置选择的要求。
  • 仅用两个设备进行相对位置定位。

方法劣势:

  • 位置误差不再是恒定的,它是2个设备之间距离的函数。

应用场景:

  • 自定义智能家居(音频、视频、照明等)根据相对位置进行动作。
  • 安全访问您的家庭或办公楼,无需使用钥匙或触摸屏。
  • 跟踪预定义区域内的人员或物品。

MDEK1001

MDEK1001是基于DWM1001模组的评估和开发套件,它帮助我们通过DWM1001C来快速实现一个实时定位系统(Real-Time Location System),这个系统可以使用运行Android系统的平板电脑来轻松配置部署和可视化标签的实时位置信息。


套件内容

套件包含如下:

  1. RTLS units:定位系统设备,一共包含12个,可以通过配置在RTLS来担任不同的角色:anchor(锚点),tag(标签,用电池供电),listener(监听),bridge(桥接)。
  2. USB线缆,用于连接电脑和定位设备。
  3. 胶垫和彩色贴纸:胶垫用于固定锚点,彩色贴纸用于区分标签。
  4. 安卓平板:用于安装Decawave DRTLS Manager,部署锚点和标签,实时显示标签位置信息。
  5. PC:PC 直接连接到 RTLS 定位系统设备以记录位置数据或向该设备发送命令。
  6. 供电设备:给锚点供电。


RTLS系统部署

部署RTLS系统分为以下几个步骤。

  1. 将锚点与标签设备安装妥当。
    1. 选择 4个RTLS 定位设备作为锚点,三角定位理论上只需要三个锚点即可,官方推荐使用四个锚点来提高标签位置的估算准确性。
    2. 将它们安装在墙壁或三脚架的高处,最好高于头部高度,确保它们都处于同一高度
    3. 将它们大致排列成矩形,并为其供电。
    4. 选择 4个RTLS 定位设备作为标签,并用电池为其供电。

  2. 建立网络。
    1. 从谷歌Play商店或Decawave网站下载.apk安卓应用程序文件 (Decawave DRTLS
      Manager)。按照平板电脑上的说明安装应用程序。
    2. 打开 Decawave DRTLS Manager应用程序,点击'Start Device Discovery'。
    3. 点击列出的设备之一,将出现一个选项来命名一个网络,保存之后此设备将添加到该网络。
    4. 对其余设备重复此操作以将其添加到此网络(向右滑动可以从列表中删除设备)。
    5. 所有 RTLS 定位设备的初始配置都是被动的UWB 模式下的标签设备。

  3. 将4个固定好的RTLS 定位设备锚点。
    1. 将“Node Type”设置为“Anchor”。
    2. 将“UWB“设置为“Active”。
    3. 选其中一个锚点为“Initiator”,选中相应属性框(网络中必须有一个发起者)。
  4. 将一个RTLS 定位设备设置为标签。
    1. 将“Node Type”设置为“Tag”。
    2. 将“UWB“设置为“Active”。
    3. 属性框勾选“RESPONSIVE MODE”、“STATIONARY DETECTION”和
      “LOCATION ENGINE”。
  5. 将锚点的位置信息输入系统。
    1. 锚点可以自动生成位置坐标。
      1. 在“Network Details”屏幕上,点击右上角下拉菜单(出现蓝牙范围内的锚点)。
      2. 对列表中的定位点重新排序以匹配它们在房间中的位置:
        1. 在房间内逆时针排序锚点(如下图)。
        2. 列表中的第一个锚点是(0,0)坐标。

      3. 点击“Measure”开始自动定位,点击”‘PREVIEW“来检查自动生成的锚点坐标。
      4. 通过点击“Z-AXIS”输入锚点的高度。最后保存配置。
    2. 锚点的坐标也可以手动输入,点击然后在“POSITION”位置输入x,y,z坐标。
  6. 点击”Grid“来看标签的位置信息如下。


其他的定位系统组成

下图是8个锚点和两个标签的实时定位系统,其中的两个网关由定位设备配置成桥接模式与树莓派3B+组合而成,使用了预留的排针进行相连。

 通过下图可以看到标签在不同区域时选择了最合适的锚点来做三角定位。


DWM1001-DEV

DWM1001-DEV是Decawave DWM1001C模组的开发板,上面提到的RTLS units外壳里边装的就是它,其主要是在Decawave DWM1001模组的基础上增加了板载 J-Link 用于通过 USB 进行调试和刷录,预留了8pin的普通IO和26pin与树莓派连接的接口,以及充电电路和LED指示灯。

 其原理图如下:


DWM1001C

DWM1001C是基于Decawave的DW1000芯片和Nordic Semiconductor的nRF52832 SoC的UWB和蓝牙模组。它具有板载运动传感器和集成天线,它的硬件/软件功能框图如下。

可以看出模组主要包含四个芯片:

  • nRF52832蓝牙芯片,DWM1001 Firmware就跑在这个芯片上。
  • LIS2DH12TR三轴加速度传感器,用于检测模组是否处于运动状态,从而选择不同的位置刷新频率。
  • DW1000,UWB芯片,完成UWB射频部分实现。
  • 电源芯片,完成DC-DC不同电压转换。

模组功耗与天线方向图

下图是模组在不同状态下的功耗情况,可以看出模组在收发波的时候会有一个比较大的电流变化,对电源部分的瞬时相应提出了要求。

下图是显示了DWM1001C模组的天线辐射方向图。测量围绕板中心的球形空间中的三个平面,带有θ图和φ图,表示不同的极化。可以看出,在 RTLS 系统中使用时应该直立放置标签和锚点,如果标签和锚点的天线相对于彼此垂直,则极化会发生变化。在这种情况下,水平极化图案θ适用,并且在某些角度存在零点,可能限制定位的有效范围和引入位置不准确。


UWB网络帧格式

UWB网络使用 IEEE 802.15.4 定义的标准帧。该标准定义了多种帧类型,该系统仅使用数据帧。下图是一帧数据帧的组成。

UWB网络中的帧由上图中的Payload的第一字节来区分不同类型的消息,下面我们着重描述以下常见的消息。

  • Beacon message:这个消息由锚点发送,包含一些当前网络的基本信息。
  • Join request message:这个消息由锚点发送,请求加入已经存在的网络。
  • Join confirmation message:这个消息由收到请求加入网络的锚点发送,这个消息在紧接着Beacon message发送。
  • Position message:这个消息作为Beacon message的补充来发送,包含锚点的(x,y,z坐标)。
  • Group Poll message:这个消息用于意在进行一次TWR定位的设备,主要由标签发起,锚点在自动生成坐标的时候也会发起,包含了刷新频率以及上一次的定位计算结果(x,y,z)。
  • Response message:当前参与三角定位的锚点在接收到Group Poll消息之后,会回复这条消息,这条消息包含了标签发送Group Poll的时间戳以及锚点发送回复时候的时间戳。

DWM1001模组固件开发

DWM1001 模块预装了嵌入式固件,可提供基于双向测距 (TWR) 的实时定位系统 (RTLS)。该模块不仅可以通过蓝牙串口等通信接口进行配置和控制此,Decawave还以库和源代码的形式提供了模块固件源码以及构建环境,以便用户可以自定义操作和/或添加自己的功能。

DWM1001 模块中嵌入的固件基本上提供两种类型的功能:PANS API 和提供较低级别功能的 PANS 库。PANS API 包括通用 API(这些包括用于不同接口的不同 API 集和相应的解析器,它充当用户 API(C、UART、SPI 和 BLE)和 PANS 库之间的转换器)。下图显示了 DWM1001 固件的体系结构和组件。

其中核心的是PANS(Positioning and Networking Stack) Library,它主要包含了以下几个部分,其框图在列表的下面。

  • SoftDevice and BLE driver:SoftDevice是Nordic为BLE实现提供的库文件,为 DWM001C提供 BLE 功能,以无线方式创建复杂的网络拓扑、通信和固件更新。
  • eCos RTOS and BSP:eCos RTOS是一个免费开源的实时操作系统,eCos 系统为 DWM1001 硬件平台提供了非常好的运行时性能和板级支持包 (BSP)。
  • DW1000 driver:Decawave’s DW1000 驱动。
  • RTLS Management:RTLS 管理应用程序支持将 DWM1001 模块配置为将参与 TWR 的标签和锚点。
  • TWR solver / Location Engine:标签中的TWR solver / Location Engine计算标签的 x、y 和 z 坐标。标签和相对锚点之间的 TWR 结果将发送到TWR solver以计算标签的位置。


环境搭建

开发环境搭建包括以下几个组件,将其正确安装即可。

  • Segger Embedded Studio v4.12:集成开发环境。
  • Segger J-Flash Lite (J-Link software suite):烧录仿真工具。
  • GNU ARM Embedded Toolchain 5.4 2016q3:编译工具链。

修改例程

原厂提供的简易Demo目录结构如下:

打开“examples/dwm-simple-example/dwm-simple-example.emProject” file,工程应该被Segger Embedded Studio成功打开。

 下一步配置编译工具链,遵循以下步骤。

  1. 右键单击SES 主窗口左侧项目项部分中的解决方案名称。解决方案名称位于项目结构的顶部:dwm-simple。在打开的串口中点击“option”。
  2. 将变量“工具链目录”设置为先前安装的 GNU Arm 嵌入式工具链的 bin 目录的路径。

要编译项目,请从SES菜单栏中打开“build”菜单,然后单击“编译dwm-simple”或按“F7”。生成的日志显示在输出窗口中。如果构建成功,目标 MCU 内存映射也会显示,以及占用和剩余的存/RAM 内存量。

 下一步我们对例程做一些简单的修改。

  1. 在dwm-simple.c文件中,找到app_thread_entry函数。
  2. 添加局部变量如下:
    dwm_pos_t pos;
  3. 找到while(1)循环体,添加代码如下:
    dwm_pos_get(&pos);
    printf("x=%ld, y=%ld, z=%ld, qf=%u \n", pos.x, pos.y, pos.z, pos.qf);
    printf("\t\t time=%lu \n", dwm_systime_us_get());

代码的作用是通过串口输出当前标签的坐标信息。代码中使用的dwm_pos_get即为Firmware提供的C语言的API接口,所有的C语言API接口定义都能在dwm/include/dwm.h文件找到。

编译的固件可以直接从 SES 向目标设备上刷写。通过 USB 将 DWM1001-Dev 设备与计算机相连,然后单击菜单栏中的“target”。选项“Download dwm-simple”可用于加载示例。SES 还支持调试。要启动调试模式,请单击菜单栏中的““Debug”或按F5。


DWM1001固件API

Decawave公司不仅将上述的C语言接口称之为API,还将通过串口或者SPI发送的控制协议统称为API,我们举一个例子来类比它们的关系,比如接口int dwm_pos_set(dwm_pos_t* p_pos),它可以通过如下方式来配置位置信息:

dwm_pos_t pos;
pos.qf = 100;
pos.x = 121;
pos.y = 50;
pos.z = 251;
dwm_pos_set(&pos);

对应的UART/SPI的协议则如下:

值得一提的是串口可以通过在1秒内连续摁‘ENTER’键两次来进入shell模式,在shell模式中串口可以通过一系列命令来进行配置。

BLE同样也提供了一组API来设置和获取设备信息,并提供了升级Firmeware的功能。


十六宿舍 原创作品,转载必须标注原文链接。

©2023 Yang Li. All rights reserved.

欢迎关注 『十六宿舍』,大家喜欢的话,给个👍,更多关于嵌入式相关技术的内容持续更新中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/812230.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java在线OJ项目(三)、前后端交互API模块

Java在线OJ项目(三)、前后端交互API模块 1. 客户端向服务器请求所有题目 或者 单个题目前端获取所有题目获取一个题目 后端 2. 后端读取前端提交的代码,进行编译运行,返回结果前端提交代码后端处理 1. 客户端向服务器请求所有题目…

【程序设计】一文讲解程序设计原则SOLDI

前言 设计原则,是指导我们如何设计出低耦合、高内聚的代码,让代码能够更好的应对变化,从而降本提效。 设计原则的关键,是从『使用方的角度』看『提供方』的设计,一句话概括就是:请不要要我知道太多&#…

VBA技术资料MF36:VBA_在Excel中排序

【分享成果,随喜正能量】一个人的气质,并不在容颜和身材,而是所经历过的往事,是内在留下的印迹,令人深沉而安谧。所以,优雅是一种阅历的凝聚;淡然是一段人生的沉淀。时间会让一颗灵魂&#xff0…

IO流(2)-缓冲流

1. 缓冲流的简单介绍 我们上贴说到了 FileInputStream,FileOutputStream,FileReader,FileWriter。 其实这四个流,我们通常把它叫做原始流,它们是比较偏底层的;而今天我们要说的四个缓冲流,如…

自己创建的类,其他类中使用错误

说明:自己创建的类,在其他类中创建,报下面的错误(Cannot resolve sysmbol ‘Redishandler’); 解决:看下是不是漏掉了包名 加上包名,问题解决;

第9届Python编程挑战赛初中组初赛真题剖析-2023年全国青少年信息素养大赛

[导读]:超平老师计划推出《全国青少年信息素养大赛Python编程真题解析》50讲,这是超平老师解读Python编程挑战赛系列的第13讲。 全国青少年信息素养大赛(原全国青少年电子信息智能创新大赛)是“世界机器人大会青少年机器人设计与…

PyCharm安装pip依赖,如何添加国内镜像源?

目录 前言 PyCharm如何安装依赖 PyCharm如何配置国内镜像源 前言 首先我们都知道,使用pip安装依赖的方式,却很少有人知道使用PyCharm如何安装依赖。 PyCharm如何安装依赖 但你会发现,基本都是安装失败的,因为你是去外网下载的…

左神算法之中级提升班(8)

目录 【案例1】 【题目描述】 【思路解析】 【代码实现】 【案例2】 【题目描述】 【思路解析】 【代码实现】 【案例3】 【题目描述】 【思路解析】 【案例4】 【题目描述】 【思路解析】 【代码实现】 【案例5】 【题目描述】 【子序列概念】 【思路解析1 经典…

CTF-MISC:BUUCTF练习汇总(持续更新)

CTF-MISC:BUUCTF练习汇总 1、金三胖2、你竟然赶我走3、二维码4、大白 1、金三胖 解题思路: flag隐藏在gif图片帧中,使用在线GIF拆分工具即可 在线GIF图片帧拆分工具:https://uutool.cn/gif2img/ flag为:flag{he11oho…

应用层协议——https

文章目录 1. HTTPS 是什么2. 什么是"加密"3. 常见的加密方式4. 数据摘要 && 数字签名5. HTTPS 的工作过程探究5.1 方案1 - 只使用对称加密5.2 方案2 - 只使用非对称加密5.3 方案3 - 双方都使用非对称加密5.4 方案4 - 非对称加密 对称加密5.5 中间人攻击5.6 …

【MTI 6.S081 Lab】locks

【MTI 6.S081 Lab】locks Memory allocator (moderate)实验任务Hint解决方案 Buffer cache (hard)实验任务Hint解决方案数据结构设计初始化数据结构getrelse 本实验前去看《操作系统导论》第29章基于锁的并发数据结构,将会是很有帮助的。 在这个实验室中&#xff0…

懒得改变原始对象?JavaScript代理模式教你怎样一步步偷懒!

前言 系列首发gong zhong hao[『非同质前端札记』] ,若不想错过更多精彩内容,请“星标”一下,敬请关注gong zhong hao最新消息。 懒得改变原始对象?JavaScript代理模式教你怎样一步步偷懒! 何为代理模式 例如&#x…

倍增与ST算法

倍增与ST算法 倍增倍增原理倍增法的局限例题 :国旗计划 (洛谷 P4155)例题题解带注释的代码 ST算法ST算法原理ST算法步骤ST算法应用场合例题 :【模板】ST表 (洛谷 P3865) 倍增 倍增原理 倍增法的局限 例题 :国旗计划 (洛谷 P4155) 例题题解 带…

华为OD机试真题 Java 实现【报文回路】【2023 B卷 100分】,俗称“礼尚往来”

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路1、报文回路2、异常情况:3、解题思路 五、Java算法源码六、效果展示1、输入2、输出 华为OD机试 2023B卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA&…

《JavaSE-第二十章》之线程的创建与Thread类

文章目录 什么是进程?什么是线程?为什么需要线程? 基本的线程机制创建线程1.实现 Runnable 接口2.继承 Thread 类3.其他变形 Thread常见构造方法1. Thread()2. Thread(Runnable target)3. Thread(String name)4. Thread(Runnable target, Str…

epoll复用

cli #include <stdlib.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/socket.h>// 服务器ip #define IP "192.168.250.100" // 服务器端口 #define PORT 8888int main…

c++11 标准模板(STL)(std::basic_ifstream)(一)

定义于头文件 <fstream> template< class CharT, class Traits std::char_traits<CharT> > class basic_ifstream : public std::basic_istream<CharT, Traits> 类模板 basic_ifstream 实现文件流上的高层输入操作。它将 std::basic_istream…

Flink - souce算子

水善利万物而不争&#xff0c;处众人之所恶&#xff0c;故几于道&#x1f4a6; 目录 1. 从Java的集合中读取数据 2. 从本地文件中读取数据 3. 从HDFS中读取数据 4. 从Socket中读取数据 5. 从Kafka中读取数据 6. 自定义Source 官方文档 - Flink1.13 1. 从Java的集合中读取数据 …

二叉树(C语言)

文章目录 1.树1.1概念1.2相关定义1.3 表示&#xff08;左孩子右兄弟&#xff09; 2.二叉树2.1概念2.2特殊的二叉树1. 满二叉树&#xff1a;2. 完全二叉树&#xff1a; 2.3二叉树的性质2.4练习 3.二叉树的存储结构1. 顺序存储2. 链式存储 4.完全二叉树的代码实现4.1堆的介绍1.堆…

ssm德宏贸易项目java人资企业办公jsp源代码mysql

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 ssm德宏贸易项目 系统有1权限&#xff1a;管理员 二…