有个兄弟搞嵌入式,拖笔者帮忙搞一下蓝牙芯片的AOA定位功能。酒也喝了,菜也吃了。 时间是要花的,话说笔者有8年没有搞过硬件了,稍微有点手生…… 先从分析开始,自下而上进行设计,据笔者所知,目前AOA蓝牙定位的准确度可以到10cm, 可以满足室内定位,例如机器人送餐服务、扫地机器人、停车导航等应用场景。
芯片选型:
先说下芯片厂家是怎么回事儿:大家都知道intel是做x86主机和服务器芯片的,高通是做soc的,也就高端手机arm芯片。海思也是做soc的,主推4k,8k硬件编解码内置h264协议电路的arm芯片,这些片上外围电路海思还是有点心得的。 芯片其实有很多种,处理器,基带芯片,dsp,移位寄存器,存储矩阵(也就是内存条),显卡,等。 蓝牙,是是一颗芯片,内置一个载频在2400G ~ 2400G + 128M Hz之间的无线射频信号收发器,在此之上做一个物理链路层等的传输协议就叫蓝牙(就好比,tcpip协议是在网线上面的byte数据,经过层层封装和抽象,形成Http/https/websocket/udp等协议,蓝牙协议也是封装了byte之后的协议)。
芯片在加工工艺上有12nm制程,7nm制程序等区别。 在二极管形态上有ttl(3~5v为高电平)工艺和cmos(1.8v为高电平)工艺的区别。 cmos工艺更省电,因此ti的蓝牙芯片,zigbee芯片全部是cmos工艺的。
AOA定位原理:利用三角函数数学关系,用3个基站,去发射信号出去,蓝牙设备收到信号后,返回回去的时间,无线载波的速度是固定的,就可以计算出蓝牙芯片到3个蓝牙基站之间的距离。形成三角形。利用二元二次方程,可以定位出蓝牙芯片的当前位置,形成轨迹。 在地下停车场这种地方,蓝牙AOA定位可以用于特殊车辆的监控。
根据价格和芯片性能,我最终选中的芯片型号为cc2640r2l,单颗芯片不到1个美金。
协议功能封装方法:模块的协议,是以AT指集的形成发布,设计方案如下:将原来的AT指令集保持不变,send和recive由原来的映射到串口,变为映射到数组或切片中,新的应用代码单独创建线程 与 蓝牙协议的虚拟AT指令集进行通讯,节省一颗外部的控制器。
cc2640r2l 蓝牙芯片架构图:
soc芯片解析:一个电路板(例如手机主板),包含LDO 电源供电部分,射频基带(其实就是天线和高频信号发生器,混频器,滤波器),定时器、硬件控制器、缓存、mmu管理器、逻辑处理单元(累加器、除法器、移位寄存器)、串口
sdk下载:从ti官方下载蓝牙5.1协议的sdk(类似于Linux kernel里面的tcpip协议部分的代码):
Ide安装:
一开始选择IAR编译器,中间发现IAR的sdk安装是全量安装(这厮比较sb,把所有主流芯片厂家的sdk全部集成在自己的exe安装包里面,一次安装消耗7GB存储空间,过分了),而且需要破解才能用。 于是选择TI官方的一款ide叫Code Composer Studio 的:
Version: 10.4.0.00006 OS: Windows 10, v.10.0, x86_64 / win32Java version: 1.8.0_144
经过一番操作,终于编译通过蓝牙芯片:
蓝牙芯片是标准的协议,代码不需要写,芯片厂家会去实现的很完美。 AOA开发来说后面要做的事情其实没有多少了:
用3树莓派挂载蓝牙芯片或模块,实现AOA基站的功能(记录mac address个探测点数据(不同时间点,探测到的蓝牙设备与基站的距离数据))、gin 框架或mqtt实现的服务器,对收到的三角函数采样数据进行计算,定位出目标设备的相对位置。 结合基站的绝对位置,算出目标设备的绝对位置,利用3D显示技术,将3D 地图导航数据推送给手机app,实现底线停车场停车导航。(设计效果是要跟高德地图的3D 立体导航效果一样)。
地下停车场地图构建:
以三维激光扫描雷达获取精确的室内点云数据为研究对象,提出了一种快速、准确的提取点云中的建模信息和各模型相互关系的方法,对室内三维场景进行重建。首先对室内场景进行多站三维激光扫描,对获得的三维激光点云数据进行预处理、配准得到整体的点云模型,然后进行截取取得截面图,对截面图进行重绘测量得到其精确数据,最后根据所得数据的特点使用不同的建模软件对室内的框架和细部结构分别重建并组合,完成室内建模工作。
系统架构: