LuatOS新增exgnss扩展库,GNSS定位应用更简单
LuatOS新增exgnss扩展库,简化了GNSS的使用。Air8000/A/D/G、Air780EGH系列4G+GNSS产品,都支持exgnss扩展库功能。
libgnss核心库和exgnss扩展库主要区别如下:

1、exgnss库的三种应用模式
1.1 exgnss库提供三种比较经典的应用模式。
1.1.1 应用模式1:
exgnss.DEFAULT
-
打开gnss后,gnss定位成功时,如果有回调函数,会调用回调函数;
-
使用此应用模式调用exgnss.open打开的“gnss应用”,必须主动调用exgnss.close;
-
或者exgnss.close_all才能关闭此“gnss应用”,主动关闭时,即使有回调函数,也不会调用回调函数。
-
通俗点说就是一直打开,除非自己手动关闭掉。
1.1.2 应用模式2:
exgnss.TIMERORSUC
-
打开gnss后,如果在gnss开启最大时长到达时,没有定位成功,如果有回调函数,会调用回调函数,然后自动关闭此“gnss应用”;
-
打开gnss后,如果在gnss开启最大时长内,定位成功,如果有回调函数,会调用回调函数,然后自动关闭此“gnss应用”;
-
打开gnss后,在自动关闭此“gnss应用”前,可以调用exgnss.close或者exgnss.close_all主动关闭此“gnss应用”。主动关闭时,即使有回调函数,也不会调用回调函数。
-
通俗点说就是设置规定时间打开,如果规定时间内定位成功就会自动关闭此应用;如果没有定位成功,时间到了也会自动关闭此应用。
1.1.3 应用模式3:
exgnss.TIMER
-
打开gnss后,在gnss开启最大时长时间到达时,无论是否定位成功,如果有回调函数,会调用回调函数,然后自动关闭此“gnss应用”;
-
打开gnss后,在自动关闭此“gnss应用”前,可以调用exgnss.close或者exgnss.close_all主动关闭此“gnss应用”。主动关闭时,即使有回调函数,也不会调用回调函数;
-
通俗点说就是设置规定时间打开,无论是否定位成功,到了时间都会自动关闭此应用;
-
和模式2的区别在于定位成功之后不会自动关闭,到时间之后才会自动关闭。
1.2 exgnss应用注意事项
关于exgnss应用,需要注意以下几点:
1.2.1. 使用exgnss.close()关闭的只是对应的应用,所有应用关闭,gnss也会关闭。
这样做的好处是可以处理不同场景下的不同逻辑:
-
比如服务器下发一条定位指令,定位成功之后关掉,这个时候又下发了一个指令需要长开启定位,这样两种指令就会冲突,需要代码去处理到底是不是要关掉gnss。
-
这个时候应用的好处就体现出来了:
开启exgnss.TIMERORSUC第一个应用,定位成功之后关掉对应的应用,同时开启exgnss.DEFAULT第二个应用,gnss就会常开。在第一个应用结束之后,只会对应用进行自动关闭,不会影响到第二个应用,gnss还会处于常开状态。
1.2.2. 关于agps辅助定位的逻辑:
agps俗称辅助定位,其逻辑是把星历文件发送给gnss芯片,同时发送时间和用基站定位获取的大概位置,然后芯片解析处理,达到快速定位的效果。
-
exgnss扩展库的辅助定位功能,我们处理方式是每个小时都会去更新星历——原因是北斗是1h一更新,gps是4h一更新。所以取最小值,我们选择了一小时一更新。
-
对于辅助定位需要注意的是:
因为辅助定位属于强行把星历文件灌给 gnss 芯片,虽然可以达到快速定位的效果,但是gnss芯片实际解析星历需要时间,exgnss库默认开启了一个20s的gnss应用。做这个操作是因为,假设开启辅助定位,定位到之后立马关掉gnss电源,会导致gnss星历解析不完全,这样会影响下次定位为冷启动,冷启动时间大概需要35s;
如果不需要这个逻辑,可以接受冷启动,或者每次都使用辅助定位,可以通过:exgnss.setup()的auto_open=false配置添加到配置表里面。
2、exgnss库应用示例

本文以Air8000整机开发板为例,分享exgnss库的三种应用模式应用要点。
2.1. main.lua
主要用于加载exgnss扩展库,加载gnss代码。

2.2. gnss.lua
主要操作如下:
-
开启协程,运行gnss_fnc函数,通过exgnss.setup(gnssotps)配置gnss的参数,通过exgnss.open开启三种不同的应用。
-
等待40秒使用exgnss.close关闭TIMER模式,使用exgnss.close需要两个参数,第一个是exgnss应用模式,第二个是tag标签。
-
然后利用exgnss.is_active查询三种应用模式是否处于激活模式,查询应用是否处于激活状态同样需要两个参数,第一个是exgnss 应用模式,第二个是tag标签。
-
等待10秒使用exgnss.close_all关闭全部应用模式,再次查询三种模式是否处于激活模式。
-
然后使用xgnss.last_loc,获取最后一次的定位经纬度数据打印。
-
定位成功之后:
使用subscribe订阅"GNSS_STATE"消息,根据获取到的值判断是否定位成功,定位成功用exgnss.rmc获取rmc数据。

2.3. 示例效果展示
Air8000开发板通过LuaTools烧录内核固件和demo脚本代码,烧录成功后开机运行,查看示例运行结果。




2.4. 使用纠偏网站进行定位纠偏
所有的GNSS功能的坐标系均使用国际标准WGS-84坐标系,所以开发者在国内常见地图定位时,会发现与实际情况有几十米的误差。
这并非模组问题,而是国内地图采用了非标坐标系所致。
国内常见地图如高德地图使用GCJ-02坐标系,百度地图使用BD-09坐标系,故此开发者需要对模组输出的经纬度进行加偏处理,才能在国内的地图上实现精确定位。

更多推荐
所有评论(0)