我们的UWB项目,最初是作为贵阳旌霖公司另一个项目的配套子项目。随着项目进展,我们把UWB独立出来作为一个单独的产品,最初叫“旌霖实时定位系统”。后来公司调整,把UWB项目划到“贵阳联创智能网络科技有限公司”名下,产品名称改为“联创实时定位系统”。
UWB项目从2015年底开始,到2021年10月停止,持续了将近6年。
使用DecaWave DW1000作为 UWB 收发器,使用TDOA方式定位,精度达到10~30cm左右,已有实际应用案例。
1. 项目概况
最小系统由3个(或4个)基站、及n个标签组成, 标签发出定位信号, 基站根据收到定位信号的时间差计算标签的坐标。其中一个基站同时作为时钟源负责为其他基站提供时钟同步信号。
可以多个定位区域合并为一个大的定位区域,达到增加覆盖范围的目的。
1.1. 硬件
定位基站:POE供电、Ethernet网络连接、DW1000带LNA/PA、STM32主控,可提供基站的全套SCH/PCB文件,及PCBA样品、基站成品
定位标签:STM32主控、DW1000带LNA、充电电路、MPU 6050三维加速度计、亮度检测、电量检测、报警开关,低功耗设计(待机电流15uA),可提供手环、工牌两种款式标签的全套SCH/PCB文件,及PCBA样品、成品、手环模具
1.2. 软件
1.2.1. 固件
基站和时钟源的bootloader、application代码(C语言),可通过网络更新固件,固件使用AES加密
标签的bootloader、application代码(C语言),可通过USB更新固件,固件使用AES加密
1.2.2. 定位引擎
定位引擎的代码(C++),接口协议及Java接口程序,可根据协议开发其他语言的接口
1.2.3. 桌面配置程序
基站配置程序的Dephi代码,标签配置程序的Delphi代码。
1.3. 重要技术
(全部自主开发、拥有完整版权):
- 基站的时钟同步算法,保持基站间的时钟误差在ps级别
- TDOA定位算法,根据时间差计算坐标,可以以1维、2维、3维方式工作
- 纠偏算法,对特定场景下的固定误差进行纠偏
- 多种滤波器算法,对干扰进行过滤,以适应不同用户的场景
- 多区域切换算法,融合多种因子(坐标、信号强度、加速度等等)进行区域判断切换
1.4. 正在开发中的产品
无线网络连接的基站(433M无线、WiFi, 5V供电, 以无线把无线定位数据传送给服务器端, 方便非固定环境如隧道、矿井中的基站部署),
手拉手(级联)POE基站(基站集成POE受电、POE供电、网络交换机, 形式上把全部基站串连在一条网线上,以降低施工成本) <— 已完成并量产。可级联的基站,大大降低了网络布线成本。
1.5. 可适应恶劣环境
在我们的一个实际案例中,用户的定位环境为金属墙壁,房间的6个墙面均为金属板,某些房间有玻璃窗,从理论上说这样的环境非常恶劣,因为金属墙壁对无线信号的反射会导致定位会受到很大干扰。我们为此进行了专门的优化,基本上定位精确度达到50cm以内。
2. 重要技术介绍
2.1. 精确定位技术概况
目前定位的方式很多,基本上可以分为三类:信号强度、飞行时间、方向角。
目前市面上WiFi定位、蓝牙定位、Zigbee定位等都是使用信号强度定位,它们根据标签发出的信号强度来判断距离。因为环境影响信号强度的因素很多,所以使用信号强度来定位,基本上是不靠谱的。
飞行时间(TOF)定位是利用无线电波从标签飞行到基站所花的时间来计算标签到基站的距离。目前所有的精确测距或定位都使用这个技术,例如激光定位、UWB定位。
方向角定位,是根据标签发出的信号来确定标签与基站之间的方向角,再通过角度来解方程计算坐标。因为这个方向角的测量是个很困难的事,所以市场上没有看到使用这个技术的产品。
还有一类是存在性检测。例如RFID定位,在定位区域内部署大量的RFID读卡器,系统根据最后读到信息的读卡器的位置在判定标签的坐标。有些蓝牙定位也使用信号强度和类似的大量部署基站来增加定位的精度。
飞行时间(TOF)定位又分为两种:双向测距(TWR)、飞行时间差(TDOA)。
TWR是通过标签发出定位信号,基站收到后,再发出一个回复,标签收到基站的回复后,根据信号在空中往返所花的时间来计算标签到基站的距离。再根据标签到各个基站的距离解方程计算标签的坐标。这个技术,要求标签大部分时间不能处于休眠状态。例如:假设有3个基站,每一次定位时标签都要测量与这3个基站之间的距离,即要做3次测距;每次测距发一个数据包,等待指定的基站回应,即每个次测距至少有2个数据包。每次定位至少需要6个数据包。并且,如果标签比较多,会出现信号碰撞,需要发出的数据包就会更多。因为每次测距,标签发完数据包后不能进入休眠,必须等待基站的回复。这样,完成一次定位需要很长的时间,在这个期间内标签都处于工作状态,这对电力的消耗是个大问题。
飞行时间差TDOA定位的原理是标签发出一个定位信号,各个基站收到这个信号后,系统根据各个基站收到这个信号的时间差来计算标签的坐标。这个过程看上去非常的简洁,每次定位只需要标签发一个数据包就可以了。标签平时处于休眠状态,定期醒来发送一个定位信号后又进入休眠,非常省电。TDOA是目前已经最具实用价值的精度定位方案。
TDOA至少有两个门槛:时钟同步、计算坐标的算法。
因为要得到时间差,得保证每个基站的时间起点一样,那就需要时钟同步。
算坐标的算法理论倒是不少,但是要搞成程序,这个也有难度
有很多公司想搞TDOA定位,但是被这两个门槛挡在外面了
2.2. 时钟同步
要保证各个基站有统一的时间标准,所以需要进行时间同步。
我们可以根据频率与时间的关系来大致计算需要的精度。
无线电波在空气中的传播速度与光束相等,光速是 299702547 m/s。
1ms光跑的路程299702.547m
1us 光跑的路程299.702547m
1ns光跑的路程0.299702547m=29.97cm
1ps光跑的路程0.000299702547m=0.02997cm
要保证定位精度在30cm以内,我们至少要保证基站的时间误差小于1ns/2,即500ps。
因为技术和实验环境上的限制,直接测试基站间的时间误差很困难。我们的时间同步技术可以达到的技术指标是 250ms 内,基站与标准时钟的时间差小于 10ppm。
我们设置每 250ms 同步一次,每次同步的时候,基站与标准时钟的时间差异在百万分之十以内,实际上大部分基站可以达到5ppm以内。
基站的时钟是由DW1000使用的晶振提供的。晶振本身有制造上的差异会有振荡频率差,即它标称的频率与它工作时输出的频率是有差异的。晶振本身还有稳定性上的问题,温度、电压、物理上的震动、气压等等,都会影响晶振的频率。
我们做过一个实验,基站没有装入机箱,作为PCBA裸板工作时,当有人经过基站旁边的时候,基站的晶振频率发生了很大的变化。表现是正常工作时的时钟同步差异在5ppm左右,有人经过时,差异突然达到数十ppm。
我们使用无线时钟同步。使用一个标准时钟,定期(可以50ms~1000ms内配置)发出同步信号,基站根据收到的时钟同步信号同步自己的时钟。
(此项目开始前,我们联系过Decawave,厂家也有无线时钟同步方案,但是需要付费。厂家的商务代表报价20万美元,只提供文字方案说明和部分代码,没有完整代码)
2.3. 定位算法
TDOA的定位算法理论很多。随便一搜,至少可以找到100篇以上的论文,这些论文都会说自己比其他人的算法厉害,还有各种图表来证明自己很厉害。然后再带一堆看不懂的数学公式。
我们研究过很多的论文,也写了多个定位算法,经过大量的测试之后,最终我们采用的算法也许不是最优的,但这是目前我们能够做到的最快、精度最高的。
总之,我们目前有一个完全自主知识产权的、实用的计算坐标的算法,每一行代码都是我们写的。
2.4. 纠偏算法
很多时候,计算出的坐标是有误差的。影响误差的因素很多,误差可以分为两类:固定误差、动态误差。
固定误差。例如在定位区域有一些大的金属物体之类的,这些会影响定位。我们有一个客户的现场是金属屏蔽房间,四面墙和天花板都是金属板,有一面墙上有玻璃窗。在房间内的其他位置定位都很准,但是在玻璃窗附近就有偏差,这种偏差是固定的。当标签沿玻璃窗的平行线移动时,计算出的坐标点的连线,在离玻璃窗远的点的地方是直线,但在玻璃窗附近会形成一个凹形。
对于固定误差,我们有对应的纠偏算法。通过设置一些基准点,由这些基准点对坐标进行纠正。原理上,离基准点近的坐标,受到基准点的影响较大;离基准点远的坐标,受基准点的影响较小。类似一个有弹性的气球表面受到力的影响发生的变化。
实际现场测试,这个算法有很好的纠偏效果。
动态误差。例如因为空气流动、温度湿度变化、其他电波干扰、人员走动时的遮挡等等,这些影响因素随时变化,干扰不是持续的。我们使用多种滤波器来排除这些干扰。
2.5. 滤波器算法
我们开发了多种滤波器算法。
平均值滤波、卡尔曼滤波、加速度滤器等等。
这些滤波器的目的只有一个,就是排除动态的误差影响。针对不同的使用场景,可以使用不同的滤波器或滤波器组合,并可以配置不同的滤波器参数。
2.6. 多区域切换算法
因为超宽带的特性,国家无线电管理部门限制了信号的发送功率,这使得单个定位区域不可能太大。所以客户现场很少会有单区域定位的,一般会把客户需要定位的区域根据现场情况划分为多个定位区域,多个小的定位区域最终合并成一个大区域。这就涉及到定位区域的切换。
定位区域的切换类似大区域内的WIFI覆盖,WIFI客户端在多个AP之间切换。
例如每个房间划分为一个定位区域,走廊划分为一个定位区域,那么标签从一个房间出来,经过走廊,再进入另一个房间,这涉及到3个区域的切换。
因为UWB的特性,当标签在定位区域(基站围成的多边形)外部时,定位精度会下降,如果有墙壁阻挡,甚至会有信号中断,无法定位。
如果墙壁是金属的,还会导致电波的反射、折射等,这些因素都会导致定位误差。例如有两个相邻的金属墙壁的房间,中间有玻璃窗,当标签在玻璃附近时,因为电波的折射,隔壁房间也会收到定位信号,并且计算出的坐标是隔壁房间。这时,两个房间都认为标签在自己房间内。系统需要判定标签到底是在哪个区域,哪个坐标才是正确的。
我们的多区域切换算法融合了多种指标,例如信号强度、历史坐标、加速度等等,以达到最好的切换效果。
3. 技术演进
下面的技术演进介绍,因为保密原因,无法介绍更多的技术细节。
3.1. 时钟同步
时钟同步技术可能的技术发展有:
DW1000晶振的选择(压控、温补、恒温,压控晶振控制电压与时钟同步算法联动)
有线同步,使用同轴电缆,各个基站使用同一个晶振作为时钟源
3.2. 定位算法
进一步优化,提高计算速度,减少内存消耗
3.3. 纠偏算法
进一步优化,提高计算速度
3.4. 多区域切换
加入更多的参考因素,达到更准确的判断
4. 系统重要部件和功能介绍
4.1. 时钟源
时钟源负责为区域内的基站提供时钟同步信号。它定期发射时钟同步信号,不接收。
目前的量产版本,时钟源与基站的硬件完全一样,通过配置,使其充当时钟源或基站。将来的某些型号会与基站不同,在无线输出部分会加一个PA,增强输出功率,在特殊场景下使用。
早期的系统中,我们使用单独的时间源硬件。因为时钟源与基站的硬件完全相同,现在的版本,我们支持基站同时作为时钟源使用,每个定位区域可以节省一个基站硬件。
4.2. 基站
基站是系统的核心。它负责接收时钟源发出的时钟同步信号,与时钟源保持时钟一致。
基站接收标签发出的定位信号,并通过网络把收到定位信号的时间传送给服务器(定位引擎)。
基站只接收信号,不发送信号。目前量产版本的基站与时钟源的硬件完全一样,通过配置使其作为基站或作为时钟源使用。
基站的主控芯片是STM32,使用POE供电,通过W5500芯片与Ethernet连接。
基站的程序有两部分:Bootloader和Firmware。可以通过配置程序更新固件。
基站或时钟在网络中是一个标准的TCP/IP设备,可以通过DHCP服务器分配IP地址,也可以指定IP地址。
基站具有自动发现服务器(定位引擎)的功能,在复杂的网络结构中,也可以指定服务器的IP地址。
在简单的应用场景下,基站无需配置通电即可使用,它自行申请IP地址,自行发现服务器。
有一个桌面程序,客户或现场工程师可以通过网络配置基站的各项功能,以及升级基站固件。
基站出厂前,我们有两个程序对其进行处理:
一个是基站初始化程序,对其分配EUI64地址、MAC地址等。
另一个是基站校准程序,对基站的某些参数进行校准。
4.3. 标签
标签是系统定位的目标。它平时处于休眠状态,定期醒来发送定位信号,然后再次进入休眠。
目前量产的标签有两种:工牌、手环。这两种款式的标签电路几乎一样,因为结构和体积的原因,PCB有所不同。电路上的唯一区别是工牌款式标签多了一个无线充电电路。
标签也是使用STM32作为主控MCU,DW1000作为无线收发器,锂电供电,带有MPU6050三维加速度计,有一个按钮作为报警或防拆,有亮度检测,有电池电压、充电电压检测,有充电指示LED。有USB接口充电或配置。
手环款式的USB接口使用磁吸端子连接,没有无线充电功能。
工作款式的USB接口使用标准MicroUSB,带有标准的QI无线充电接收电路。
标签休眠时的最小功耗15uA。
我们提供有桌面版的配置程序,客户或现场的工程师可以对标签的参数进行配置。
标签出厂前出有一个初始化程序,对标签分配EUI64地址。并记录到公司的数据库中。
4.4. 定位引擎
定位引擎运行在服务器上,使用Java编码。
发布的版本使用ExcelsiorJET编译成EXE,可以兼容Windows/Linux平台。最新版本的定位引擎使用C++ 17编写,可以运行在 Windows 上,可以作为命令行程序运行,也可以安装为 Windows 服务。可以对程序略作修改后运行在 Linux 上。
定位引擎的主要任务是接收基站发来的定位数据包,计算标签的坐标。
要定位的地区按现场情况划分为多个定位区域,每个定位区域部署一套餐定位系统(1个时钟源、3或4或5个基站)。
定位引擎会根据计算每个标签发出的某个编号的定位数据包被各基站收到的时间,计算时间差,根据定位算法,解方程,计算出标签的坐标。根据纠偏算法,得到标签更精度的坐标,再根据多区域切换算法,选择正确的区域计算出的坐标。
在上述处理过程中,根据配置适当应用对应的滤波器对数据进行处理。
最终输出的数据有两类:定位坐标、定位消息。
定位坐标:经过完整的处理流程后,最终计算出的标签坐标。对于每一个标签来说,会定期向空中发送无线定位数据包,每个数据包都有一个ID。坐标计算出来后,系统内部会通知到接口程序。输出的坐标数据单位可以配置为米(相对坐标原点的x/y/z坐标米)、经纬度(需要事先配置坐标原点的经纬度)。
定位消息:基站收到标签发来的定位数据包后,会发送给引擎。引擎立即会发生一个事件,通知到接口程序。有时,因为某些原因,标签发出的定位数据包不是每个基站都能收到,当数据不完整时,无法计算坐标。但是这些定位数据包也是有意义的,其中包含有标签的一些信息,例如对应基站收到该信号时的信号强度(可以大致判断标签离该基站有多远)、标签的电池电压/充电电压、三维加速度计的数据等等。
4.5. 客户端程序
为了便于客户集成,我们提供了一个客户端程序(基站于Web的Java程序)。
该客户端程序服务器端使用Tomcat作为容器,用户使用浏览器访问。
定位结果的表现方式有两种:二维、三维。
二维方式:我们提供了Openlayers(一个开源标准的GIS前端)作为地图前端,客户可以加载自己的地图作为底图,用户可以在地图上实时看到标签的坐标。
三维方式:我们提供了Cesium作为3D前端,可以加载客户现场的3D模型,并在3D场景中实时显示定位目标。
(因为3D的Z坐标计算不准确,再加上3D的实用价值不大,我们已经取消3D的展示。)
4.6. 接口(协议)程序
因为最终发布的定位引擎是单独的程序,我们使用一个TCP端口与外部的应用程序通讯。
接口协议包括了引擎参数、基站、标签、区域、时钟源等配置数据的双向同步。还包括定位数据通知、消息通知等。
目前我们实现了Java的客户端(应用程序),向客户开源。
如果客户需要,也可以使用自己喜欢的语言,例如Delphi、C、Python等自行编写客户端接口程序。
5. 关于精度的说明
有部分友商宣传他们的系统精度达到cm级,可以在10cm之内,看上去很厉害。
其实,单纯说精度是没有意义的。
假设,正常情况下我们每次定位计算出来的坐标有50cm的误差,这个误差可以偏左、或右、或前、或后,无论如何,它总是在正确的坐标附近呈正态分布。如果我们直接输出这个坐标,会发现有0cm~50cm的误差。但是如果我们计算1000次之后,再把这1000次坐标取平均值,误差就会变成50/1000cm左右(这里计算不太严谨,因为也有总是往某个方向偏的情况),完全在1cm之内了。
所以谈精度,要有限定条件。
6. 成本分析
据我们所知,有不少公司有进入这个领域的打算。但是因为技术上的门槛限制,最终实际进入这个领域的公司不多。
我们分析一下投资这个项目要花多少钱。
项目组的最小人员配备大约是这样:4个软件工程师(1个嵌入式开发、1个服务器引擎开发、1个客户端程序开发、1个桌面程序开发)、2个硬件工程师、1个技术总负责人。合计7个人。
假设平均工资每人1万元,每年工资84万。如果速度快,也许2年内可以出成果,如果速度慢,也许要3年出成果。无论如何,在这样的人员配备下,要达到可以出交付给客户的成品,至少需要3年。3年的人员工资是252万。
如果加上其他的费用,例如分摊的管理费用(经理、财务、协理的工资费用)、租房水电、社保医保等,至少要翻一倍,也就是504万。
开发所需的元器件、样板费用几万元就可以了,基本可以忽略。
请注意,您付出500万之后,这个项目不一定成功。也许会被一个技术障碍卡住,会花更多的时间,也就是花更多的钱。
我们计算出这个500万这个数字,是因为我们花了这么多钱。
出售拥有的UWB技术,我们并未期望能收回全部投资。我们只是不希望这些成果被闲置浪费。
7. 您将得到什么
我们假设您采用完全买断的方式购买这个项目。
如果是这样,我们会移交我们手上全部UWB高精度定位系统相关的文档资料、代码、产品样品等等。总之一句话,就是我们手上与定位相关的东西全部都移交给您,我们不会向第三方透露相关的信息(不会再卖一次),我们也不会再开展与此相关的业务(不会与您在这个领域竞争)。如果我们的客户需要使用定位产品,我们会作为经销商向您采购。
我们移交的东西包含以下:
产品介绍说明文档。包括我们对外宣传的文档、视频等。
产品开发文档。涉及到产品开发的有关文档。
产品代码。与产品相关的所有软件代码,确保您能根据这些代码编译出最终可执行程序。
硬件原理图、PCB图。确保您能根据PCB图直接制作PCB、SMT。
硬件的采购渠道。确保您能采购到相关的元器件。
相关的工厂交接。包括外壳生产、PCB生产、SMT等涉及的生产厂家,确保您能快速进入生产状态。
生产流程说明。包括产品的测试、初始化、校准等,确保您能交付给客户合格的产品。
如果有必要,我们可以提供一定时间的技术支持,确保您的团队能及时上手。 如果有其他的需求,可以具体详谈。
联系方式 QQ 30823154 手机 18985041403 邮箱: