当前位置: 首页 > news >正文

LuatOS-SOC接口文档(air780E)--libgnss - NMEA数据处理

示例

-- 提醒: 本库输出的坐标,均为 WGS84 坐标系
-- 如需要在国内地图使用, 要转换成对应地图的坐标系, 例如 GCJ02 BD09
-- 相关链接: https://lbsyun.baidu.com/index.php?title=coordinate
-- 相关链接: https://www.openluat.com/GPS-Offset.html-- 方案1, 经lua层进行数据中转
uart.setup(2, 115200)
uart.on(2, "recv", function(id, len)while 1 dolocal data = uart.read(id, 1024)if data and #data > 1 thenlibgnss.parse(data)elsebreakendend
end)
-- 方案2, 适合2022.12.26之后编译固件,效率更高一些
uart.setup(2, 115200)
libgnss.bind(2)-- 可选调试模式
-- libgnss.debug(true)sys.subscribe("GNSS_STATE", function(event, ticks)-- event取值有-- FIXED 定位成功-- LOSE  定位丢失-- ticks是事件发生的时间,一般可以忽略log.info("gnss", "state", event, ticks)
end)

libgnss.parse(str)

处理nmea数据

参数

传入值类型

解释

string

原始nmea数据

返回值

例子

-- 解析nmea数据
libgnss.parse(indata)
log.info("nmea", json.encode(libgnss.getRmc(), "11g"))

libgnss.isFix()

当前是否已经定位成功

参数

返回值

返回值类型

解释

boolean

定位成功与否

例子

log.info("nmea", "isFix", libgnss.isFix())

libgnss.getIntLocation()

获取位置信息

参数

返回值

返回值类型

解释

int

lat数据, 格式为 ddddddddd

int

lng数据, 格式为 ddddddddd

int

speed数据, 单位米. 于2023.9.26修正

例子

-- 建议用libgnss.getRmc(1)
log.info("nmea", "loc", libgnss.getIntLocation())

libgnss.getRmc(data_mode)

获取原始RMC位置信息

参数

传入值类型

解释

int

坐标类数据的格式, 0-DDMM.MMM格式, 1-DDDDDDD格式, 2-DD.DDDDD格式

返回值

返回值类型

解释

table

原始rmc数据

例子

-- 解析nmea
log.info("nmea", "rmc", json.encode(libgnss.getRmc(2)))
-- 实例输出
--[[
{"course":0,"valid":true,   // true定位成功,false定位丢失"lat":23.4067,  // 纬度, 正数为北纬, 负数为南纬"lng":113.231,  // 经度, 正数为东经, 负数为西经"variation":0,  // 地面航向,单位为度,从北向起顺时针计算"speed":0       // 地面速度, 单位为"节""year":2023,    // 年份"month":1,      // 月份, 1-12"day":5,        // 月份天, 1-31"hour":7,       // 小时,0-23"min":23,       // 分钟,0-59"sec":20,       // 秒,0-59
}
]]

libgnss.getGsv()

获取原始GSV信息

参数

返回值

返回值类型

解释

table

原始GSV数据

例子

-- 解析nmea
log.info("nmea", "gsv", json.encode(libgnss.getGsv()))
--[[实例输出
{"total_sats":24,      // 总可见卫星数量"sats":[{"snr":27,     // 信噪比"azimuth":278, // 方向角"elevation":59, // 仰角"tp":0,        // 0 - GPS/SASS/QSZZ, 1 - BD"nr":4         // 卫星编号},// 这里忽略了22个卫星的信息{"snr":0,"azimuth":107,"elevation":19,"tp":1,"nr":31}]
}
]]

libgnss.getGsa(data_mode)

获取原始GSA信息

参数

传入值类型

解释

int

坐标类数据的格式, 0-DDMM.MMM格式, 1-DDDDDDD格式, 2-DD.DDDDD格式

返回值

返回值类型

解释

table

原始GSA数据

例子

-- 获取
log.info("nmea", "gsa", json.encode(libgnss.getGsa(), "11g"))
-- 示例数据
--[[
{"sats":[ // 正在使用的卫星编号9,6,16,16,26,21,27,27,4,36,3,7,8,194],"vdop":0.03083333, // 垂直精度因子,0.00 - 99.99,不定位时值为 99.99"pdop":0.0455,     // 水平精度因子,0.00 - 99.99,不定位时值为 99.99"fix_type":3,      // 定位模式, 1-未定位, 2-2D定位, 3-3D定位"hdop":0.0335      // 位置精度因子,0.00 - 99.99,不定位时值为 99.99
}
]]

libgnss.getVtg(data_mode)

获取VTA速度信息

参数

传入值类型

解释

int

可选, 3-原始字符串, 不传或者传其他值, 则返回浮点值

返回值

返回值类型

解释

table

原始VTA数据

例子

-- 解析nmea
log.info("nmea", "vtg", json.encode(libgnss.getVtg()))
-- 示例
--[[
{"speed_knots":0,        // 速度, 英里/小时"true_track_degrees":0,  // 真北方向角"magnetic_track_degrees":0, // 磁北方向角"speed_kph":0           // 速度, 千米/小时
}
]]

libgnss.getZda()

获取原始ZDA时间和日期信息

参数

返回值

返回值类型

解释

table

原始zda数据

例子

log.info("nmea", "zda", json.encode(libgnss.getZda()))
-- 实例输出
--[[
{"minute_offset":0,   // 本地时区的分钟, 一般固定输出0"hour_offset":0,     // 本地时区的小时, 一般固定输出0"year":2023         // UTC 年,四位数字"month":1,          // UTC 月,两位,01 ~ 12"day":5,            // UTC 日,两位数字,01 ~ 31"hour":7,           // 小时"min":50,           // 分"sec":14,           // 秒
}
]]

libgnss.debug(mode)

设置调试模式

参数

传入值类型

解释

bool

true开启调试,false关闭调试,默认为false

返回值

例子

-- 开启调试, 会输出GNSS原始数据到日志中
libgnss.debug(true)
-- 关闭调试
libgnss.debug(false)

libgnss.getGga(data_mode)

获取GGA数据

参数

传入值类型

解释

int

坐标类数据的格式, 0-DDMM.MMM格式, 1-DDDDDDD格式, 2-DD.DDDDD格式, 3-原始字符串

返回值

返回值类型

解释

table

GGA数据, 若如不存在会返回nil

例子

local gga = libgnss.getGga(2)
if gga thenlog.info("GGA", json.encode(gga, "11g"))
end
--实例输出
--[[
{"dgps_age":0,             // 差分校正时延,单位为秒"fix_quality":1,          // 定位状态标识 0 - 无效,1 - 单点定位,2 - 差分定位"satellites_tracked":14,  // 参与定位的卫星数量"altitude":0.255,         // 海平面分离度, 或者成为海拔, 单位是米,"hdop":0.0335,            // 水平精度因子,0.00 - 99.99,不定位时值为 99.99"longitude":113.231,      // 经度, 正数为东经, 负数为西经"latitude":23.4067,       // 纬度, 正数为北纬, 负数为南纬"height":0                // 椭球高,固定输出 1 位小数
}
]]

libgnss.getGll(data_mode)

获取GLL数据

参数

传入值类型

解释

int

坐标类数据的格式, 0-DDMM.MMM格式, 1-DDDDDDD格式, 2-DD.DDDDD格式

返回值

返回值类型

解释

table

GLL数据, 若如不存在会返回nil

例子

local gll = libgnss.getGll(2)
if gll thenlog.info("GLL", json.encode(gll, "11g"))
end
-- 实例数据
--[[
{"status":"A",        // 定位状态, A有效, B无效"mode":"A",          // 定位模式, V无效, A单点解, D差分解"sec":20,            // 秒, UTC时间为准"min":23,            // 分钟, UTC时间为准"hour":7,            // 小时, UTC时间为准"longitude":113.231, // 经度, 正数为东经, 负数为西经"latitude":23.4067,  // 纬度, 正数为北纬, 负数为南纬"us":0               // 微妙数, 通常为0
}
]]

libgnss.clear()

清除历史定位数据

参数

返回值

返回值类型

解释

nil

无返回值

例子

-- 该操作会清除所有定位数据

libgnss.bind(id, next_id)

绑定uart端口进行GNSS数据读取

参数

传入值类型

解释

int

uart端口号

int

转发到uart的id, 例如虚拟uart.VUART_0

返回值

例子

-- 配置串口信息, 通常为 115200 8N1
uart.setup(2, 115200)
-- 绑定uart, 马上开始解析GNSS数据
libgnss.bind(2)
-- 无需再调用uart.on然后调用libgnss.parse
-- 开发期可打开调试日志
libgnss.debug(true)-- 2023-01-02之后编译的固件有效
-- 从uart2读取并解析, 同时转发到虚拟串口0
libgnss.bind(2, uart.VUART_0)

libgnss.locStr(mode)

获取位置字符串

参数

传入值类型

解释

int

字符串模式. 0- Air780EG所需的格式

return

指定模式的字符串

返回值

例子

-- 仅推荐在定位成功后调用

libgnss.rtcAuto(enable)

定位成功后自动设置RTC

参数

传入值类型

解释

bool

开启与否, 默认是false关闭

返回值

例子

-- 开启自动设置RTC
libgnss.rtcAuto(true)

libgnss.on(tp, fn)

底层事件回调

参数

传入值类型

解释

string

事件类型,当前支持”raw”

返回值

例子

-- 本函数一般用于调试, 用于获取底层实际收到的数据
libgnss.on("raw", function(data)log.info("GNSS", data)
end)

libgnss.getTxt()

获取非标的GPTXT数据

参数

传入值类型

解释

return

GPTXT所携带的字符串

返回值

例子

-- 本函数于2023.6.6 添加
log.info("gnss", "txt", libgnss.getTxt())-- 测试语句
libgnss.parse("$GPTXT,01,01,01,ANTENNA SHORT*63\r\n")
log.info("GNSS", libgnss.getTxt())
libgnss.parse("$GPTXT,01,01,01,ANTENNA OPEN*25\r\n")
log.info("GNSS", libgnss.getTxt())
libgnss.parse("$GPTXT,01,01,01,ANTENNA OK*35\r\n")
log.info("GNSS", libgnss.getTxt())

相关文章:

LuatOS-SOC接口文档(air780E)--libgnss - NMEA数据处理

示例 -- 提醒: 本库输出的坐标,均为 WGS84 坐标系 -- 如需要在国内地图使用, 要转换成对应地图的坐标系, 例如 GCJ02 BD09 -- 相关链接: https://lbsyun.baidu.com/index.php?titlecoordinate -- 相关链接: https://www.openluat.com/GPS-Offset.html-- 方案1, 经lua层进行数…...

基于华为云 IoT 物联网平台实现家居环境实时监控

01 智能家居环境监测 智能家居环境监测采用 Ruff 开发板作为主控,串口线连接温湿度传感器 DHT11 和空气质量传感器 SDS011,每5分钟采集一次数据,通过 MQTT 协议发送到华为云 IoT 物联网平台,并基于数据分析服务实时计算出整个家庭…...

【开源框架】Glide的图片加载流程

本篇文章从Glide 4.11源码入手,简单的分析整个图片请求的流程,本着 ”只见树林,不见树木“ 的原则,宏观请求流程,不细究实现细节(细节留坑埋点,之后慢慢写) 引入依赖 以下的所有分…...

win10下Mariadb绿色版安装步骤

使用绿色版的mariadb数据库管理软件,免费开源,可以用来替换MySQL。首先从mariadb官网下载绿色版本的压缩包。解压后、配置好即可以使用。 把他解压缩到C:\mariadb\之下。打开powershell: Cd c:\mariadb\bin .\mysql_install_db.exe 这一…...

wiresharak捕获DNS

DNS解析: 过滤项输入dns: dns查询报文 应答报文: 事务id相同,flag里 QR字段1,表示响应,answers rrs变成了2. 并且响应报文多了Answers 再具体一点,得到解析出的ip地址(最底下的add…...

vue源码分析(一)——源码目录说明

文章目录 一、如何下载源码(可忽略)(1)打开地址(2)复制链接(3)git clone 链接 二、源码目录说明1.可以根据你下载的源码通过package.json文件查看vue版本2.源码目录说明 一、如何下载…...

【深度学习】吴恩达课程笔记(二)——浅层神经网络、深层神经网络

笔记为自我总结整理的学习笔记,若有错误欢迎指出哟~ 笔记链接 【深度学习】吴恩达课程笔记(一)——深度学习概论、神经网络基础 吴恩达课程笔记——浅层神经网络、深层神经网络 四、浅层神经网络1.双层神经网络表示2.双层神经网络的前向传播第一层前向传播第二层前…...

UI自动化概念 + Web自动化测试框架介绍

1.UI自动化测试概念:我们先明确什么是UI UI,即(User Interface简称UI用户界面)是系统和用户之间进行交互和信息交换的媒介 UI自动化测试: Web自动化测试和移动自动化测试都属于UI自动化测试,UI自动化测试就是借助自动化工具对程序UI层进行自动化的测试 …...

在 macOS 上的多个 PHP 版本之间切换

文章目录 前言一、前提条件1.引入库需要安装 Xcode 2.安装多个PHP版本2.PHP版本切换 开源替代品 前言 不同项目使用php版本可能不同,需要安装不同版本php 一、前提条件 1.引入库 需要安装 Xcode 命令行工具和Homebrew xcode-select --install检查brew是否已安…...

地址解析协议ARP

地址解析协议(Address Resolution Protocol,ARP),用于根据本网内目的主机或默认网关的IP地址获取其MAC地址。 ARP的基本思想:在每一台主机中设置专用内存区域,称为ARP高速缓存(也称为ARP表&…...

Go学习第十三章——Gin入门与路由

Go web框架——Gin入门与路由 1 Gin框架介绍1.1 基础介绍1.2 安装Gin1.3 快速使用 2 路由2.1 基本路由GET请求POST请求 2.2 路由参数2.3 路由分组基本分组带中间件的分组 2.4 重定向 1 Gin框架介绍 github链接:https://github.com/gin-gonic/gin 中文文档&#xf…...

[减脂期食谱] 自制千岛酱

[减脂期食谱] 自制千岛酱 成品如下: 最中间的那个,算比较居中的颜色吧,其实自己家做原版的千岛酱还是比较简单的,它的底就是蛋黄酱(蛋黄油乳化的酱),随后里面的材料比较自由,维基百科是这么介绍的&#xf…...

Android 系统架构

目录 Android 系统架构 1. Android 应用层 2. Android应用框架层 2.1 Activity Manager (活动管理器) 2.2 Window Manager (窗口管理器) 2.3 Content Provider (内容提供器) 2.4 View System(视图系统&a…...

【Docker】Python Flask + Redis 练习

一、构建flask镜像 1.准备文件 创建app.py,内容如下 from flask import Flask from redis import Redis app Flask(__name__) redis Redis(hostos.environ.get(REDIS_HOST,127.0.0.1),port6379)app.route(/) def hello():redis.incr(hits)return f"Hello Container W…...

shell_52.Linux测试与其他网络主机的连通性脚本

实战演练 本节将展示一个实用脚本,该脚本在处理用户输入的同时,使用 ping 命令或 ping6 命令来测试与其他网络主机的连通性。 ping 命令或 ping6 命令可以快速测试网络主机是否可用。这个命令很有用,经常作为首选工具。如果只是检查单个主机&…...

OpenCV C++ 图像处理实战 ——《缺陷检测》

OpenCV C++ 图像处理实战 ——《缺陷检测》 一、结果演示二、缺陷检测算法2.1、多元模板图像2.2、训练差异模型三、图像配准3.1 功能源码3.1 功能效果四、多元模板图像4.1 功能源码五、缺陷检测5.1 功能源码六、源码测试图像下载总结一、结果演示...

Python操作MySQL基础使用

Python操作MySQL基础使用 链接数据库并查询数据 import pymysql# 链接数据库 conn pymysql.connect(host10.5.6.250,port3306,userroot,password******** )# 查看MySQL版本信息 print(conn.get_server_info()) # 5.5.27# 获取到游标对象 cursor conn.cursor()# 选择数据库…...

【pytorch】pytorch中的高级索引

这里只介绍pytorch的高级索引,是一些奇怪的切片索引 基本版 a[[0, 2], [1, 2]] 等价 a[0, 1] 和 a[2, 2],相当于索引张量的第一行的第二列和第三行的第三列元素; a[[1, 0, 2], [0]] 等价 a[1, 0] 和 a[0, 0] 和 a[2, 0],相当于索…...

基于图像识别的自动驾驶汽车障碍物检测与避障算法研究

基于图像识别的自动驾驶汽车障碍物检测与避障算法研究是一个涉及计算机视觉、机器学习、人工智能和自动控制等多个领域的复杂问题。以下是对这个问题的研究内容和方向的一些概述。 障碍物检测 障碍物检测是自动驾驶汽车避障算法的核心部分,它需要从车辆的感知数据…...

Spring boot定时任务

目录 前言一、使用 Scheduled 注解二、使用 ScheduledExecutorService三、使用 Spring 的 TaskScheduler四、使用第三方调度框架 前言 在 Spring Boot 中,有多种方法来编写定时任务,以执行周期性或延迟执行的任务。下面是几种常见的方式 一、使用 Sche…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) ​遍历字符串​:通过外层循环逐一检查每个字符。​遇到 ? 时处理​: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: ​与…...

腾讯云V3签名

想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...

人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent

安全大模型训练计划:基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标:为安全大模型创建高质量、去偏、符合伦理的训练数据集,涵盖安全相关任务(如有害内容检测、隐私保护、道德推理等)。 1.1 数据收集 描…...

Monorepo架构: Nx Cloud 扩展能力与缓存加速

借助 Nx Cloud 实现项目协同与加速构建 1 ) 缓存工作原理分析 在了解了本地缓存和远程缓存之后,我们来探究缓存是如何工作的。以计算文件的哈希串为例,若后续运行任务时文件哈希串未变,系统会直接使用对应的输出和制品文件。 2 …...

麒麟系统使用-进行.NET开发

文章目录 前言一、搭建dotnet环境1.获取相关资源2.配置dotnet 二、使用dotnet三、其他说明总结 前言 麒麟系统的内核是基于linux的,如果需要进行.NET开发,则需要安装特定的应用。由于NET Framework 是仅适用于 Windows 版本的 .NET,所以要进…...

shell脚本质数判断

shell脚本质数判断 shell输入一个正整数,判断是否为质数(素数)shell求1-100内的质数shell求给定数组输出其中的质数 shell输入一个正整数,判断是否为质数(素数) 思路: 1:1 2:1 2 3:1 2 3 4:1 2 3 4 5:1 2 3 4 5-------> 3:2 4:2 3 5:2 3…...