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 中文文档…...
[减脂期食谱] 自制千岛酱
[减脂期食谱] 自制千岛酱 成品如下: 最中间的那个,算比较居中的颜色吧,其实自己家做原版的千岛酱还是比较简单的,它的底就是蛋黄酱(蛋黄油乳化的酱),随后里面的材料比较自由,维基百科是这么介绍的…...
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…...
诺和新元在华两大重点项目在天津和太仓竣工启用 | 美通社头条
美通社消息:近日,全球领先的生物解决方案合作伙伴诺和新元(Novonesis)分别在天津经济技术开发区(TEDA)与江苏太仓举行重点项目竣工启用活动。诺和新元天津经开区项目竣工启用活动天津新行政办公楼项目是诺和新元在华运营体系的重要升级。本次项目的落成不…...
如何用Nvidia Geforce RTX 5060 Ti显卡进行本地Whisper语音转文字任务?
在Windows平台上,用你的RTX 5060 Ti 16GB显卡搭建本地Whisper语音转文字服务,主要有几种方式:从开箱即用的图形界面,到追求极致速度的命令行,再到能集成其他AI应用的API服务。我整理了详细的步骤,你可以根据…...
仅限首批200家零售企业获取:2024中国零售Agent成熟度评估矩阵V2.1(含137项能力测评项+自动生成差距报告)
更多请点击: https://codechina.net 第一章:AI Agent零售行业应用 AI Agent 正在重塑零售行业的客户体验、供应链效率与决策智能化水平。通过融合自然语言理解、多步推理、工具调用与记忆机制,AI Agent 不再是单点问答机器人,而是…...
Claude + MS Project双引擎协同术:5分钟完成跨时区资源冲突检测与重排程,压测显示交付准时率提升41.6%
更多请点击: https://codechina.net 第一章:Claude项目管理应用技巧 Claude 作为具备强推理与长上下文理解能力的大语言模型,可深度融入项目管理全生命周期,提升需求分析、任务拆解、进度追踪与风险预判效率。关键在于将其定位为…...
NVIDIA Vera Rubin 平台如何解决 Agentic AI 的 Scale-up 难题
NVIDIA Vera Rubin 平台如何解决 Agentic AI 的 Scale-up 难题 [外链图片转存中…(img-5hHDDlgn-1779546321135)] Agentic AI 改变了推理系统的负载形态。传统推理通常可以理解为一次请求、一次生成;Agentic inference 则会展开成非确定性轨迹:Agent 做…...
CI/CD最佳实践:构建高效可靠的持续集成和部署流程
CI/CD最佳实践:构建高效可靠的持续集成和部署流程 一、CI/CD最佳实践概述 1.1 CI/CD最佳实践的定义 CI/CD最佳实践是指在持续集成和持续部署过程中遵循的一系列指导原则和方法。它通过自动化、标准化和可重复的流程,提高软件开发和部署的效率和可靠性。 …...
AI Agent如何重构咨询交付模式:从人工周级报告到秒级洞察,头部咨询公司内部流程解密
更多请点击: https://intelliparadigm.com 第一章:AI Agent如何重构咨询交付模式:从人工周级报告到秒级洞察,头部咨询公司内部流程解密 传统管理咨询项目中,一线顾问需耗时5–7天完成行业扫描、竞对分析、客户数据清洗…...
鸿蒙今日穿搭页面构建:衣橱库存、今日配色与场景建议模块详解
鸿蒙今日穿搭页面构建:衣橱库存、今日配色与场景建议模块详解 前言 在 HarmonyOS 6.0 应用开发中,穿搭类页面的衣橱管理、配色方案和场景化建议是提升用户实用性的关键功能模块。本文将以“今日穿搭”应用中的“衣橱库存”进度条模块、“今日配色”色彩盘…...
【限时公开】我们压测了23个开源AI Agent框架,仅2个支持亚秒级SQL生成+自动schema纠错(测试报告PDF已备)
更多请点击: https://codechina.net 第一章:AI Agent数据分析应用 AI Agent 正在重塑数据分析的范式——它不再依赖人工编写 SQL 或手动配置 ETL 流程,而是通过自然语言理解任务意图、自主调用工具、迭代验证结果,并生成可解释的…...
长尾关键词助力扫描SEO效果的全新方法
长尾重要词在SEO优化中扮演着重要角色,帮助网站吸引特定的目标用户。这些重要词通常较长且具有明确意图,虽然单个搜索量不高,但它们在低竞争环境中发光发热。依靠聚焦这些重要词,企业能够提高搜索排名和流量,进而促进转…...
