如何从零开始实现TDOA技术的 UWB 精确定位系统(1)_uwb_tdoa

A:当然可以。这文章也是写给你看的。如果你想自己从头构建整个系统,看了我的文章后,只需要画电路打板;构思软件结构再编码。就这样,所有的难点我都会在文中提到,并介绍了解决方法。你不需要招人来做算法研究。如果你想省事省时间,可以直接购买我们的电路图(AD工程文件),购买我们的软件源代码,然后快速进入生产环节。(网站: 
https://uwbhome.top

从2016年开始,我在所的公司开始了UWB定位项目,到2021年底正式停止这个项目。现在得到老板的许可,解密了。所以我把整个项目的过程写出来。

如果你对 UWB 定位有兴趣,你看了这一系列的文章之后,应该可以自己实现一个 UWB 定位系统。

如果你是商业使用,建议购买我们的技术(顺便广告一下,肯定要比自己从头来做要便宜, 主要是省事见效快,所以你可能要掉的坑,我们都趟过了。网站: https://uwbhome.top)。

最近这几年,UWB很火。炒了很久,日常生活中似乎也没有见到大规模的应用。但是在一些特定的领域,应用越来越广泛,例如煤矿井下定位/化工生产行业定位等等,这些高危的行业都看到了UWB的好处,所以应用得越来越多。

UWB的无线特点,我就不多写了,网上已经有太多介绍。

UWB芯片

目前,应用比较广泛的是爱尔兰的DecaWave公司UWB芯片。好久没关注这个领域,前段时间访问DecaWave的网站,发现变了,变成Qorvo的一个部门。据说是被苹果收购之后改名叫Qorvo。

我们使用的是DW1000这个芯片,这芯片确实很厉害。先不说它在UWB相关技术如何,在低功耗上,真的是太厉害了。曾经我们有一块开发板,我在测试低功耗的时候,不小心把芯片设置为深度休眠,然后怎么弄,发现芯片都没反应,还以为芯片坏了,扔在一边不管了。但是过了几个星期,把这块“坏”板子捡回来测试,突然发现这芯片又好了。原来,因为模板上有几个小电容,虽然断电了,但是小电容还在给芯片供电,所以芯片一直在休眠中,过了几个星期,小电容没电了,芯片彻底没电,再次上电复位,芯片又正常了。

以下是 DW1000 的技术数据:

  • Supports 110 kbit/s, 850 kbit/s & 6.8 Mbit/s data rates
  • 6 frequency bands supported with center frequencies from 3.5 GHz to 6.5 GHz
  • Transmit Power ?14 dBm or ?10 dBm
  • Transmit Power Density < ?41.3dBm / MHz
  • Preamble Length 64 μs to 4 ms
  • Supports Packet Sizes up to 1023 bytes
  • Modulation: BPM with BPSK
  • Integrated FEC and CRC insertion and checking
  • SPI interface to host controller (20 MHz max)
  • Allows easy integration with wide range of μControllers
  • Single Supply Voltage 2.8 V to 3.6 V
  • Low Power Consumption
  • Transmit mode from 31 mA*
  • Receive mode from 64 mA*
  • 2 μA watchdog timer mode
  • 100 nA deep sleep mode
  • Media Access Techniques
  • FDMA: 6 channels
  • CDMA: 12 different channel codes
  • Supports both two way ranging and one way ranging, using Time of Flight (TOF) and time difference of arrival (TDOA) methods
  • Fabricated in 90 nm CMOS
  • Industrial temperature range -40°C to +85°C
  • 6 mm x 6 mm 48 pin QFN package
  • Hardware & software applications support material available from DecaWave

DecaWave为DW1000提供了很多的例程,如何发送UWB数据包,如何接收UWB数据包,还有几个TOF测距的代码。DecaWave提供的开发板 trek1000 套件,还提供了一个TOF定位的样板系统的源代码。淘宝上很多卖DW1000开发板的店号称提供源代码的,他们提供的应该都是这些代码。

官方开发板 TREK1000 套件,带有4块板子

技术难点一:TDOA技术

TDOA是什么?TDOA的英文全称是Time Difference of Arrival (到达时间差)。其实我们经常使用的GPS/北斗导航,手机(接收终端)使用的定位技术就是TDOA。手机端的GPS芯片根据接收到的卫星的信号的时间差,计算手机所以位置。GPS/北斗使用的是下行TDOA定位,就是由被定位的终端自己计算自己的坐标。

我们使用上行 TDOA 定位

我们要做的不一样,被定位的人或物,携带一个标签(Tag),这个Tag不断的发送UWB信号。在定位区域我们会部署一些基站(Anchor),这些基站会收到Tag发出的UWB信号。我们会有一台电脑运行一个软件叫定位引擎(RTLE),Anchor把收到的UWB信号转换成一些网络数据把发送给定位引擎,定位引擎根据这些数据包计算出标签的坐标。

业内也有做 UWB 下行TDOA定位的。如果做下行TDOA,要求终端要有比较强的计算能力,对终端的电力消耗也是一个考验。GPS系统发布这么多年,以前的体积都很大,这些应用得越来越多,才逐步小型化。如果做 UWB 的下行 TDOA 定位,难点会比较多。

关于TDOA的技术的数学原理,网上已经有很多资料介绍,这里还是简单提一下。

假设一个Tag发出的UWB信号被两个Anchor收到,这两个Anchor收到的时间不一样,有一个时间差。UWB信号是无线电波,它在空中飞行的时间与光速差不多,这个时间差,可以换算为距离差,也就是Tag与这两个Anchor之间的距离的差。根据这个距离差,我们可以在这两个Anchor的周围画出一条曲线,这个曲线上所有的点到两个Anchor之间的距离之差都等于前述的距离差。这是双曲线的一半。

如果有3个Anchor,Tag发出的信号就可以得到3个时间差。画出3条曲线,这3条曲线的交点,就是Tag的坐标。定位引擎要做的事,就是列出几个方程,然后解方程,得到坐标。

原理上确实很简单的。麻烦的地方在于解方程。因为实现中,会有干扰/误差之类的因素影响,3条曲线的交点不是重合。我们需要的是快速计算出近似值,尽量靠近数字上的曲线交点。

当初我们刚开工的时候,到网上一搜,找到很多论文。几乎每一篇论文的作者都会说我这个算法如何如何牛X,并引用很多数据来证明,再写上一堆让人看不明白的数学公式。到后面介绍如何写定位引擎的时候再细说TDOA技术。

技术难点二:时钟同步

既然要用时间差定位,那各个基站得统一时间。大家如果看过战争电影,应该还会有映像,首长安排好各部队的任务后,会说“我们12点准时发起战斗,大家来对一下表”。是的,如果大家的表不一致,有的表已经12点过了,有的表还没到12点,这就乱套了。

各个基站的时间统一了,收到标签发来的UWB信号时,基站会记录下什么时间收到的,然后各个基站把这个时间送到定位引擎,定位引擎再根据这些时间的差来计算坐标。

当初我们在做技术调研的时候,联系过Decawave,他们有无线时钟同步的方案,要10多万美元,还不是代码,只是方案哦。

后来,我们想出了解决办法,发现其实无线时钟同步的方案很简单,就看你能不能想到。

这两个技术难点:TDOA算法、时钟同步方案,在2016/2017年的时候,确实比较难。我猜有很多公司想做UWB定位,但是调研之后,被这两个拦路虎挡住了。只要肯专研,这些难题总是会被解决的。所以现在做UWB定位的公司越来越多。

等你看完我的这一系列文章后,就会发现这两个“难点”其实也没那么难。

我们的目标是什么

折腾一通之后,得到些什么?或者说,我们都要折腾些什么?

简单点说,我们做一个使用 TDOA技术的UWB精确定位系统

被定位的人或物,携带一个标签(Tag),这个Tag不断的发送UWB信号。在定位区域我们会部署一些基站(Anchor),这些基站会收到Tag发出的UWB信号。

我们会有一台电脑运行一个软件叫定位引擎(RTLE),Anchor把收到的UWB信号转换成一些网络数据把发送给定位引擎,定位引擎根据这些数据包计算出标签的坐标。

这个过程就是标准的TDOA定位过程,很简单吧。

这个过程中,涉到的硬件有两样:标签、基站;涉及到的软件有:标签固件、基站固件、定位引擎。

当然,上面所说的是简化版。商品化的产品应该还要有一些其他软件:

  • 标签配置程序
  • 基站配置程序
  • 定位引擎管理程序

例如我们需要对UWB通讯换一个频道,难道要把标签固件和基站硬件重新编译,再刷到板子中?如果用一个配置程序设置一下频道参数,这样不是更方便么。

还有,我们要给固件加一个新功能,难道要把板子拆下来,接上JTag重新刷固件?直接网络升级固件不是更方便么。

定位的过程,在真实环境也更复杂。通常,UWB芯片DW1000的最大通讯范围是200米~300米。如果我们要定位的区域很大,怎么办?一般是划分多个小区域,这些小区域组合成一个大区域。所以,定位引擎要支持多区域定位。

硬件设计和选型

硬件方面,我们要做的是两个东西:标签、基站。

硬件选型最重要的是两个元件:UWB芯片、MCU。

UWB芯片我们使用DW1000。玩电子的都知道,射频电路的设计一向都比较难。所以模电工程师比数电工程师更值钱,越老越值钱。所以,我们不直接使用 DW1000 芯片,而是使用模组 DWM1000。原厂把DW1000封装成一个模组,射频部分我们不用操心了,模组有一组SPI接口,我们可以愉快的把它接到MCU的GPIO上。

DWM1000

MCU的选型。我们使用的主控MCU是STM32F103系列,这个系列的芯片在几年前非常的火。如果是现在选型,我肯定是选ESP32。ESP32又便宜,性能又好,扩充性也强。2020年左右的时候,ST的芯片涨价,我们深受其苦。我们定位基站用的STM32F103RET6,正常价格也就14元左右,最高的时候涨到500元左右,比我们的基站出货价格还高,好疯狂。

因为之前使用的是STM32F103,所以本文的介绍也以它为例来说明。如果用ESP32的话,还有很多细节的工作要做。例如,ESP32有WIFI和蓝牙,那就涉及到如何配网。ESP32也可以外加一个芯片,搞成有线的以太网连接,那又涉及到有线无线双连接,在网络中会有两个IP地址,这些都有不少细节要考虑。所以我们就先不考虑ESP32的事了,还是用STM32F103算了。

无论是基站还是标签,因为使用了DWM1000模块,硬件设计主要是数字电路部分,都是典型的电路,基本上没有什么难度。

基站硬件设计

基站的功能会比较多,对RAM和Flash要求要高一些,所以MCU选STM32F103RET6。

另外,需要连接网络,网络接口芯片使用W5500,这个芯片也是使用SPI接口连接MCU。我之前在好几个项目中使用过W5500,对它比较熟悉,所以就选它了。当然,如果你选择其他熟悉的网络接口芯片,也没问题。

供电部分,如果是个人做实验,直接使用DC12V,或者DC5V都可以。我们在产品中使用POE供电,POE受电芯片使用的是TI 的 TPS23753A,并使用隔离型设计保护基站电路。

其实我们最初的版本是使用DC 12V供电的,我一直想搞成POE供电。画了好几版电路,打了几次样,POE一直没搞定。后来我们团队扩大,增加了一位专门做硬件的同学,最后是他搞定的POE。

第一款量产的基站,使用12V供电

基站的电路图

以下是成品基站的照片

这是上面的电路图对应的PCBA

这是上面的电路图对应的PCBA

这是上面的电路图对应的PCBA

这个基站是尝试WIFI连接,加了一个WIFI模块

这张照片是在示范如何把基站外壳打开,正好可以对比一下人手和外壳的大小

请原谅,我无法把基站电路的AD工程文件放上来,那要留着卖钱。但是我放了一张基站电路的高清图片,你可以自己照着画一份。

电路中使用了24C64,目的是为了保存基站配置。后来固件使用Flash模拟EEPROM,就把24C64取消了。

如果你是DIY弄着玩,板子不用搞得很小。外壳必须要有!DW1000和晶振对温度非常敏感,我们测试过,没有外壳的时候,如果有人从裸板的旁边经过,都会导致DW1000的时钟发生很大的变化

再放一张我们最新版的量产基站的照片给大家欣赏一下,POE供电受电,双网口,集成网络交换机芯片,可以多个基站手拉手级联。

双网口基站,POE供电受电,集成交换机芯片,可级联

基站的这个集成度,只能机器贴片了,如果手工焊接,是个很艰巨的工作。

标签硬件设计

标签我们使用工牌款式,适应范围会广一些。实际上,很多最终用户用的就是工牌款式的标签,使用中的反响还好。

标签的MCU使用STM32F103CBT6,这款芯片面积小一些,RAM和Flash也小。其实开始我们想用STM32F10C8T6,后来发现Flash太小了。因为我们要支持在线的固件升级,那么Flash至少要比固件大两倍,因为除了正在运行中的固件,还要留空间放新上传的固件。还要留一些空间放配置参数。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数嵌入式工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!

img

img

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以+V:Vip1104z获取!!! (备注:嵌入式)

img

最后

资料整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!

分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

如果你觉得这些内容对你有帮助,可以+V:Vip1104z获取!!! (备注:嵌入式)

img

最后

资料整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!

更多资料点击此处获qu!!

  • 12
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值