• iBeacon 是苹果公司推出的一项室内定位技术,通过软件和硬件的结合,从而大大提高室内精度,从原来的几百米,几十米,提高到一米以内的定位精度。有了这么高精度的定位能力,许多原来只能想一想的事情,现在可以...

    蓝牙4.0技术qq交流群:228014986

    iBeacon 是苹果公司推出的一项室内定位技术,通过软件和硬件的结合,从而大大提高室内精度,从原来的几百米,几十米,提高到一米以内的定位精度。有了这么高精度的定位能力,许多原来只能想一想的事情,现在可以做到了:当你走到某个商品前,手机应用自动跳出商品的介绍,让你的购物体验感,大大增强。下图是一个典型的应用场景:    

      

    Estimote算是国外最早开始研究和推广iBeacon技术的厂商,并且成功的获得了一大笔的风险投资,目前来说在业界做的也算是比较成熟好用的。提供了从iBeacon产品,软件SDK,移动端APP一整套完整的解决方案。    



    今天我们用原创的BLEduino+ZBModule,也实现了整套iBeacon的功能,废话少说发一个试验过程给大家看看:

    首先介绍一下BLEduino,它是科尔原创的将Arduino和BLE技术结合开源编程硬件,

    Arduino Leonardo为设计原型,结合了BLE的扩展坞,可以方便的配合Arduino进行通讯。

    下图是已经插上ZBModule蓝牙4.0模块的BLEduino全貌:   


     

    实操过程:

     

    1.       BLEduino底板烧录程序:

    由于Arduino本身只是一个可以编程的基础平台,你可以按照你自己的想法,设计你想要的效果。这里科尔已经写好了程序,同志们只需要烧录即可:

    (考虑到很多同志可能并不了解Arduino,在此多啰嗦几句,把整个过程写下来)

     打开ArduinoIDE,针对BLEduino,进行IDE设置(没有IDE的去arduino.cc自行下载):



    按照图中所显示,选中IDE对应的板卡型号,这部很重要,否则代码无法编译,或者无法运行。



     选择串口,一般情况下对于笔记本来说本身是没有串口的,插入BLEduino后在设备管理器中可以看到对应的串口,将他选中即可记得先插上板子,再打开IDE,否则找不到串口)

    接下来复制粘贴代码:



     依次点击红框中的2个按钮,等到程序下载完成状态栏的底部会显示


    2. 设置iBeacon

    当把程序烧录到BLEduino之后,即可通过ZBWorkBench来对蓝牙4.0模块进行设置。

    如发射信号强度,时间间隔,模块名称等等:


    如下图可以看出,通过图形界面,蓝牙常用的设置项都可以直接配置。

    设置完基本属性后,就是设置iBeacon了:



    iBeacon 模块默认为打开,UUID,MajorID,MinorID默认为0,可以自行设置。此处我们就姑且用默认的吧。

    设置好了这些,设备端的工作,就已经全部完成了,接下来就是iOS软件的工作了。

     

    3.iOS软件设置:

    打开iBeacon软件:


    点击iBeacon Transmitter,进行iBeacon数据基站的设置:



    点击“+”增加新的设备



    到此iBeacon已经设置完毕。现在BLEduino已经可以和iOS设备通讯了!


    退回主页,点击Locate iBeacon开始搜索周围的iBeacon设备:



    搜到了一个设备,点击进入:



    可以看到,设备的信号强度,UUID等信息。

    点击Distance即可进入测距模式:



    iOS设备挪近点:



    实验结果:

    经过这个实验,发现iBeacon还是很好用的,反应很灵敏,定位也相对来说算是比较准确啦,

    但是有一个小问题,iBeacon实际测距精度,与设备摆放有一定的关系,如果你硬要把iBeacon设备放到犄角旮旯里面,请对iBeacon进行定位精度校准。否则他测出来的距离不是那么准确。原则上部署的每一个iBeacon定位基站,都是需要进行信号校准的,此过程本身也很快,所以要达到良好的使用体验,请还是做一下校准吧。


    另外:

    目前安卓4.3系统也开始支持BLE,Google中也有许多IBeacon的应用下载,经测试在安卓下IBeacon同样适用,但是安卓比较挑手机,主流三星,HTC,没啥问题,其他的就只有自己去测试了。祝君好运

     

    如果对IBeacon感兴趣的同志们,也可以去淘宝搜索关键字 “极客科尔”找到相应的宝贝,买回去玩玩。


    蓝牙4.0技术qq交流群:228014986

    技术咨询,工程定制开发:gzble$qq.com (请将$换成@)

    展开全文
  • 利用RSSI测距和三角质心算法简单的用JAVA写了个安卓应用程序
  • 这种技术能够实现室内定位,让你的手机能够知道是否处于一个Beacon的范围内。使用这种技术能够产生很多应用程序:比如帮助你在停车场中找到你的汽车,或者在零售店中根据所处位置提供优惠券或者其它一些位置相关的...


    -----------------------------------------------------------------------------------------------------------------------

    原文作者:Adam Warski

    原文地址:http://www.warski.org/blog/2014/01/how-ibeacons-work/

    译文作者:Jianan - qinxiandiqi@foxmail.com

    版本信息:本文基于2014-09-02版本进行翻译

    版权声明:本文经原作者许可进行翻译,保留所有权利,未经许可不得复制和转载。

    -----------------------------------------------------------------------------------------------------------------------


    iBeacon是最近非常火的话题。这种技术能够实现室内定位,让你的手机能够知道是否处于一个Beacon的范围内。使用这种技术能够产生很多应用程序:比如帮助你在停车场中找到你的汽车,或者在零售店中根据所处位置提供优惠券或者其它一些位置相关的服务。还有很多我们现在无法想象得到的应用程序。


    现在有很多种关于iBeacon是什么,以及我们可以如何使用它们的解释。然而从技术角度上来说,它们是如何工作的?底层的技术使用的使用Bluetooth LE,因此。。。


    What is Bluetooth LE?(什么是Bluetooth LE,简写BLE)


    Bluetooth Low Energy(BLE)是2010年发布的蓝牙4.0技术规范的一部分。它起源于2006年Nokia的Wibree技术,但最终被整合进了蓝牙。这是一组与传统蓝牙不同的协议,并且使用的设备上也不会向后兼容。因此,现在市面上你可以看到三种类型的设备:

    1.Bluetooth设备:只支持传统蓝牙的设备。

    2.Bluetooth Smart Ready设备:同时支持传统蓝牙和LE模式的设备。

    3.Bluetooth Smart设备:只支持LE模式的设备。


    最新的手机(iPhone 4s+, SG3+)、笔记本、平板电脑等,基本上都已经支持蓝牙4.0,也就是Bluetooth Smart Ready设备。Beacon,从另一方面来说,这种设备只支持low energy protocols(LE低功耗协议),属于上面说所的“Bluetooth Smart”设备,这也是它们靠一颗纽扣电池就能运行很长时间的原因。老式设备,比如外设、汽车系统、旧手机等通常只支持传统蓝牙协议。


    BLE最重要的特点当然在于它的低能耗。举个例子,一些beacon设备靠一颗微型电池就能够持续发送一个信号两年左右(这种电池一般是不可拆卸的,你可能需要在beacon停止工作之后替换一个新的beacon)。传统蓝牙和LE蓝牙使用的都是相同的波段(2.4GHz-2.4835GHz)。BLE协议的传输速率比较低,因此除了用于发现设备和做一些简单通信之外,不太适合用于传输大量的数据流。在协议条款上,LE和传统蓝牙的信号都能够覆盖到100米的范围。


    How does BLE communication work?(BLE设备如何通信)


    BLE的通信包括两个主要部分:advertising(广告)和connecting(连接)。


    广告(Advertising)是一种单向的发送机制。想要被搜索到的设备可以以20毫秒到10秒钟的时间间隔发送一段数据包。使用的时间间隔越短,电池消耗的越快,但设备被发现的速度也就会快。数据包长度最多47个字节,由以下部分组成:


        1 byte preamble(1字节做报头)

        4 byte access address(4字节做地址)

        39 bytes advertising channel PDU(39个字节用于PDU数据包)

        3 bytes CRC(3个字节用于CRC数据校验)



    对于广告通信信道,地址部分永远都是0x8E89BED6。对于其它数据信道,地址部分由不同的连接决定。


    返回的PDU数据也拥有自己的数据报头(2个字节:声明有效载荷数据的长度和类型——设备是否支持连接等等)和当前有效载荷数据(最多37个字节)。


    最终,有效载荷数据中的头6个字节是设备的MAC地址,所以实际信息数据最高可占31个字节。


    BLE设备可以运行在单一的不可连接的广告模式中(在这种模式下所有的信息都包含在广告数据包中),然而设备也是允许运行在可被连接的模式下(通常情况下都是这种模式)。


    当设备被发现之后,一个连接就会被建立起来。之后就可以读取BLE设备提供的Service,以及每个Service的characteristic(属性,类似于GATT Profile实例)。每一个characteristic都会提供一些值,这些值可以被读取或者修改。例如,一个小型温控器可以开放一个service用于获取当前的温度或者湿度读数(相当于是service的characteristic),同时也可以开放其它的service和characteristic用于设置期望的温度。这里因为beacon不使用连接模式,我将会跳过这些细节。如果你想要了解更多关于连接BLE设备的内容,可以参考Apple's Core Bluetooth guide,尽管你可能不是一个IOS开发者。更多相关技术性的文章,可以参考Introduction to BLEMaking the most out of BLE Advertising mode


    How do beacons use BLE?(beacon设备如何使用BLE)


    Beacon设备只使用了广告通信信道。正如beacon(信标、灯塔)的字面意思,这种设备以一定的时间间隔发送数据包,并且发送的数据被可以被像手机这样的设备获取。也就是说,iBeacon只是BLE广告模式的一种简单的使用,并在此基础上提供了对IOS的一些附加支持。


    如果你试着拦截一段iBeacon广告数据包,例如下面从Estimote beacon截获的数据包:


    02 01 06 1A FF 4C 00 02 15 B9 40 7F 30 F5 F8 46 6E AF F9 25 55 6B 57 FE 6D 00 49 00 0A C5

    (截获以上数据,如果你使用的Mac设备,你可以参考additional XCode download为XCode添加蓝牙扫描和数据包打印工具。如果是Window设备,请参考这里


    以上的数据已经将广告数据包的报头、修正地址、广告PDU数据包的报头和其中的MAC地址部分都移除掉了,也就是说这部分数据只包含了实际信息数据——一共30个字节,符合实际信息数据最多31个字节的限制。


    那么一个iBeacon设备的BLE广告数据是如何组成的?以下是Apple修正的数据格式,整理如下(也可以参考这里):


    02 01 06 1A FF 4C 00 02 15: iBeacon prefix (fixed)
    B9 40 7F 30 F5 F8 46 6E AF F9 25 55 6B 57 FE 6D: proximity UUID (here: Estimote’s fixed UUID)
    00 49: major
    00 0A: minor
    C5: 2’s complement of measured TX power



    根据这些原理,如果你想要实验beacon的功能,你不必需要一个真正的beacon设备。如果你有最新的手机(例如iPhone4S+,SG3+)或者配备蓝牙4的笔记本(例如Retina MacBook),你可以将这些设备转换成iBeacon发送设备和接收设备。以iPhone为例,你可以在AppStore上下载“Locate iB”应用。对于MacOS,可以参考这里。当然你可以可以使用树莓派


    Breaking down the iBeacon format(解析iBeacon的数据格式)


    除了修正的iBeacon前缀数据(02 01 ... 15),其它各部分数据各代表什么?


    Proximity UUID(上面例子中的B9 ... 6D部分):这是将你所有的beacon与其他人的beacon设备区别开的id!例如,目前在商店里某个区域分布着多个beacon形成一条“链带”,用于为顾客提供特定的服务,那么归属于同一条“链带”的beacon将分配到相同的proximity UUID。为这条“链带”设计的专用应用程序将会在后台使用这个UUID扫描到这条“链带”中的beacon设备。


    major编号(2个字节,上面例子中为0x0049,也就是73):用于将相关的beacon标识为一组。例如,一个商店中的所有beacon将会分配到相同的major编号。通过这种方式,应用程序就能够知道顾客位于哪一家商店。


    minor标号(也是2个字节,上面例子中为0x000A,也就是10):用于标识特定的beacon设备。例如一个商店中的每一个beacon设备都拥有唯一的minor编号,这样你才能够知道顾客位于商店中的哪个位置。


    Measuring distance(测量距离)


    最后一个值,TX power,用于确定你和beacon之间距离有多近。根据这个值不但可以获得粗略的信息(比如靠近/远离/不在范围内等),也可以获取精确到米的距离(当然你也可以转换为以步为单位的距离)。那么如何实现?


    TX power(上面例子中为0xC5=197,根据2的补码测得256-197=-59dBm)是距离设备1米测得的信号强度值(RSSI- Received Signal Strength Indication,接收到的信号强弱指标)。假如接收到的信号强度减弱了,那么我们可能在远离。只要知道1米距离的RSSI,以及当前的RSSI(我们可以从接收到的信号中一块获取到这些信息),那么计算出当前的距离是可能的。IOS已经实现了个这个功能,对于其它平台需要自己手动编码计算,可以参考这里


    译注:Java代码粗略计算距离代码:

    protected static double calculateAccuracy(int txPower, double rssi) {
      if (rssi == 0) {
        return -1.0; // if we cannot determine accuracy, return -1.
      }
    
      double ratio = rssi*1.0/txPower;
      if (ratio < 1.0) {
        return Math.pow(ratio,10);
      }
      else {
        double accuracy =  (0.89976)*Math.pow(ratio,7.7095) + 0.111;    
        return accuracy;
      }
    }   

    然而,在实际应用中,由于人体或者其它通信阻碍物都有可能削弱信号,因此这个距离只是一个估算值。


    IOS integration(IOS整合)


    IOS已经整合了iBeacon。当你进入beacon的范围内,你的应用程序就可以接收到通知,即使你的应用程序处于在后台也能接收到。一个应用程序可以注册一个区域的进入或者退出事件,因此即使应用程序没有运行也可以被唤醒。为了响应这些事件,应用程序可以发送例如本地推送通知,提示用户打开应用程序查看商店的促销广告(这些促销广告可以从网络上面获取),或者是其它相关的内容。


    更准确的说,当手机处于不活动状态时,也就是IOS进入了低电量监控模式的时候,只有iBeacon区域进入/退出事件能够被接收到。当手机和应用程序处于活动状态,你可以进入ranging模式,这个能够让你检测的信号强度和估算距离更加准确。


    注意你的手机检测beacon需要花费一定的时间。首先,beacon设备是间隔一定的时间才发送一次广告。其次,如果你的手机处于非活动模式,它只在有些时候才会检测蓝牙信号。一个beacon设备要被检测到,上面两段工作时间就需要有交集。实践证明,它可能需要15分钟才能检测到一个beacon设备。


    按步骤开发一个iOS iBeacon应用程序可以参考这里。Beacon的制造商通常也会提供SDK帮助开发Beacon应用程序。参考Estimote的iOS SDKAndroid SDK


    How can I get some beacons?(如何获取Beacon设备)


    Beacon设备资源现在比较稀少,你通常需要等上几个星期才能拿到货,但可以肯定的是将来这种情况会改善。


    因此,最快的选择就是创建一个Beacon模拟器:将iPhone/Android/MacBook/其它笔记本/树莓派转换成了Beacon模拟器。


    第二种选择就是试着去订购一些Beacon设备了:


        pre-order Estimote beacons; 3 for $99

        Kontakt beacons come in a couple of packages; 4 for $99, 10 for $279

        RaspberryPi kits from RadiusNetworks: 1 for $99

        RedBearLab offers BLE shields for Arduino for $30

        Bleu sells USB-iBeacon dongles. 1 for $40, 5 for $150


    Alternatives(替代品)


    iBeacon不是唯一一种基于BLE近距离技术开发的设备。高通同样正在开发自己的Beacon——Gimbal,并集合了iOS和Android SDK。它们提供的功能比较类似,但是BLE广告的数据格式可能不一样。我的开发工具还在运送途中,因此我还没有测试过,但是这种Beacon肯定很有趣,尤其是它的价格最低只有5美元。


    What's next?(下一步是什么?)


    现在还没有做的事情就是开发一些基于Beacon的应用程序。为了实现这个目的,记住SoftwareMill:我们经常寻找一些有趣的项目来开发。




    展开全文
  • 一篇关于GPS定位写得最详实清晰的文章之一介绍篇过去,如果你的女友是个路痴,大概会有这样的对话……——你在哪儿呢?——啊?我在马路上啊。——有什么特征?——头顶有个月亮。——你旁边有什么啊?——有个路灯...

    一篇关于GPS定位写得最详实清晰的文章之一


    介绍篇

    过去,如果你的女友是个路痴,大概会有这样的对话……

    ——你在哪儿呢?

    ——啊?我在马路上啊。

    ——有什么特征?

    ——头顶有个月亮。

    ——你旁边有什么啊?

    ——有个路灯。

    ——有没有路牌啊?路牌上写的什么?

    ——我看看啊。还真的有,上边写着“禁止停车 违者罚款”。

    ——姑奶奶,我真是服了你了……

    ——哼,你是不是不爱我了,你肯定是不爱我了,你是不是喜欢上了新来的那个前台?

    ——。。。

    ——我跟你说那个前台绝对是个伪娘!(开启八卦模式)还有还有,小王买了个新口红真好看,你也给我买好不好……

    ——(一脸崩溃的表情)

    (路人甲:你是不可能有女友的!)

     

    现在,如果你的女友是个路痴……

    ——你在哪儿啊?

    ——我发定位给你!乖乖的来接老娘。

    ——遵命。。。

     

    作为一个标准路痴,曾经有N次陷入绝境黑历史。正所谓:手持一纸地图,双眼紧盯道路,环顾四周茫然,我现身在何处?

     

    后来随着智能手机的普及,我以为情况能有所改善,后来才发现是我想多了——为嘛xx地图、xx导航还是总让我往死胡同里跑,非让我开车过湖?

     

    再后来,随着手机操作系统的迭代,芯片的升级,定位才慢慢变得精准、可靠。我再也不用湖里游泳了……当然,这都是后话了。

     

     

    (哥开的不是车,是!寂!寞!)

     

    慢慢的随着了解的深入,才明白原来定位有这么多区别,里边的学问可大着呢。

     

    定位给方式有很多种,室外定位有基站定位,卫星定位等方式;室内定位有BLERFIDWi-Fi等方式;还有其他IP定位,惯性导航等等方式。

    定位方式

    定位原理

    定位方案

    应用场景

    成本

    设备要求

    精度

    基站定位

    上报设备周边基站信息,服务器查表、解析并返回定位结果

    单基站定位

    多基站定位

    室外

    极低

    设备成本低

    需后端支持*

    500m

    卫星定位

    使用天线搜索卫星向地表发射的电波,解算后输出定位结果

    多星定位

    室外

    较低

    设备成本低

    5m

    差分定位

    卫星+结合基准站的数据进行定位

    多星定位

    室外

    很高

    设备成本高

    需专有后端支持*

    5mm

    BLE iBeacon

    使用设备接收蓝牙信号,根据信号强弱计算距离,输出定位结果

    单点定位

    多点定位

    室内

    较高

    设备成本较高

    30cm

    RFID

    使用设备接收射频信号,根据信号强弱计算距离,输出定位结果

    单点定位

    多点定位

    室内

    很高

    设备成本较高

    10cm

    Wi-Fi

    上报设备周边路由器MAC信息,服务器查表、解析并返回定位结果

    单机定位

    多机定位

    室内

    较低

    设备成本低

    需后端支持*

    10m

    IP 定位

    上报目标设备公网IP地址,服务器查表并返回定位结果

    -

    不限

    极低

    设备成本低

    需后端支持*

    10km

    佛系

    手持佛珠

    念念有词

    -

    不限

    0成本

    无需设备

    随缘


    “需后端支持”指需要连接到服务器进行数据解析,才能获得定位结果;

    需专有后端支持”指可能需要付费才能获得相关数据,终端设备才可以进行定位。

     

    本文咱们就说说和物联网关系最密切的卫星定位那些事儿。

     

     

     

    众多卫星定位系统中,最广为人知的就是GPS (Global Positioning System)了。它是美国在1958年开始研发,1964年投入使用,1994年实现全球覆盖的全球卫星定位系统。 

     


     

    GPS24颗工作星和4颗备用星组成。卫星工作在互成55度的6条高度为2.02KM的非同步轨道上。如此一来,在全球的任何地方、任何时间都可观测到4颗以上的GPS卫星。GPS卫星向地球发射导航电文(系统时间、星历、历书、卫星时钟修正参数、导航卫星健康状况、电离层延时参数等内容),GPS终端收到卫星发送的数据,经解算即可确定当前位置,并以NMEA0183格式,WGS-84坐标系输出数据。 

     

        

     

    也许有的读者会问,万一卫星坏了怎么办,GPS岂不是要失准了?其实这个担心是多余的啦,轨道上不仅有备用卫星,每年NASA也会委托Space X补发和替换寿终的卫星。

     

    当然,卫星定位系统不是GPS一家独大的。只是因为GPS的先驱地位,所以很多人也都习惯性的把所有卫星定位系统都称之为“GPS”。

     

    毕竟,使用GPS卫星之时,就是被美国钳制之日。GPS卫星是被美国军方控制的,他们可以随意调节某地区的定位精度(如中东地区),甚至让终端设备解算结果南辕北辙。而且GPS卫星是单向广播的,不具备双向通信能力,功能略显单一。

     

    有鉴于此,很多国家也都在建设或已建成卫星定位系统。如中国的北斗(BeiDou)、欧洲的伽利略(Galileo)、俄罗斯的格洛纳斯(GLONASS)、印度的IRNSS等。

     

    目前,中国的BeiDou北斗已经具备商用能力。配合基准站,甚至能给客户提供精确到毫米的定位服务。同时,BeiDou北斗也弥补了GPS的不足,具备短报文能力(驴友、海航必备。绝非手机的基站可比拟,只是资费超超超感人)。

     

    既然太空中有那么多卫星,又有那么多种不同的卫星定位系统,那么如何知道某一片区域是否有定位卫星覆盖,以及有哪些卫星覆盖呢?Android手机请在应用商店搜索“GPS Data+”并安装,打开后即可看到当前正在使用的定位卫星:

     


     

    由于智能手机操作系统、定位芯片、天线、算法的差异,所以并不能搜索到所有用于定位的卫星系统。通常来说,智能手机只能搜到并使用部分(如图,即GPS+Beidou+GLONASS+QZSS,没有GalileoIRNSS)。

     

    各导航系统不同频段的工作频率

    导航系统

    国家

    频段

    工作频率

    GPS

    美国

    L1

    1575.42MHZ ±1.023MHZ

    L2

    1227.60MHZ ±1.023MHZ

    L5

    1176.45MHZ ±1.023MHZ

    GLONASS

    俄罗斯

    L1

    1602.5625MHZ ±4MHZ

    L2

    1246.4375MHZ ±4MHZ

    BD1

    中国

    S

    2491.75MHZ ±4.08MHZ

    L

    1615.68MHZ ±4.08MHZ

    (左旋圆极化)

    BD2

    B1

    1561.098MHZ ±2.046MHZ

    B2

    1207.520MHZ ±2.046MHZ

    B3

    1268.520MHZ ±10.23MHZ

    Galileo

    欧洲

    L1

    1575.420MHZ ±1.023MHZ

    E5b

    1207.140MHZ ±1.023MHZ

    E5a

    1176.450MHZ ±1.023MHZ

    E6

    1278.750MHz ±1.023MHZ

    QZSS

    日本

    L1C

    L1CD

    1575.42 MHz

    L1CP

    L1-C/A

    L2C

    1227.6 MHz

    L5

    L5I

    1176.45 MHz

    L5Q

    L1-SAIF

    1575.42 MHz

    LEX

    1278.75 MHz

    IRNSS

    印度

    L5

    1176.45 MHz

    S

    2492.028 MHz

     

    观察一下表格,我们可以发现,日本简直是太“鸡贼”了——L1 C/AL1CL2CL5信号跟GPS卫星信号是完全兼容的,同时L1-SAIF还可以给日本地区提供高精度定位服务;LEX信号频点和欧洲Galileo系统的E6频点重合。也就是说,日本的QZSS当前可以作为GPS的补充,日后等到Galileo系统正式提供服务,QZSS也能实现Galileo系统的补充。

     

    接下来进入喜闻乐见的“你问我答”环节:

    Q:为什么有的时候手机定位还是很慢?

    A:信号问题、基带问题等,一切皆有可能。如果想要提高定位精度,最简单方式就是——买!个!新!手!机!

     

    Q:我想试试伽利略,有没有支持的手机呢?

    A:华为有部分机型支持。

     

    Q:小米8刘海屏不好看啊,你看VIVO NEX多美。对了,小米8说是全球第一个支持GPS双频定位(L1L5)的手机,好像很牛逼,能做到厘米级定位吗?

    A:不能。没有基准站的支持,双频顶多是减小误差,对高精度定位无助。所以,还是洗洗睡吧。

     

    Q:北斗的短报文资费究竟有多感人?

    A:十几块一条吧。你可以去某猫、某宝查看一下报价。

    至于说语音通信,也有海事卫星电话可用,不同国家资费不同,从十几块到几十块一分钟;什么?你想用卫星上网?按量计费$10/1M,怎么样,用的起吗?

     

    Q:既然已有GPS,为什么还要重造轮子?

    A:因为GPSL1L5是民码,大众可用,但是美军曾经在战时关闭过某些战区的数据覆盖,为了避免这种被人卡住喉舌的尴尬,所有必要发展自己的卫星定位系统。

     

    Q:卫星定位系统只在地表有用吗?

    A:非也。负海拔地区(只要有信号)、空中、甚至大气层外都可以。需要注意的是,水体、岩石等密度高的物体内无法使用。

    大气层外使用,还要注意广义相对论对时钟造成的影响。

     

    Q:《007 明日帝国》中,大反派使用了某种很牛逼的设备,通过某些手段改变了卫星参数,劫持了一艘船,这种事情可能发生吗?

    A:这种事情,世界上已经发生过了。

    因为GPS信号没有认证方式,且信号极弱,非常容易被劫持。例如HackRF One就可以模拟并发射GPS信号;甚至让大疆无人机在禁飞区起飞。

    伊朗也是用过类似的技术,成功捕获美国的无人机。

     

    Q:最少搜到多少颗卫星才能定位成功呢?

    A:因为采用三角定位的原理,所以至少3颗卫星才能实现精准定位;具体要求如下:

    使用卫星数

    能否定位

    备注

    0

    无法定位


    1

    无法定位

    可以更新UTC时间和日期;

    2

    无法定位


    3

    可实现2D Fix,输出经纬度

    不可输出海拔信息

    4

    可实现3D Fix

    可输出正确海拔信息

    >4(多频)

    可实现3D Fix

    可输出伪距

     

    Q:你为什么懂得那么多啊?

    A:大概是因为我比高吧。


    定位篇

    有的人会问,既然天上多卫星,为什么我看输出结果只是用了其中有限的几个呢?这是因为单片机使用的小尺寸的陶瓷天线,一般只能做到兼容2个频段(一般软件上也是多选2),无法做到同时兼容3个频段。所以通常是单选GPS或北斗;或者是GPS+北斗、GPS+GLONASS等两两组合的方式。

     

    有的开发者实测时发现,为什么代码无误,但是定位模块就是搜不到卫星,无法定位呢?

     

    实际上排查这种问题既简单,又复杂。之所以说简单的,是因为搜不到卫星唯一的原因就是信号问题。复杂是因为即便知道了病因,开发者也可能会觉得束手无策。

     

    信号问题,那就是卫星天线模块代码输出”的某个环节出现异常了。在这里,结合“望闻问切”的方法,针对可能出现的问题逐项击破。

     

    首先,开发者应谨记,任何时候都应该避免空间上存在异物遮蔽天线(如树木、建筑、高架桥),物理上存在金属外壳等遮挡天线等情况(如铝壳、铁壳)。应确保测试环境是空旷的,无遮挡的,信号良好的。

     

    之所以一直在强调天线、信号、无遮挡,是因为卫星的发射功率并不大,信号到达地面时已经很弱。这种信号强度相当于1.6万公里外一个25瓦的灯泡发出的光。再做个比喻,它比电视机天线所接收到的功率还要低10亿倍。

     

    信号弱、无信号,都会表现为无法定位,或者定位慢。那么,如何判断究竟是信号问题导致的定位慢,还是真·无信号呢?观察模块输出的GGARMCGSA 

    GGA

    格式:

    $--GGA,hhmmss.ss,llll.ll,a,yyyyy.yy,a,x,xx,x.x,x.x,M,x.x,M,x.x,xxxx*hh

    示例:

    $GPGGA,065545.789,2109.9551,N,12023.4047,E,1,9,0.85,18.1,M,8.0,M,,*5E


    名称

    样例

    单位

    描述

    消息ID

    $GPGGA


    GGA 协议头

    UTC 时间

    065545.789


    hhmmss.sss

    纬度

    2109.9551


    ddmm.mmmm

    N/S

    N


    N=北,S=

    经度

    12023.4047


    dddmm.mmmm

    E/W

    E


    W=西,E=

    定位指示

    1


    0:未定位

    1:SPS 模式,定位有效

    2:差分,SPS 模式,定位有效

    3:PPS 模式,定位有效

    卫星数目

    9


    范围 0  12

    HDOP

    0.85


    水平精度

    MSL 幅度

    18.1


    单位

    M


    大地

    -2.2


    单位

    M


    -

    差分时间


    当没有 DGPS 时,无效

    差分站ID




    校验和

    *5E



    <CR><LF>



    消息结束

    RMC

    格式:

    $--RMC,hhmmss.ss,A,llll.ll,a,yyyyy.yy,a,x.x,x.x,xxxx,x.x,a*hh

    例句:

    $GPRMC,100646.000,A,3109.9704,N,12123.4219,E,0.257,335.62,291216,,,A*59

    名称

    样例

    单位

    描述

    消息ID

    $GPRMC


    RMC 协议头

    UTC 时间

    100646.000


    hhmmss.sss

    状态

    A


    A=数据有效;V=数据无效

    纬度

    2109.9704


    ddmm.mmmm

    N/S

    N


    N=北,S=

    经度

    11123.4219


    dddmm.mmmm

    E/W

    E


    W=西,E=

    地面速度

    0.257

    Knot(节)


    方位

    335.62


    日期

    291216


    ddmmyy

    磁变量



    -

    校验和

    *59



    <CR><LF>



    消息结束

    GSA

    格式:

    $--GSA,a,a,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x.x,x.x,x.x*hh

    例句:

    $GPGSA,A,3,10,24,12,32,25,21,15,20,31,,,,1.25,0.85,0.91*04

    名称

    样例

    单位

    描述

    消息ID

    $GPGSA


    GSA 协议头

    模式 1

    A


    M=手动(强制在2D3D模式)

    A=自动

    模式 2

    3


    1:定位无效

    2:2D 定位

    3:3D 定位

    卫星使用

    10


    通道1

    卫星使用

    24


    通道2

    卫星使用

    12


    通道3

    卫星使用

    32


    通道4

    卫星使用

    25


    通道5

    卫星使用

    21


    通道6

    卫星使用

    15


    通道7

    卫星使用

    20


    通道8

    ,,,

    ,,,

    ,,,


    卫星使用



    通道12

    PDOP

    1.25


    位置精度

    HDOP

    0.85


    水平精度

    VDOP

    0.91


    垂直精度

    校验和

    *04



    <CR><LF>



    消息结束

     

    ·如果GGA中的UTC时间错误,定位指示为0,卫星数目不为0;或者RMCUTC时间错误,日期错误;GSA中卫星数目不为0,但是载噪比都很低,则可能是搜星慢,定位慢,信号差

    ·如果GGA中的UTC时间错误,定位指示为0,卫星数目始终为0;或者RMCUTC时间错误,日期错误;GSA完全没有任何有效输出,则可能是完全无信号

     

    对于搜星慢,定位慢,信号差的情况,应改善天线设计,保证天线面朝上的安装使用状态;并且天线周边没有金属物件遮挡,无射频干扰;在空间容许的情况下尽量选择大尺寸的陶瓷天线,必要时应使用有源天线。

     

    对于完全无信号的情况,大概率是天线设计错误。譬如,没有给有源天线开启供电,错误使用天线型号(如芯片仅支持GPS,天线仅支持北斗;错误的使用GSM天线接收信号)等。

     

    扩展阅读:《Luat模块GPS天线设计建议》

    http://blog.sina.com.cn/s/blog_5b0121350102xy8v.html

     

    还有一种常见情况是开发者在室内(含窗口、窗台)进行测试,这是不行的。因为室内没有卫星信号,并不能实现定位。

     

    如果开发者不便于去户外进行测试,可以在某宝搜索GPS 转发”并购买相关设备。这样一来,开发者就不用“风吹日晒,饱经风雨”的,“不辞辛劳”的在户外调试啦。

     

    接下来进入大快人心的“你问我答”环节:

    Q:有没有体积小、信号好强的天线?

    A:鱼和熊掌不可兼得。只有最适合的,没有最好的。

     

    QNMEA-0183哪里格式说明呢?

    A:请到http://www.openluat.com/产品中心的GPS模块“下载中心”下载。

     

    QGNSSGPS什么关系啊?

    A:严格来说,GPSGNSS

    所有的卫星定位系统都是可以称之为GNSSGPSGNSS的子集。

    这一点在输出中也有体现,例如:GNGGAGPGGABDGGA,即“混合定位”(多卫星系统)、“GPS定位”、“北斗定位”。

    语句标识符:

    标识符

    含 义

    BD

    BDS,北斗二代卫星系统

    GP

    GPS

    GL

    GLONASS

    GA

    Galileo

    GN

    GNSS,全球导航卫星系统

     

    QGGARMCRSV有什么分别?

    A:都是NMEA-0183标准的要求。他们的释义如下:

    标识符

    含 义

    GGA

    时间、位置、卫星数量、定位方式

    GSA

    GPS 接收机操作模式,定位使用的卫星,DOP值,定位状态

    GSV

    可见GPS卫星信息、仰角、方位角、信噪比

    RMC

    时间、日期、位置、速度

    VTG

    地面速度信息

      

    QUTC时间有办法换算成当地时间吗?

    A:陆地的话,因为很多国家可能跨越非常多的时区,却使用统一时间,所以只能查表啦(如北京时间UTC+8)。如果是海洋,则根据经度计算时区。

     

    Q:有没有手机能用的,测试GPS的,比较牛逼的app

    AAndroidGPS StatusGPS Test+GPS Data+

    iOSGPS Test+

     

    Q:为什么手机定位那么快那么准,定位模块那么慢,误差还很大?

    A:因为手机是牺牲个人隐私为前提的多重定位(基站+WiFi+蓝牙+GPS+AGPS+历史数据),而模块只是用GPS天线,所以显得略慢一些。但是使用“AGPS辅助定位”后,一样可以做到秒定位。

     

    Q:你为什么懂得那么多啊?

    A:大概是因为我比较富吧。

     

    PS: 那么,怎么使用“AGPS辅助定位”呢?请关注下文哦。


    秒定位篇

    为什么信号极好的情况下,定位速度也不快?有没有办法实现“秒定位”呢?答案当然是肯定的啦。 

     

     

    常规情况下,定位模块上电开机后,通过天线搜索卫星,解析卫星发射的数据(导航电文),然后内部生成星历,再经过复杂的计算,从而得到当前精确的位置(3D Fix)。这个过程称之为“冷启动”。根据信号强度、芯片运算能力,通常耗时几十秒到几分钟不等。

     

    这个过程中,搜星+生成星历文件耗时最久。

     

    不过有的读者可能会问,为什么有的时候定位模块只用了几秒就成功定位了呢?原因有二:1、非“冷启动”方式,即“温启动”或“热启动”;

    2、使用了AGPS辅助定位。

     

    那么,“冷启动”、“温启动”和“热启动”有什么区别呢?也许大家会以为,这里的“X启动”和电脑的开机、待机(睡眠)、重启近似吧?实际上并非如此哦。由于卫星所处空间位置、终端设备所处地表位置是不固定的,所以此处的“X启动”都是以最后一次定位时间和位移距离作为判断依据的:

     

    启动方式

    解释

    自主秒定位*

    辅助秒定位*

    冷启动

    1、初次使用时;

    2、电池耗尽导致星历信息丢失时;

    3、关机状态下,移动1000公里以上距离时。

    ×

    温启动

    距离上次定位时间超过2个小时,不足4个小时;

    没有较大距离的位移发生。

    热启动

    距离上次定位时间不足2个小时;

    没有较大距离的位移发生。


    *自主秒定位:根据模块内保存的星历,实现快速搜星、定位。

    *辅助秒定位:使用AGPS辅助,实现快速搜星、定位。

     

    也就是说,“温启动”和“热启动”情况下,定位模块是可以实现自主秒定位的。

     

    那么,什么又是AGPS辅助定位”呢?在传统GPS定位方式中,定位模块需要全频段搜索以找到可用卫星,因而耗时较长。而“AGPS辅助定位”方式,是通过网络直接下载当前地区的可用卫星星历数据,并将之发送给定位模块,定位模块只搜索特定的卫星,从而提高了搜星速度,减少设备耗电。

     

    举个例子:冷启动像是多项选择题,要把所有选项计算一遍,才能找到正确答案;而AGPS辅助定位”就像是作弊器,排除掉了很多错误答案,只要计算少数几个即可。从而提高效率和准确率。

     

    不过,这个世界上没有圣杯,AGPS辅助定位”不是万金油。它的应用条件还是需要比较苛的:

    ·卫星信号接收条件必须良好,至少可观测到4颗卫星(如果有条件,推荐使用有源天线);

    ·定位芯片必须支持AGPS辅助定位

    ·必须可以准确获取当前地区星历数据;

    ·如果是冷启动,需要等待通信芯片附着成功,接收到星历数据后,传输给定位模块;

    ·如果是温启动/热启动,亦需要重新搜星;

     

    由此可见,只有上述条件满足的时候,才能实现秒定位。如果是冷启动 + GPRS附着传输星历数据,实际上需要等待的时间也不短呢(甚至有可能定位模块已经3D FixGPRS才刚刚附着成功,把星历数据发过来)。

     

    以上海合宙通信科技有限公司的Air8xx系列模块为例,它的AGPS辅助定位基本流程如下:

    1、设备从蜂窝基站获取到当前位置的小区信息;

    2、设备通过蜂窝网络,将当前蜂窝小区信息传送给网络中的AGPS位置服务器;

    3APGS位置服务器根据当前小区信息查询该区域当前可用的卫星信息(包括卫星的频段、方位、仰角等相关信息),生成对应星历文件,并返回给设备;

    4、通信模块通过串口把收到的星历文件传输给定位模块;

    5、定位模块根据星历文件,得到的可用卫星信息,快速找到当前可用的GPS卫星,针对性的搜星,大大提升定位时间。

     

    接下来进入普天同庆的“你问我答”环节:

    Q:我的模块没有GPS芯片,能否使用“AGPS辅助定位”实现定位?

    A:当然不行。这个问题就相当于“我有增压器,没有发动机,能跑100迈吗”一样。“AGPS辅助定位”,只是辅助加速定位,而不是一项独立可用的定位服务。

     

    Q:“AGPS辅助定位”能否提高定位精度?

    A:不能,它只能加快定位速度。无法提升定位精度。

     

    Q:如何根据NMEA-0183判断AGPS是否成功写入了呢?

    A:看GGARMCUTC时间是否被修正,看GSV数据是否生成;

     

    GSV

    格式:

    $--GSV,x,x,x,x,x,x,x,...*hh

    例句:

    $GPGSV,3,1,12,14,75,001,31,32,67,111,38,31,57,331,33,26,47,221,20*73

    名称

    样例

    单位

    描述

    消息ID

    $GPGSV


    GSV 协议头

    消息数目

    3


    1~3

    消息编号

    1


    1~3

    卫星数目

    12



    卫星ID

    14


    1~32

    仰角

    75

    0~90

    方位角

    001

    0~359

    载噪比(C/No

    31

    dBHz

    0~99(无跟踪时为空)

    卫星ID

    32


    1~32

    仰角

    67

    0~90

    方位角

    111

    0~359

    载噪比(C/No

    38

    dBHz

    0~99(无跟踪时为空)

    卫星ID

    31


    1~32

    仰角

    57

    0~90

    方位角

    331

    0~359

    载噪比(C/No

    33

    dBHz

    0~99(无跟踪时为空)

    卫星ID

    26


    1~32

    仰角

    47

    0~90

    方位角

    221

    0~359

    载噪比(C/No

    20

    dBHz

    0~99(无跟踪时为空)

    校验和

    *73



    <CR><LF>



    消息结束

     

    Q:“AGPS辅助定位”的星历文件消耗流量多吗?

    A:很少,几k而已。

     

    Q:星历文件是否需要定期更新?更新频率是多少?

    A:需要根据自己的情况进行分析。如果是冷启动后,不关闭定位模块,下载一次“AGPS辅助定位”数据(星历文件)即可。运行中,定位模块内会自动生成对应的星历文件,无需重复下载;

    如果是不定时启动、关闭,那么关闭4小时内启动是没必要更新的(“温启动”范畴);如果大于4小时,模块内保存的星历已失效,则必须更新星历文件(重新下载),否则和“冷启动”无异。

     

    Q:能否自己搭建AGPS星历数据服务器?

    A:可以。不过较麻烦。建议使用我司提供的接口(请参考例程中agps.lua的代码)。

    简述一下如何搭建。首先在NASA下载brdc当日的导航电文数据(以201821日为例):

    ftp://cddis.gsfc.nasa.gov/pub/gps/data/daily/2018/brdc/brdc0320.18n.Z

    (备用)ftp://igs.ensg.ign.fr/pub/igs/data/2018/032/brdc0320.18n.Z

    GPS卫星的历书(Almanac)包含在导航电文的第四和第五子帧中,可以看作是卫星星历参数的简化子集。服务端收到客户端的请求,从导航电文中提取当日的星历,然后发送给客户端。

    扩展阅读:《GPS卫星星历与历书》

    https://blog.csdn.net/Csdn_Darry/article/details/72052686

     

     

    Q:以GK9501定位芯片为例,怎么把“AGPS辅助定位”的数据发送给它?

    A:请参考厂商提供的相关文档,以规定格式将数据通过串口发送给定位芯片(请参考例程中agps.lua的代码)。

    扩展阅读:《AIR系列GPS模块测试用例》

    http://blog.sina.com.cn/s/blog_5b0121350102xy8w.html

     

    Q:你为什么懂得那么多啊?

    A:大概是因为我比较帅吧。 


    火星坐标(纠偏)篇

    历经磨难,终于成功定位,获取正确输出。但是怎么看起来格式不太对呢,经度纬度都是4位、5位的,那岂不是要绕地球好几圈了?

     

    其实这是NMEA-0183输出格式和我们日常使用的格式不同造成的误解。我们再来看一下GGA格式:

    格式:

    $--GGA,hhmmss.ss,llll.ll,a,yyyyy.yy,a,x,xx,x.x,x.x,M,x.x,M,x.x,xxxx*hh

    示例:

    $GPGGA,065545.789,2109.9551,N,12023.4047,E,1,9,0.85,18.1,M,8.0,M,,*5E


    名称

    样例

    单位

    描述

    消息ID

    $GPGGA


    GGA 协议头

    UTC 时间

    065545.789


    hhmmss.sss

    纬度

    2109.9551


    ddmm.mmmm

    N/S

    N


    N=北,S=

    经度

    12023.4047


    dddmm.mmmm

    E/W

    E


    W=西,E=

    (省略部分GGA

     

    有没有发现问题所在呢?

    GGA输出格式:ddmm.mmmm(度-分)

    日常使用格式:dd.dddddd(度)

     

    那么如何把GGA输出的数据转换为我们日常使用的格式呢?学霸看一眼就会说,这个问题很简单嘛,balabala~~~作为学渣的我,一头雾水。

     

    咳咳,还是直接套用公式吧。

    公式如下:

    ddmm.mmmm  小数点前移两位  dd.mmmm  dd + 0.(mmmm/60) = dd.dddddd 

    举例:

    12023.4047  120.234047  120 + 0.(234047÷60) = 120.390078

     

    经过如此换算,我们就可以把获取到的数值放到地图软件里啦。

     

    一切看似都很美好,但是……直到……你用了百度地图……我靠,卧槽……为什么误差那么大?偏差达几百米?

     

     

    明明在楼里,为什么地图显示我在河里?为什么!是不是定位模块有问题?还是我的又写了个bug?还是天线存在故障?黑人问号脸。 

     


     

    之所以会产生“偏差”,这就涉及到一个有关坐标系转换的问题:GCJ-02 火星坐标系统纠偏。

     

    前文提到,模块输出数据的格式为NMEA-0183,使用的坐标系是WGS-84。通常,国际上其他国家的地图软件也都是使用WGS-84,相安无事。不过,中国国家测绘局要求所有从事地理测量、地图绘制的公司、单位机构、个人必须使用GCJ-02坐标系(G表示Guojia国家,C表示Cehui测绘,J表示Ju局)。

     

    也就是说,国内的地图软件大都是使用的GCJ-02坐标系。所以开发者/用户如果将WGS-84的经纬度填入国内的地图软件,就会产生极大的偏差。

     

    (所有的电子地图、导航设备,都需要使用GCJ-02坐标系。第一步,地图公司测绘地图,测绘完成后,送到国家测绘局,将真实坐标WGS-84的电子地图,加密成“GCJ-02火星坐标”,这样的地图才是可以出版和发布的。第二步,所有的面向客户的设备厂商,要在软件中加入该转换算法,将定位模块输出的真实WGS-84坐标,转换成GCJ-02的坐标。这样一来,“以偏治偏”,坐标系才可以完全匹配,也就没有“偏差”了)

     

    那么,是不是所有的国内地图都使用了GCJ-02坐标系呢?非也……百度、搜狗又自成体系,自立坐标了。

    坐标系

    地图

    WGS-84

    Google Map

    Bing Map

    Here Map

    etc.

    CGJ-02

    高德地图

    腾讯地图

    谷歌地图(中国)

    BD-09

    百度地图

    其他

    搜狗地图

     

    其中百度较为特殊,需要 WGS-84  GCJ-02  BD-09 两次转换。

     

    由于转换算法较为复杂,本文不赘述。转换算法涉及浮点运算,推荐开发者将运算任务交给服务端或者上位机。

     

    为了方便测试,开发者在此网址 http://www.openluat.com/GPS-Offset.html 测试纠偏效果。 


    开发者根据数据格式填入对应的经纬度(支持ddmm.mmmmdd.dddddd°mmss″),点击“坐标转换”按钮,即可看到纠偏后的效果。同时该页面也提供了坐标转换、坐标轴纠偏算法的下载。

     

    接下来进入奔走相告的“你问我答”环节:

    Q:为什么无中生有搞一个GCJ-02坐标系?用WGS-84不是挺好?

    A:你哦,图样图森破了。加偏收费一次,定位设备纠偏收费一次。每年车机、定位终端出货量就是几亿台,能拉动多少GDP哟。

     

    Q:如果我在外国的地图软件上使用WGS-84可以吗?

    A:没问题的,只是外国的地图软件中,大陆数据更新滞后且不完整。

     

    Q:如果我不涉及地图加偏/纠偏,仅需要速度、方向角等数据是否受到这个的影响呢?

    A:纠偏仅是坐标值的转换,和其他数据无关。

     

    Q:为什么推荐开发者把纠偏算法放在上位机呢?

    A:因为单片机真的——算不过来。

     

    Q:为什么感觉GPS芯片上报的经纬度,在一个小范围内飘来飘去?

    A:这个是需要软件静态抑漂的。可以采用技术手段进行过滤,比如设置速度门限——在低于一定速度时,认为是静止不动的。或者事先知道用户处于什么运动模式,是静止、步行、还是开车。 

     

    Q:我发现纠偏后还是不够精准,定位误差较大,能不能做到真·厘米级定位?

    A:可以哦。请看下文“细致入微的厘米级定位”。


    细致入微的厘米级定位

    通常情况下,GPS提供5m左右的定位精度,可以满足大多数大多数情况下的定位需求。不过,有一些场景,有更高精度的定位需求。譬如测绘、滑坡监控、无人机、无人驾驶汽车等。

     

    基于GPS的特性,很难提供亚米级的定位,那么如何是好呢?经过N次技术创新和持久的基准站建设,现在可以做到覆盖全国的厘米级定位技术。

     

    其实简单来说,高精度定位的核心就是消除误差。卫星定位精度不高,是因为误差积累导致,只要把可控的误差消除到最低,就能获得更高精度的定位结果。

     

    卫星定位的误差来源通常有:

    误差来源

    误差项

    误差原因

    定位误差影响

    卫星

    卫星星历误差

    星历中,卫星空间位置与卫星实际位置间的偏差

    -

    卫星钟差

    GPS卫星时钟与GPS标准时间的差别

    偏差和漂移和漂移总量仍在1ms0.1ms以内,由此引起的等效误差将达到300km30km

    SA干扰误差

    SA误差是美国军方为了限制非特许用户利用GPS进行高精度点定位而采用的降低系统精度的政策

    -

    相对论效应的影响

    由于卫星钟和接收机所处的状态(运动速度和重力位) 不同引起的卫星钟和接收机钟之间的相对误差

    20~30km

    传播路径

    电离层折射

    GPS信号通过电离层时,与其他电磁波一样,信号的路径要发生弯曲,传播速度也会发生变化,从而使测量的距离发生偏差

    -

    对流层折射

    GPS信号通过对流层时,也使传播的路径发生弯曲,从而使测量距离产生偏差

    -

    多路径效应

    测站周围的反射物所反射的卫星信号(反射波)进入接收机天线,将和直接来自卫星的信号(直接波) 产生干涉,从而使观测值偏离


    接收机

    接收机钟差

    GPS 接收机一般采用高精度的晶振。接收机的钟面时与GPS标准时之间的差异称为接收机钟差


    接收机的位置误差

    接收机天线相位中心相对测站标石中心位置的误差


    接收机天线相位中心偏差

    观测时,天线的相位中心随着信号输入的强度和方向不同而有所变化,这种差别叫天线相位中心的位置偏差



    计算误差

    由于算法、硬件不稳定、辐射或热电效应等造成的计算错误


     

    那么,如何修正这些误差误差,使得定位结果更精准呢?需要基准站通过数据链,将其载波观测值及基准站坐标信息一同传送给用户站,用户站接收GPS卫星的载波相位与来自基准站的载波相位,并组成相位差分观测值进行及时处理,能及时给出厘米级的定位结果。

     

    通常,我们提到的DGPSRTD,即Real Time Differential,伪距差分。基准站上,观测所有卫星,根据基准站已知坐标和各卫星的坐标,求出每颗卫星每一时刻到基准站的真实距离。再与测得的伪距比较,得出差分改正数,将其传输至用户接收机,提高定位精度。从而实现亚米级定位。

     

    厘米级定位,则需要用到RTK,即Real Time Kinematic,载波相位差分,实时处理两个测站载波相位观测量的差分方法。即是将基准站采集的载波相位发给用户接收机,进行求差解算坐标,从而实现厘米级定位。

     

    文字太空洞,举例说明:BOSS告诉人力,给你发工资¥8848.00。人力听错了,发给你¥8844.00。收到工资之后,觉得不太对——数字的谐音,这不是变相骂人嘛。

     

    你赶紧登陆ERP查询,提交实发工资金额¥8844,查询一下。嚯,不得了,系统一阵卡机(查询后台中),然后duang的一声告诉你——少发了¥4.00。你去找人力,要回来了差额¥4.00,喜提锤子R1

     

     

    在这个故事中:

    BOSS”就是卫星——负责传达指令,不处理具体事物;

    “人力”就是传播路径——上情下达,产生误差;

    ERP查询返值”就是基准站——根据“用户站”上传的数据,下发的“工资改正数”;

    而你,就是用户站——将“接收值”(¥8844.00)上传给“基准站”,获得“工资改正数”(-4.00),你就知道是少发了¥4.00。经过计算(¥8844.00+4.00)即可求得正确解(¥8848.00)。

     

    颇有点区块链的感觉了,不是吗?

     

    扩展阅读:《DGPSRTK的区别》

    https://blog.csdn.net/foreverhuylee/article/details/25693893 

     


     

    目前,服务覆盖全国范围的,只有千寻位置®

     

    (千寻位置®是由中国兵器工业集团和阿里巴巴集团共同发起成立。千寻位置基于北斗卫星系统(兼容GPSGLONASSGalileo)基础定位数据,利用遍及全国的超过2000个地基增强站及自主研发的定位算法,通过互联网技术进行大数据运算,为遍布全国的用户提供精准定位及延展服务)

     

    用户在千寻位置®购买相关套餐后,可以使用千寻位置®提供的SDKNTRIP协议接收RTCM差分数据。

    开发方式

    支持架构

    账号认证

    上传语句

    挂载点

    返回数据格式

    SDK

    Android

    iOS

    Windows

    STM32

    自动

    GGA

    -

    RTCM

    NTRIP

    不限

    Base64编码传输

    GGA

    RTD

    RTCM32_GGB

    RTCM3.2

    RTCM23_GPS

    RTCM2.3

    RTK

    RTCM32_GGB

    RTCM3.2

    RTCM30_GG

    参考资料:https://www.qxwz.com/help-document-location-service.html

    https://www.qxwz.com/help-document-common-find-config-service.html

     

    由于NTRIP认证方式较繁琐,所以本文不再赘述,有兴趣的读者可以点击下方链接了解更多内容:

    扩展阅读:《Ntrip通讯协议》

    https://www.cnblogs.com/hanford/p/6028156.html

     

    定位效果如此拔群,当然条件也相当苛刻啦:

    ·定位芯片必须支持差分数据解算;

    ·场地净空条件良好,尽量不要有任何遮挡(高楼、树木等);

    ·SNR应大于40

    ·设备具有接收数据的能力(网络接入);

    ·流量消耗很高;

    ·测量点在基准站覆盖范围内;

    * 固定解耗时较久。

     

    我们可以通过模块输出的GGA语句判断当前定位状态:

    GGA

    格式:

    $--GGA,hhmmss.ss,llll.ll,a,yyyyy.yy,a,x,xx,x.x,x.x,M,x.x,M,x.x,xxxx*hh

    示例:

    $GPGGA,065545.789,2109.9551,N,12023.4047,E,5,9,0.85,18.1,M,8.0,M,1,0999,*5E

    名称

    样例

    单位

    描述

    消息ID

    $GPGGA


    GGA 协议头

    UTC 时间

    065545.789


    hhmmss.sss

    纬度

    2109.9551


    ddmm.mmmm

    N/S

    N


    N=北,S=

    经度

    12023.4047


    dddmm.mmmm

    E/W

    E


    W=西,E=

    定位指示

    1


    0=未定位

    1=GPS单点定位固定解

    2=RTD差分定位

    3=PPS模式

    4=RTK固定解 (定位精度达厘米级)

    5=RTK浮点解

    6=惯导

    7=手工输入模式

    8=模拟模式

    卫星数目

    9


    范围 0  12

    HDOP

    0.85


    水平精度

    MSL 幅度

    18.1


    单位

    M


    大地

    8.0


    单位

    M


    -

    差分时间

    1

    (从接收到差分信号开始的秒数,如果不是差分定位将为空)

    差分站ID

    0999


    差分站ID0000 - 1023(前导位数不足则补0,如果不是差分定位将为空)

    校验和

    *5E



    <CR><LF>



    消息结束

     

    如果是GPS芯片已经进行解算,并输出差分定位结果,那么GGA语句中“定位指示”应为24、或5;查分时间应大于0不为空);差分站ID不为空

     

    只有同时满足上述条件,才能得到精确的测量结果。接下来,我们看一下实际测试结果。测试环境,某小区内:

     


     

    测试中,使用 上海合宙通信科技有限公司提供的Air202 GPRS通信模块,对GPS芯片进行控制,连接千寻位置®平台。将模块输出的GGA原始语句上报到千寻位置®平台,将平台下发的数据传输给GPS芯片,然后打印GPS芯片解算后输出的GGA 

     

     

    通过对比图可以看出,手机定位偏差较大(并没有在顶天台测试嘛),RTK测试结果非常准确,符合测绘等需求。

     

    接下来进入后会有期的“你问我答”环节:

    QRTDRTK服务贵吗?

    A:可以到千寻位置®官网查询。参考价:RTD 6//设备;RTK 400//设备。

     

    Q:如何判断我的定位结果是否为差分运算后的结果呢?

    A:观察GGA语句中的定位指示输出值.

     

    Q:流量消耗多少?

    ARTCM数据每秒下发一次,每次大约0.5k,大约需要60m/天(按24小时计)。

     

    Q:大约需要多久才能得到RTK固定解?

    A:固定点测量大约需要10分钟。

     

    Q:有没有把办法减少流量消耗?

    A:可以根据gps状态修改代码,当定位模式为“rtk固定解”时,主动断开连接。GPS定位状态改变再重连服务器。

     

    Q:为什么设备一直处于浮点解定位状态,无法固定。

    A:请确保终端设备天线对空观测环境良好,没有受到遮挡,或处于易产生多路径信号反射的物体附近,也请留意导航卫星信号接收正常,CN0处于正常范围内,未受到无线电干扰。

     


    低功耗篇

    ——21世纪,物联网最重要的是什么?

    ——电池。

     

    从常见的的共享单车、车载定位器,到不常见的远程抄表、充电桩管理。在各种和物联网相关的应用中,供电始终是一个绕不开的话题。

     

    如果是有常电(如汽车、自动贩卖机)还好,如果是使用电池,那么每一毫安的电都要精打细算才行(哪怕是用太阳能板充电的共享单车,也经常面临“低电”困扰呢)。

     

    MCUGPS、通信模块等,都是众所周知的耗电大户。其中,GPS芯片因为要承担搜星、计算,输出的任务,所以它的耗电量也是不容小觑的。那么,有没有什么办法让GPS芯片“节能降耗”呢?

     

    答案当然是肯定的。前文提到过,GPS芯片搜星时耗电量最大了,如果能让模块尽量减少搜星追踪的耗电量,就可以达到目的啦。如何做到这两点呢?接下来我们以物联网行业最常用的国科GK9501 GPS芯片为例,进行说明。

     

    搜星

    星历下载  星历预测

    前文提到过,通过2G网络将星历文件传给GPS芯片,从而实现秒定位+省电,众人拍手欢呼。那么,忽然又出现了个“星历预测”,这是什么鬼呢?

     

    Q:什么是“星历预测”?

    AGK9501的软件自带“星历预测”功能。它是指在信号正常(CN值大于27)的情况下,硬件连续运行5~10分钟,即可在内部自动生成星历,并预测出未来2~3天的星历,此过程不需要耗费任何流量。实现“通电5分钟,奔跑72小时”。

     

    当然实现“星历预测”这个功能,是有条件的:

    1、星历被下载过一次(外部输入给GPS芯片星历文件,或者GPS芯片自主3D Fix

    2、GPS信号CN值不低于27

    3、正常定位过一次;

    4、RTC不掉电(当主电源断开后,只有RTC电源不断,星历预测功能才可以使用,RTC断开后星历预测功能将不再起作用);

     

    Q:“星历预测”和“星历下载”的区别是什么?对实际定位有什么帮助?

    A:这个要从AGPS的发展史说起。

     

    早期,服务器下发的星历文件是包含全部所有的可见卫星数据,将之发给GPS芯片,GPS芯片再根据星历文件去搜星。缺点是星历文件大,定位效果还差那么一丢丢;现在,首先是使用通信芯片进行基站定位,后台获取一个粗略的地理位置,查询导航电文后,再根据该地理位置精确下发当前可见卫星星历,GPS芯片再根据精确的星历文件去针对性地搜星。星历文件体积更小,定位效果更好。

     

    由此可见:“星历预测”是芯片自动生成的,仅包含可见卫星的星历;而“星历下载”是包含全部可见(但是不可用)卫星的星历。

    方式

    实现方式

    有效时间

    优点

    秒定位的限制

    缺点

    星历下载

    通过2G网络将星历文件下载到GPS芯片

    4小时

    可以实现秒定位

    无限制

    需要消耗网络流量

    星历预测

    长时间有效运行(3D Fix)后,GPS芯片自动生成

    2~3

    可以实现较快速度定位

    较小位移情况下

    限制条件较多

    无论在什么状态下,都是GPS信号CN值越好,定位越快;6小时内的 星历下载 保存可以将RTC电源断开。

     

    Q:如果“星历预测”可以用,那为什么还通过2G网络“星历下载”呢 

    A:因为“星历预测”的前提是在“信号正常(CN值大于27)的情况下,连续运行5-10分钟”,电流28mA,相对比较耗电。所以大多数应用会倾向于每次都进行“星历下载”,而非使用“星历预测”——何况通过基站定位获取大概位置的动作,本身就需要2G联网服务器呢。

     

    Q:为什么星历数据保存有效时间最长是6小时?

    A:星历保存有效的时间和卫星的运行轨迹相关。

     

    星历保存时间越长,原来星历里的可见卫星就越少。因为GPS卫星绕地一圈是12个小时,所以,星历数据有效期6小时已是极限值。超过这一时间后,原来的星历数据就没有意义了。

     

    鉴于星历保存的时间越短,其对应星历里的可见星就越多,所以2小时内的星历比保存6小时内的星历对定位的帮助更大。

     

    追踪

    动态追踪也是很耗电的,那么有没有办法让芯片“半睡半醒”的工作呢?嘿嘿,还真有办法,GK9501可是会“达芬奇睡眠法”的哦。

     

    模式

    解释

    唤醒方式

    低功耗模式

    CPU睡眠

    通过串口唤醒

    超低功耗模式

    CPU掉电,只有RTC工作

    需要force on唤醒

    低功耗追踪模式

    CPU睡眠,可以通过串口唤醒或者周期性自动唤醒进行定位输出。可以给出运行轨迹


    超低功耗追踪模式

    CPU掉电,只有RTC工作,需要force on唤醒或者周期性自动唤醒进行定位输出。可以给出运行轨迹


     

    *省功耗追踪模式实际上就是周期性自动唤醒:是GK9501根据当前的运动状态自动设置睡眠时间和运行时间。例如在运动比较快的情况下,会自动睡眠30秒,运行3秒;在运动比较慢的情况下,会自动睡眠60秒,运行3秒;达到在有大致轨迹的情况下,降低功耗的目的。如果主控也需要同步睡眠,可以通过GPIO来通知主控。当然也可以通过主控周期性切断GK9501电源的方式实现这一目的。

     

    Q:好像其他友商的芯片也支持AGPS秒定位呢,和GK9501有什么区别呢?

    AuBlox、中科微、泰斗支持AGPSMTK、国科GK9501支持秒定位。区别是前者只下载星历,后者不但下载星历,还会结合基站定位加速找星定位的过程。这个是AGPS和秒定位的本质区别。

     

    Q:有没有推荐的GPS物联网模块呢?

    A:上海合宙通信科技有限公司的Air8xx系列。使用RDA8955+GK9501平台,支持2GGPS,稳定可靠。


    展开全文
  • Dialog半导体公司是一家无晶圆厂运营的公司,专注于可配置混合信号IC的生产。在过去的十年里,Dialog的蓝牙低功耗业务增长速度非常快,蓝牙低功耗SoC出货量已经达到...
        

    640?wx_fmt=jpeg

    Dialog半导体公司是一家无晶圆厂运营的公司,专注于可配置混合信号IC的生产。在过去的十年里,Dialog的蓝牙低功耗业务增长速度非常快,蓝牙低功耗SoC出货量已经达到2.5亿套,在全球市场中位居第二。最近,Dialog推出了最先进、功能最丰富的无线连接多核MCU SmartBond DA1469x蓝牙低功耗SoC系列。


    640?wx_fmt=pngSmartBond产品线再添新成员640?wx_fmt=gif


    DA1469x系列是全球首个具有可扩展内存的基于ARM Cortex-M33的无线微控制器,可配置的协议引擎支持最新的蓝牙5.1标准。与之前的产品相比,DA1469x系列的处理能力提高了一倍、可用资源增加了四倍、电池续航能力增加了一倍,成为迄今为止最先进、功能最丰富的蓝牙产品之一。


    为了提高器件的处理能力,DA1469x成为第一个采用基于ARM Cortex-M33处理器的专用应用处理器的量产无线微控制器系列。M33为高端健身追踪器、先进智能家居设备和虚拟现实游戏控制器等计算密集型应用提供更强大的处理能力。


    DA1469x系列为开发人员提供了先进的连接功能,可以满足多种应用的需求,并使其经得起未来的考验。其新型集成无线电提供的覆盖范围是前代产品的两倍,结合基于ARM Cortex-M0+的软件可编程数据包引擎,可部署协议并为无线通信提供充分的灵活性。


    640?wx_fmt=jpeg

    为了增强DA1469x系列的传感功能,M33应用处理器和M0+协议引擎配备了传感器节点控制器(SNC),该SNC基于可编程微型DSP,可自主运行并独立处理来自与其数字和模拟接口相连的传感器的数据,只在需要时唤醒应用处理器。除了节能特性外,其最先进的电源管理单元(PMU)还可以通过控制不同的处理内核(只在需要的时候激活它们),提供业内最佳的电源管理。


    开发人员可以利用DA1469x系列全面的计算能力和功能。该SoC系列提供高达144 DMIPS、512 KB RAM、内存保护、浮点单元、专用加密引擎等,提供端到端的安全性和可扩展的存储器,确保可以利用该芯片组系列实现广泛的先进智能设备应用,并支持一系列关键的增值接口,进一步拓展功能。


    640?wx_fmt=png不只可穿戴设备,每种应用都有合适的选择!640?wx_fmt=gif


    据Dialog半导体公司低功耗连接业务部总监Mark de Clercq 介绍,Dialog认为物联网和汽车是蓝牙低功耗产品的两个主要应用市场。蓝牙技术主要有两个分支:一个是标准的蓝牙技术,主要包括耳机和无线扬声器等应用;另一个是蓝牙低功耗技术,专注一些不同的拓扑,包括点对点、一对多和mesh结构,主要针对低功耗和低数据传输率应用。Dialog低功耗连接业务部主要是针对蓝牙低功耗的产品。


    640?wx_fmt=jpeg

    Dialog半导体公司低功耗连接业务部总监Mark de Clercq


    DA1469x系列MCU分为通用型和专用型。Mark de Clercq表示:专用型应用,具体包括可穿戴设备、虚拟现实、遥控、游戏控制器、有语音控制的高端机顶盒遥控,以及使用可充电电池的电子烟、智能家居门锁和高端玩具等等,这些应用需要一些专用的外设去实现,Dialog的产品特别适合这些应用。


    在连接方面,一个新兴的应用是制造商通过新推出的蓝牙5.1标准中的到达角度(Angle of Arrival)和离开角度(Angle of Departure)特性实现精准定位。凭借世界级的无线电前端性能和可配置协议引擎,DA1469x符合此标准的新版本,为楼宇门禁和远程无钥开锁系统等需要精准室内定位的设备创造了新的机会。


    使用DA1469x产品系列的开发人员,可以利用Dialog的软件开发套件SmartSnippets,为其提供在该新MCU上开发业内最佳应用所需的工具。与软件工具相配套,Dialog也提供了完整的硬件开发套件,使客户可以在硬件上去开发自己的软件。值得一提的是,硬件开发套件支持两个最受欢迎的接口——mikroBUS和Arduino,有助于客户使用现成的插拔式扩展板在基础板上扩展更多的功能,包括新的传感器、执行器、显示和用户界面等等。


    640?wx_fmt=jpeg

    DA1469x多个型号将于2019年上半年开始量产。今年Dialog还将前往全球多个城市,开展首届SmartBond无线微控制器技术巡回研讨会。该系列研讨会将针对所有SmartBond产品系列提供信息介绍和实践培训,包括最新的DA1469x系列。

    640?

    1.这位嵌入式工程师的评论亮了。。。

    晋升工程经理几个月后,我选择退回编程岗位的起点

    3.项目心得:在嵌入式系统中进行函数设计时可以这样处理!

    4.有人说5G是个伪命题,你怎么看?

    5.如何自己制作一个RISC指令集的CPU?

    6.C++的门门道道

    640?wx_fmt=gif


    展开全文
  • ibeacon工作原理

    2015-07-01 14:02:08
    这种技术能够实现室内定位,让你的手机能够知道是否处于一个Beacon的范围内。使用这种技术能够产生很多应用程序:比如帮助你在停车场中找到你的汽车,或者在零售店中根据所处位置提供优惠券或者其它一些位置相关的...

    iBeacon是最近非常火的话题。这种技术能够实现室内定位,让你的手机能够知道是否处于一个Beacon的范围内。使用这种技术能够产生很多应用程序:比如帮助你在停车场中找到你的汽车,或者在零售店中根据所处位置提供优惠券或者其它一些位置相关的服务。还有很多我们现在无法想象得到的应用程序。


    现在有很多种关于iBeacon是什么,以及我们可以如何使用它们的解释。然而从技术角度上来说,它们是如何工作的?底层的技术使用的使用Bluetooth LE,因此。。。


    What is Bluetooth LE?(什么是Bluetooth LE,简写BLE)


    Bluetooth Low Energy(BLE)是2010年发布的蓝牙4.0技术规范的一部分。它起源于2006年Nokia的Wibree技术,但最终被整合进了蓝牙。这是一组与传统蓝牙不同的协议,并且使用的设备上也不会向后兼容。因此,现在市面上你可以看到三种类型的设备:

    1.Bluetooth设备:只支持传统蓝牙的设备。

    2.Bluetooth Smart Ready设备:同时支持传统蓝牙和LE模式的设备。

    3.Bluetooth Smart设备:只支持LE模式的设备。


    最新的手机(iPhone 4s+, SG3+)、笔记本、平板电脑等,基本上都已经支持蓝牙4.0,也就是Bluetooth Smart Ready设备。Beacon,从另一方面来说,这种设备只支持low energy protocols(LE低功耗协议),属于上面说所的“Bluetooth Smart”设备,这也是它们靠一颗纽扣电池就能运行很长时间的原因。老式设备,比如外设、汽车系统、旧手机等通常只支持传统蓝牙协议。


    BLE最重要的特点当然在于它的低能耗。举个例子,一些beacon设备靠一颗微型电池就能够持续发送一个信号两年左右(这种电池一般是不可拆卸的,你可能需要在beacon停止工作之后替换一个新的beacon)。传统蓝牙和LE蓝牙使用的都是相同的波段(2.4GHz-2.4835GHz)。BLE协议的传输速率比较低,因此除了用于发现设备和做一些简单通信之外,不太适合用于传输大量的数据流。在协议条款上,LE和传统蓝牙的信号都能够覆盖到100米的范围。


    How does BLE communication work?(BLE设备如何通信)


    BLE的通信包括两个主要部分:advertising(广告)和connecting(连接)。


    广告(Advertising)是一种单向的发送机制。想要被搜索到的设备可以以20毫秒到10秒钟的时间间隔发送一段数据包。使用的时间间隔越短,电池消耗的越快,但设备被发现的速度也就会快。数据包长度最多47个字节,由以下部分组成:


        1 byte preamble(1字节做报头)

        4 byte access address(4字节做地址)

        39 bytes advertising channel PDU(39个字节用于PDU数据包)

        3 bytes CRC(3个字节用于CRC数据校验)



    对于广告通信信道,地址部分永远都是0x8E89BED6。对于其它数据信道,地址部分由不同的连接决定。


    返回的PDU数据也拥有自己的数据报头(2个字节:声明有效载荷数据的长度和类型——设备是否支持连接等等)和当前有效载荷数据(最多37个字节)。


    最终,有效载荷数据中的头6个字节是设备的MAC地址,所以实际信息数据最高可占31个字节。


    BLE设备可以运行在单一的不可连接的广告模式中(在这种模式下所有的信息都包含在广告数据包中),然而设备也是允许运行在可被连接的模式下(通常情况下都是这种模式)。


    当设备被发现之后,一个连接就会被建立起来。之后就可以读取BLE设备提供的Service,以及每个Service的characteristic(属性,类似于GATT Profile实例)。每一个characteristic都会提供一些值,这些值可以被读取或者修改。例如,一个小型温控器可以开放一个service用于获取当前的温度或者湿度读数(相当于是service的characteristic),同时也可以开放其它的service和characteristic用于设置期望的温度。这里因为beacon不使用连接模式,我将会跳过这些细节。如果你想要了解更多关于连接BLE设备的内容,可以参考Apple's Core Bluetooth guide,尽管你可能不是一个IOS开发者。更多相关技术性的文章,可以参考Introduction to BLEMaking the most out of BLE Advertising mode


    How do beacons use BLE?(beacon设备如何使用BLE)


    Beacon设备只使用了广告通信信道。正如beacon(信标、灯塔)的字面意思,这种设备以一定的时间间隔发送数据包,并且发送的数据被可以被像手机这样的设备获取。也就是说,iBeacon只是BLE广告模式的一种简单的使用,并在此基础上提供了对IOS的一些附加支持。


    如果你试着拦截一段iBeacon广告数据包,例如下面从Estimote beacon截获的数据包:


    [plain] view plaincopy在CODE上查看代码片派生到我的代码片
    1. 02 01 06 1A FF 4C 00 02 15 B9 40 7F 30 F5 F8 46 6E AF F9 25 55 6B 57 FE 6D 00 49 00 0A C5  

    (截获以上数据,如果你使用的Mac设备,你可以参考additional XCode download为XCode添加蓝牙扫描和数据包打印工具。如果是Window设备,请参考这里


    以上的数据已经将广告数据包的报头、修正地址、广告PDU数据包的报头和其中的MAC地址部分都移除掉了,也就是说这部分数据只包含了实际信息数据——一共30个字节,符合实际信息数据最多31个字节的限制。


    那么一个iBeacon设备的BLE广告数据是如何组成的?以下是Apple修正的数据格式,整理如下(也可以参考这里):


    [plain] view plaincopy在CODE上查看代码片派生到我的代码片
    1. 02 01 06 1A FF 4C 00 02 15: iBeacon prefix (fixed)  
    2. B9 40 7F 30 F5 F8 46 6E AF F9 25 55 6B 57 FE 6D: proximity UUID (here: Estimote’s fixed UUID)  
    3. 00 49: major  
    4. 00 0A: minor  
    5. C5: 2’s complement of measured TX power  



    根据这些原理,如果你想要实验beacon的功能,你不必需要一个真正的beacon设备。如果你有最新的手机(例如iPhone4S+,SG3+)或者配备蓝牙4的笔记本(例如Retina MacBook),你可以将这些设备转换成iBeacon发送设备和接收设备。以iPhone为例,你可以在AppStore上下载“Locate iB”应用。对于MacOS,可以参考这里。当然你可以可以使用树莓派


    Breaking down the iBeacon format(解析iBeacon的数据格式)


    除了修正的iBeacon前缀数据(02 01 ... 15),其它各部分数据各代表什么?


    Proximity UUID(上面例子中的B9 ... 6D部分):这是将你所有的beacon与其他人的beacon设备区别开的id!例如,目前在商店里某个区域分布着多个beacon形成一条“链带”,用于为顾客提供特定的服务,那么归属于同一条“链带”的beacon将分配到相同的proximity UUID。为这条“链带”设计的专用应用程序将会在后台使用这个UUID扫描到这条“链带”中的beacon设备。


    major编号(2个字节,上面例子中为0x0049,也就是73):用于将相关的beacon标识为一组。例如,一个商店中的所有beacon将会分配到相同的major编号。通过这种方式,应用程序就能够知道顾客位于哪一家商店。


    minor标号(也是2个字节,上面例子中为0x000A,也就是10):用于标识特定的beacon设备。例如一个商店中的每一个beacon设备都拥有唯一的minor编号,这样你才能够知道顾客位于商店中的哪个位置。


    Measuring distance(测量距离)


    最后一个值,TX power,用于确定你和beacon之间距离有多近。根据这个值不但可以获得粗略的信息(比如靠近/远离/不在范围内等),也可以获取精确到米的距离(当然你也可以转换为以步为单位的距离)。那么如何实现?


    TX power(上面例子中为0xC5=197,根据2的补码测得256-197=-59dBm)是距离设备1米测得的信号强度值(RSSI- Received Signal Strength Indication,接收到的信号强弱指标)。假如接收到的信号强度减弱了,那么我们可能在远离。只要知道1米距离的RSSI,以及当前的RSSI(我们可以从接收到的信号中一块获取到这些信息),那么计算出当前的距离是可能的。IOS已经实现了个这个功能,对于其它平台需要自己手动编码计算,可以参考这里


    译注:Java代码粗略计算距离代码:

    [java] view plaincopy在CODE上查看代码片派生到我的代码片
    1. protected static double calculateAccuracy(int txPower, double rssi) {  
    2.   if (rssi == 0) {  
    3.     return -1.0// if we cannot determine accuracy, return -1.  
    4.   }  
    5.   
    6.   double ratio = rssi*1.0/txPower;  
    7.   if (ratio < 1.0) {  
    8.     return Math.pow(ratio,10);  
    9.   }  
    10.   else {  
    11.     double accuracy =  (0.89976)*Math.pow(ratio,7.7095) + 0.111;      
    12.     return accuracy;  
    13.   }  
    14. }     

    然而,在实际应用中,由于人体或者其它通信阻碍物都有可能削弱信号,因此这个距离只是一个估算值。


    IOS integration(IOS整合)


    IOS已经整合了iBeacon。当你进入beacon的范围内,你的应用程序就可以接收到通知,即使你的应用程序处于在后台也能接收到。一个应用程序可以注册一个区域的进入或者退出事件,因此即使应用程序没有运行也可以被唤醒。为了响应这些事件,应用程序可以发送例如本地推送通知,提示用户打开应用程序查看商店的促销广告(这些促销广告可以从网络上面获取),或者是其它相关的内容。


    更准确的说,当手机处于不活动状态时,也就是IOS进入了低电量监控模式的时候,只有iBeacon区域进入/退出事件能够被接收到。当手机和应用程序处于活动状态,你可以进入ranging模式,这个能够让你检测的信号强度和估算距离更加准确。


    注意你的手机检测beacon需要花费一定的时间。首先,beacon设备是间隔一定的时间才发送一次广告。其次,如果你的手机处于非活动模式,它只在有些时候才会检测蓝牙信号。一个beacon设备要被检测到,上面两段工作时间就需要有交集。实践证明,它可能需要15分钟才能检测到一个beacon设备。


    按步骤开发一个iOS iBeacon应用程序可以参考这里。Beacon的制造商通常也会提供SDK帮助开发Beacon应用程序。参考Estimote的iOS SDK 和Android SDK


    How can I get some beacons?(如何获取Beacon设备)


    Beacon设备资源现在比较稀少,你通常需要等上几个星期才能拿到货,但可以肯定的是将来这种情况会改善。


    因此,最快的选择就是创建一个Beacon模拟器:将iPhone/Android/MacBook/其它笔记本/树莓派转换成了Beacon模拟器。


    第二种选择就是试着去订购一些Beacon设备了:


        pre-order Estimote beacons; 3 for $99

        Kontakt beacons come in a couple of packages; 4 for $99, 10 for $279

        RaspberryPi kits from RadiusNetworks: 1 for $99

        RedBearLab offers BLE shields for Arduino for $30

        Bleu sells USB-iBeacon dongles. 1 for $40, 5 for $150


    Alternatives(替代品)


    iBeacon不是唯一一种基于BLE近距离技术开发的设备。高通同样正在开发自己的Beacon——Gimbal,并集合了iOS和Android SDK。它们提供的功能比较类似,但是BLE广告的数据格式可能不一样。我的开发工具还在运送途中,因此我还没有测试过,但是这种Beacon肯定很有趣,尤其是它的价格最低只有5美元。


    What's next?(下一步是什么?)


    现在还没有做的事情就是开发一些基于Beacon的应用程序。为了实现这个目的,记住SoftwareMill:我们经常寻找一些有趣的项目来开发。


    原文地址:http://www.warski.org/blog/2014/01/how-ibeacons-work/

    展开全文
  • iBeacon工作原理

    2016-05-23 01:03:12
    这种技术能够实现室内定位,让你的手机能够知道是否处于一个Beacon的范围内。使用这种技术能够产生很多应用程序:比如帮助你在停车场中找到你的汽车,或者在零售店中根据所处位置提供优惠券或者其它一些位置相关的...
  • 下载地址 最后更新共计113个分类5177套源码29.2 GB。 卷 新加卷 的文件夹 PATH 列表 卷序列号为 00000200 5E7A:7F30 F:. ├─前台界面 │ ├─3D标签云卡片热门 │ │ Android TagCloudView云标签的灵活运用.rar ...
  • 号外号外,《自己动手设计物联网》已经在各大书城有售啦~购买地址如下:亚马逊:https://www.amazon.cn/dp/B01IBZWTWW(戳阅读原文即可访问)京...
  • iBeacons

    2015-07-24 10:20:45
    iBeacons可以提供室内地图等微区位服务,为特定区域内任意相关设备提供优惠信息、硬解码定位等服务。  iBeacons是通过低功耗蓝牙技术进行一个十分精确的微定位,设备可以接收一定范围由其他iBeacons发出来的信号,...
  • 背景知识 蓝牙技术最初由爱立信(也就是多年前手机做得最丑最奇葩的公司,最终被用户以脚投票踢出市场)创制。技术始于爱立信公司的1994方案,它是研究在移动电话和其他配件间进行低功耗、低成本无线通信连接的方法...
  • 最近很多朋友问我如何选购合适的NB-IoT模组,于是本篇博文给各位朋友安利一款DF创客社区最新出品的NB-...TinkerNode NB-IoT物联网开发板是ESP32平台具有NB-IoT广域低功耗通信和GPS/BeiDou双星精确定位功能的四模低...
  • iBeacon

    2019-09-22 11:13:36
    iBeacon是苹果在2013年WWDC上推出一项基于蓝牙4.0(Bluetooth LE | BLE | Bluetooth Smart)的精准微定位技术,当你的手持设备靠近一个Beacon基站时,设备就能够感应到Beacon信号,范围可以从几毫米到50米。...
  •     多功能无线网络与物联网实验箱是一款功能全面的无线网络实验设备,试验箱可支持基于Wifi/ZigBee/蓝牙/蜂窝通信/RFID/NFC等类型的无线网络技术实验,操作便捷、内容丰富、适配国内大部分高校的无线实验教材...
  • 工程师们已经开发出了一种安装在无人机上的原型无线扫描系统,该系统可以飞到高层建筑的外部,并检测可能被困在里面的人的下落。 该系统称为WideSee,是由利兹大学,马萨诸塞州大学和中国西北大学的工程师共同...
  • 如今,对于家庭自动化、医疗保健、制造业、零售业、重工业以及更多行业来说,物联网设备通常是革命性的。 根据大多数市场估计,物联网市场有望实现非常快速的增长。调查机构Gartner公司预测,“2016年在全球范围内有...
1 2
收藏数 40
精华内容 16