在我们的生活中无论是微信查找附近的人,还是地图查找美食,还是车载导航,我们几乎每天都在使用定位技术,我们的嵌入式设备中,自然也离不开定位技术。
目前市面上常见的定位技术:
GPS定位,基站定位,wifi辅助定位,AGPS定位,Glonass定位,北斗定位。
无论环境多么复杂,一般我们的手机定位都是比较准的,一般都是结合了好几种方式,加上各种软件算法达到了目前的程度。苹果手机中就使用了GPS,基站,wifi,AGPS,Glonass几种定位方式。
1.GPS定位
美国的一种定位技术,无需连接网络,只要在户外,就能定位,定位精度比较高,但是我们平时打开地图的时候会发现,一般只打开gps,户外比较准,但是到了室内阻挡了卫星信号肯定就呵呵了,所以一般地图为了达到好的效果还会要求我们打开数据流量,这就是在GPS信号不好的时候,使用其他方法辅助定位。
应用场景:户外适合用GPS,室内等没gps信号的场景定位就不准确了。
定位精度:5~10米
2.基站定位
基站,中国移动,电信等建立的,基站位置他们肯定知道啊,通过至少三个基站来确定,根据你的信号强度,算出你的位置。
知道原理,我们自然也就清楚了,信号不好,或者基站少的地方,这种定位方式肯定就不准啦,不过目前信号覆盖的还不错。
应用场景:在gps信号不好的室内,使用这种方式辅助还是比较常见的。
定位精度:10米以上
3.wifi辅助定位
这种方式肯定就是依赖wifi了,每个wifi都有唯一的mac,侦测周围所有的无线网络基地台的MAC地址,然后对比数据库中的MAC坐标,计算出所在地,和基站定位原理类似
应用场景:主要弥补室内定位精度问题,无wifi自然就用不了啦
4..A-GPS定位
从名称上就可以看出,是一种辅助GPS定位的方法
原理就是,先通过基站大概算出你的位置,然后通过服务器算出适合你的卫星,然后你有目的性的去搜星,提高你搜索卫星的速度。
这种方式,依赖网络,然后本质上还是使用GPS定位,无法解决室内定位不准问题。
5.讲完了上面的几种定位方式,我们的嵌入式设备根据自己的应用场景,怎么来使自己的设备定位相对更精准些应该有了一定的了解。
但是我们肯定还会有一些疑问:
(1)提到定位技术我们自然会想到两个词汇,GPS和GPRS,虽然一字之差,但是却有很多的不同。
GPS:全球卫星定位系统
GPRS:通用无线分组业务,整的挺官方不知道干啥,GPRS运营商中国移动,提到中国移动我们就知道了吧。我们的打电话,发短信都是依赖这种技术。
说道GPRS又会提到GSM,可以理解为GPRS是在GSM基础上发展而来的,是GSM更高一个层次。GSM(电路交换系统),GPRS(分组交换系统)
说道这里我们就知道这两个词完全不是一回事,一个用来传输数据,一个用来定位。
(2)全球定位系统,GPS和中国的北斗卫星是目前的两大定位系统。有什么不同呢?
国家不同,卫星数量不同,定位精度不同,北斗有短报文通讯功能,谁牛逼咱就不讨论了,目前使用最多的还是GPS。
6.我们的产品为工业用设备,需要远程上报数据,并且需要精准定位,工业环境wifi什么的肯定就不现实了,我们采用GPS定位和基站定位,室外使用GPS定位,室内切换到基站定位,来达到一个相对较好的定位精度。
7.嵌入式设备中自己开发定位模块肯定是不现实的(也能自己做),我们直接对接别人成熟的模块就可以了,芯片级的开发(自己做定位模块)肯定代码开发更复杂但是可控性更好,遇到问题解决的方式更多。用别人的模组肯定就是要遵循人家的规则,遇到bug肯定要通过自己的算法和机制来解决。
像GPS的这种模块,实质上就是通过我们的MCU以SPI,或者uart等方式连接,发送AT指令来进行交互,对接很容易,但是想对接好还是比较难的,比如我们等待模块回复的时间多少合适,怎么切换定位方式,丢包了怎么处理,出现异常定位怎么处理等等问题都需要考虑。
8.我们使用的模组为U-blox SARA-G350的模组。GPRS网络注册AT指令
AT //AT测试
ATE0 //关闭回显
AT+UGPIOC=16,2,0 //设置第16个管脚(GPIO1),模式2(网络状态指示),输出
AT+CMEE=2 //设置错误信息格式(详细)
AT+COPS? //查看GSM网络的注册情况
AT+CREG=2//设置GSM状态提示
AT+CREG?//注册上GSM网络??
AT+CSQ //获取信号质量
AT+CMGF=1 //设置短信格式
AT+CNMI=2,2,0,0,1 //设置短信接收提示方式
AT+UPSD=0,1,"CMNET" //设置APN运营商
AT+UPSDA=0,1 //将GPRS设置存入非易失内存
AT+UPSDA=0,3//激活GPRS连接
AT+UPSND=0,0//检查所获取的IP地址
AT+UGAOP="eval1-les.services.u-blox.com",46434,1000,0 //连接u-blox的远程服务器
AT+UGAOP?
AT+USOCR=17 //创建socket连接
AT+USOCO=0,"192.xxx.xx.xx",61331 //IP和端口号
AT+UDCONF=1,1
AT+ULOCCELL=1
AT+ULOC=2,2,1,40,1000
AT+USOWR=0,3 请求sicket中写入两字节数据
@ 提示可以发送数据
123 //发送数据
GPS的指令之后进行补充说明,先到这里。