LuatOS exgnss扩展库应用精讲:GNSS调试与优化实战全景!

news/2025/11/14 15:15:23/文章来源:https://www.cnblogs.com/luatos/p/19222182

GNSS调试常因坐标偏差或信号问题困扰开发者。本文聚焦LuatOS exgnss库的实战应用,以iNavTool工具为辅助,全景展示参数配置、激活状态查询(exgnss.is_active)、多模式关闭(exgnss.close_all)等流程,并深入探讨国内地图纠偏策略,提供可复用的优化方案,提升定位精度与稳定性。

一、GNSS 概述

GPS 最先来自美国,1978 年,美国发射了第一颗 GPS 卫星,发明和实践了卫星定位技术。卫星定位技术原理是,覆盖全球的多颗定位卫星连续发射一定频率的无线电信号,移动终端上集成便携式卫星信号接收机,接收机接收卫星信号并测量卫星到终端接收机之间的距离,最终由移动终端利用多颗卫星位置和与这些卫星的距离计算出移动终端的具体位置。后来出现了欧洲的 Galileo、俄罗斯的 GLONASS、中国的北斗等,所以如今的 GPS 实质上是作为一个卫星定位技术体系 GNSS 的代名词,而不是单只美国的 GPS 系统。

GNSS 提供的服务包括定位、授时和导航。定位服务就是 GNSS 终端获得其位置的服务,授时服务就是 GNSS 终端获得正确时间的服务,导航服务是计算 GNSS 终端速度和运动方向的服务。GNSS 不限制终端数,在 GNSS 卫星信号不被阻挡的情况下,在地球上任何地点、任何时间,任何 GNSS 终端都可以得到正确的位置和时间。定位只需要一个条件,那就是能够接收到足够多的卫星信号。因此在室内通常无法定位。

Air8000 作为集成了 4G、Wi-Fi、BLE、GNSS(全球导航卫星系统)等多功能的高性能工业引擎,其内置的 GNSS 模块能够提供稳定、准确的定位服务。

二、演示功能概述

使用 Air8000 开发板,single 示例主要是展示 exgnss 库的三种应用模式,

exgnss.DEFAULT 模式

exgnss.TIMERORSUC 模式

exgnss.TIMER 模式

主要操作为:

1、打开三种应用模式

2、等待 40 秒关闭操作 TIMER 模式

3、然后查询三种应用模式是否处于激活模式

4、等待 10 秒关闭全部应用模式,再次查询三种模式是否处于激活模式

5、然后获取最后一次的定位经纬度数据打印

6、定位成功之后使用 exgnss 库获取 gnss 的 rmc 数据

combination 示例主要展示几种不同的应用场景:

第一种场景是:正常模式,第一步先是通过 tcp_client_main 文件连接服务器,然后第二步模块会配置 GNSS 参数,开启 GNSS 应用,第三步会开启一个 60s 的定时器,定时器每 60s 会打开一个 60sTIMERRORSUC 应用,第四步定位成功之后关闭 GNSS,然后获取 rmc 获取经纬度数据,发送经纬度数据到服务器上。

第二种场景是:低功耗模式,第一步先是通过 tcp_client_main 文件连接服务器,然后第二步模块会配置 GNSS 参数,开启 GNSS 应用,第三步会开启一个 60s 的定时器,定时器每 60s 会进入正常模式,打开一个 60sTIMERRORSUC 应用,第四步定位成功之后关闭 GNSS,然后获取 rmc 获取经纬度数据,发送经纬度数据到服务器上,进入低功耗模式。

第三种场景是:PSM+ 模式,唤醒之后第一步是配置 GNSS 参数,开启 GNSS 应用,第二步定位成功之后关闭 GNSS,然后获取 rmc 获取经纬度数据,拼接唤醒信息和经纬度信息,连接服务器,然后把数据发送数据到服务器上,配置休眠唤醒定时器 ,进入飞行模式,然后进入 PSM+ 模式。

第四种场景是:三轴加速度的应用场景,第一步先是通过 tcp_client_main 文件连接服务器,第二步配置 GNSS 参数,打开内部加速传感器,设置防抖和中断模式,关于中断触发提供了两种方案,有效震动模式和持续震动检测模式,第三步检测到有效震动或者持续震动后,打开 GNSS,每隔 5s 获取 rmc 获取经纬度数据,发送经纬度数据到服务器上。

三、准备硬件环境

本篇教程用 Air8000 开发板来开发调试。

  1. Air8000 开发板

  2. GNSS 天线

四、准备软件环境

  1. 烧录工具 Luatools;

  2. 内核固件文件(底层 core 固件文件):LuatOS-SoC_V2014_Air8000;此页面有新版本固件的话选用最新版本固件,本次操作用的是 101 号固件,可以根据自己的需求选择自己需要的固件。

  3. LuatOS 需要的脚本和资源文件:https://gitee.com/openLuat/LuatOS/tree/master/module/Air8000/demo/gnss

  4. lib 脚本文件:使用 Luatools 烧录时,勾选 添加默认 lib 选项,使用默认 lib 脚本文件,如果没有下载最新的 lib,可以在 luatos 库里面下载最新的 lib 使用:https://gitee.com/openLuat/LuatOS/tree/master/script/libs;

准备好软件环境之后,接下来查看如何烧录项目文件到 Air8000 开发板中,将本篇文章中演示使用的项目文件烧录到 Air8000 开发板中。

五、GNSS 软硬件参考

5.1 API 接口介绍

本教程使用 api 接口为:

https://docs.openluat.com/osapi/ext/exgnss/

5.2 GNSS 硬件设计

GNSS 在硬件设计中天线部分是比较关键的,可以参考这篇文章:Air8000 GNSS 硬件设计指导;https://docs.openluat.com/air8000/luatos/hardware/design/gnssant/

在开发板上,内置了 3.3V LDO, 用于有源天线供电。因此可以使用外部有源天线直接连接 GNSS 连接器。

注意:目前有源天线供电仅支持 3.3V 有源天线,请注意连接的有源天线的供电范围。

六、代码示例介绍

本文主要提供 2 个 demo 目录,single 和 combination,其中 single 只是对 exgnss 库的三种 GNSS 应用的展示,combination 主要是提供了四种应用场景

noraml:正常功耗模式定位

lowpower:低功耗模式

psm:PSM+ 模式

vibration:三轴加速度传感器触发定位

6.1 exgnss 的三种应用的用法

6.1.1 exgnss 的应用说明

关于 exgnss 库的三种应用说明:

image

关于应用需要注意的是:使用 exgnss.close()关闭的只是对应的应用,所有应用关闭,gnss 也会关闭,这样做的好处是可以处理不同场景下的不同逻辑,比如服务器下发一条定位指令,定位成功之后关掉,这个时候又下发了一个指令需要长开启定位,这样两种指令就会冲突,需要代码去处理到底是不是要关掉 gnss,这个时候应用的好处就体现出来了,开启 exgnss.TIMERORSUC 第一个应用,定位成功之后关掉对应的应用,同时开启 exgnss.DEFAULT 第二个应用,gnss 就会常开,在应用 1 结束之后,只会对应用进行自动关闭,不会影响到第二个应用,gnss 还会处于常开状态。

关于 agps 辅助定位的逻辑:agps 俗称辅助定位,其逻辑是把星历文件发送给 gnss 芯片,同时发送时间和用基站定位获取的大概位置,然后芯片解析处理,达到快速定位的效果。

exgnss 扩展库的辅助定位功能,我们处理方式是每个小时都会去更新星历,原因是北斗是 1h 一更新,gps 是 4h 一更新,所以取最小值,我们选择了一小时一更新

对于辅助定位需要注意的是,因为辅助定位属于强行把星历文件灌给 gnss 芯片,虽然可以达到快速定位的效果,但是 gnss 芯片实际解析星历需要时间,exgnss 库默认开启了一个 20s 的 gnss 应用,做这个操作是因为,假设开启辅助定位,定位到之后立马关掉 gnss 电源,会导致 gnss 星历解析不完全,这样会影响下次定位为冷启动,冷启动时间大概需要 35s。如果不需要这个逻辑,可以接受冷启动,或者每次都使用辅助定位,可以通过 exgnss.setup()的 auto_open=false 配置添加到配置表里面。

6.1.2 代码讲解

main.lua

主要是为了加载了 exgnss 扩展库,加载 gnss 代码

image

gnss.lua

主要操作为:

1.开启协程,运行 gnss_fnc 函数,通过 exgnss.setup(gnssotps)配置 gnss 的参数,通过 exgnss.open 开启三种不同的应用

2.等待 40 秒使用 exgnss.close 关闭 TIMER 模式,使用 exgnss.close 需要两个参数,第一个是 exgnss 应用模式,第二个是 tag 标签

3.然后利用 exgnss.is_active 查询三种应用模式是否处于激活模式,查询应用是否处于激活状态同样需要两个参数,第一个是 exgnss 应用模式,第二个是 tag 标签

4.等待 10 秒使用 exgnss.close_all 关闭全部应用模式,再次查询三种模式是否处于激活模式

5.然后使用 xgnss.last_loc 获取最后一次的定位经纬度数据打印

6.定位成功之后使用 subscribe 订阅"GNSS_STATE"消息,根据获取到的值判断是否定位成功,定位成功用 exgnss.rmc 获取 rmc 数据

image

6.1.3 效果展示

image
image
image
image
image

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

以下是纠偏网站:

http://old.openluat.com/GPS-Offset.html

image

6.2 正常功耗模式下的 GNSS 应用

main.lua

主要是支持 4 个场景的切换,每次只能打开一个用于测试,选择对应的功能进行测试
image

6.2.1 代码讲解

normal.lua

normal 主要操作:

1.开启协程,运行 gnss_fnc 函数,通过 exgnss.setup(gnssotps)配置 gnss 的参数,然后 require tcp_client_main 文件,连接服务器

2.通过 exgnss.open 开启 exgnss.TIMERORSUC 应用模式,设置的 tag 为 normal,定位时间为 60s,回调函数为 normal_cb,这个模式定位成功之后会关掉 GNSS,然后触发回调函数,回调函数的操作为,通过 exgnss.rmc(0)接口获取 rmc 数据,然后把经纬度拼接成 json 字符串的形式,通过 sys.publish 函数,把数据传给 tcp_client_sender.lua 文件里面处理。

3.用 sys.timerLoopStart()起一个 60s 触发一次的打开 GNSS 定位的定时器,回调函数为 normal_open,回调函数内容和上面开启 exgnss.TIMERORSUC 应用模式一致

image

6.2.2 效果展示

image
image
image

测试服务器收到消息:

image

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

以下是纠偏网站:

http://old.openluat.com/GPS-Offset.html

image

6.3 低功耗模式下的 GNSS 应用

6.3.1 代码讲解

lowpower.lua

normal 主要操作:

1.开启协程,运行 gnss_fnc 函数,通过 exgnss.setup(gnssotps)配置 gnss 的参数,然后 require tcp_client_main 文件,连接服务器。

2.通过 exgnss.open 开启 exgnss.TIMERORSUC 应用模式,设置的 tag 为 lowpower,定位时间为 60s,回调函数为 lowpower_cb,这个模式定位成功之后会关掉 GNSS,然后触发回调函数,回调函数的操作为,通过 exgnss.rmc(0)接口获取 rmc 数据,然后把经纬度拼接成 json 字符串的形式,通过 sys.publish 函数,把数据传给 tcp_client_sender.lua 文件里面处理,然后调用 pm.power(pm.WORK_MODE, 1)--进入低功耗模式,pm.power(pm.WORK_MODE,1,1)--wifi 进入低功耗模式。这两个函数主要是为了让模块和 wifi 模块进入低功耗模式。

3.用 sys.timerLoopStart()起一个 60s 触发一次的打开 GNSS 定位的定时器,回调函数为 lower_open,回调函数内容主要是调用 pm.power(pm.WORK_MODE, 0)进入正常模式,然后和上面开启 exgnss.TIMERORSUC 应用模式一致,

然后关闭 USB,节省功耗

image

6.3.2 效果展示

image

image

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

以下是纠偏网站:

http://old.openluat.com/GPS-Offset.html
image

6.4 PSM+ 模式下的 GNSS 应用

6.4.1 代码讲解

psm.lua

psm 主要操作:

1.开启协程,运行 gnss_fnc 函数,通过 exgnss.setup(gnssotps)配置 gnss 的参数。

2.通过 exgnss.open 开启 exgnss.TIMERORSUC 应用模式,设置的 tag 为 psm,定位时间为 60s,回调函数为 psm_cb,这个模式定位成功之后会关掉 GNSS,然后触发回调函数,回调函数的操作为,通过 exgnss.rmc(0)接口获取 rmc 数据,获取经纬度并赋值变量,然后使用 sysplus.taskInitEx 开启 TCP 短连接协程,连接服务器发送经纬度消息和唤醒消息内容。

3.发送完毕之后设置定时器,然后进入飞行模式,进入 psm+ 模式

image

6.4.2 效果展示

image

image

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

以下是纠偏网站:

http://old.openluat.com/GPS-Offset.html

image

6.5 运动检测定位模式下的 GNSS 应用

6.5.1 代码讲解

vibration.lua

vibration 主要操作:

1.开启协程,运行 gnss_fnc 函数,通过 exgnss.setup(gnssotps)配置 gnss 的参数,然后 require tcp_client_main 文件,连接服务器,require exvib 扩展库,

2.设置三轴加速度传感器为微小震动模式 exvib.open(1),关于 exvib 的三种模式:

image

3.8000 内置的三轴加速度传感器的中断触发脚为 gpio.WAKEUP2,设置 gpio 防抖为 100ms,然后设置中断触发

4.代码里面提供了两种触发方式:

第一种是持续震动模式:

加速度传感器震动之后触发中断,中断触发之后使用 exgnss.open 打开定时器,设置 exgnss.DEFAULT 模式,这种模式是一直开启 GNSS,直到调用关闭接口关闭才会关掉,定位成功之后每 5s 上传一次经纬度数据,

假设 10s 内没有再触发震动,则关闭 gnss,等待下一次震动触发

第二种方式是有效震动模式:

震动触发之后计算为一次触发,如果 10s 内触发 5 次有效震动,则开启后续逻辑,如果 10s 内没有触发 5 次,

则判定为无效震动,等待下一次触发,如果是有效震动就使用 exgnss.open 打开定时器,设置 exgnss.DEFAULT 模式,进行定位,

定位成功之后每 5s 上传一次经纬度数据到服务器,有效震动触发之后有 30 分钟的等待时间,在此期间,如果触发有效震动则

不去进行后续逻辑处理,30 分钟时间到了之后,等待下一次有效震动

这两种模式通过打开不同的注释来执行
image

6.5.2 效果展示

有效中断模式:
image

image

image

有效震动模式:

image
image
image

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

以下是纠偏网站:

http://old.openluat.com/GPS
image

6.6 TCP 部分代码

TCP 部分代码为通用格式内容,里面有对注释的描述,在 GNSS 篇章就不过多对 TCP 的代码做讲解了,如果有需要可以看 TCP 章节

tcp_client_main.lua
image

tcp_client_reveiver.lua

image

tcp_client_sender.lua
image

将定位成功后的经纬度复制到https://www.openluat.com/GPS-Offset.html。可以查看位置信息和坐标系转换后的经纬度。
image

七、总结

本教程详细介绍了如何使用 exgnss 扩展库搭配 Air8000 的 GNSS 功能,包括硬件连接、软件配置、代码编写等步骤。通过本教程的学习,读者应该能够掌握 exgnss 扩展库功能的基本使用方法,并能够根据实际需求进行扩展和应用。

八、注意事项与常见问题

8.1、GNSS 定位经纬度不准确

1、坐标没有纠偏,参考:http://www.openluat.com/GPS-Offset.html 进行纠偏处理

2、周围有比较高的障碍物,会导致定位误差

3、在开阔地带,正常情况下定位精度只能做到 5 米

4、不能在室内测试,必须到室外测试;如果只能在室内测试,可以淘宝搜索“GNSS 信号转发器”

8.2、Air8000 获取到的经纬度数据是基于什么坐标系

使用国际标准 WGS-84 坐标系,需要自己进行坐标系转换各 GNSS 坐标系说明以及转换方法。

8.3、GPS 天线如何设计

参考:https://docs.openluat.com/air8000/luatos/hardware/design/gnssant/

8.4、可视卫星、可用卫星有什么区别

可视卫星是当前区域,接收条件良好情况下,应该可以收到卫星信号的卫星。

可用卫星是当前已经收到信号并正在使用参与定位的卫星。

8.5、 GGA 和 RMC 应该用哪个

视具体情况而定,建议用 gga,信息相对更全面。

8.6、如何解读 NMEA 报文每个字段的含义

参考:NMEA-0183 协议简介

8.7、车载使用时需要天线引出到车顶上吗

1、挡风玻璃如果没有贴膜或者贴了不含金属材料的膜,可以放在挡风玻璃下,但是 GNSS 信号会有一定衰减,在万不得已的情况下,可以放在挡风玻璃下,最好再实际测试确认一下。 2、挡风玻璃如果贴了含有金属材料的膜,则不能放在挡风玻璃下,必须将天线到车顶。

8.8、如何输出原始 NMEA 数据

可以通过 exgnss.setup()接口的 bind 参数进行绑定。

image

今天的内容就分享到这里了~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/965432.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

当下高压氧舱机构的行业现状

摘要 高压氧舱行业近年来快速发展,得益于健康意识提升和科技创新,市场规模持续扩大。本文基于权威数据和分析,排名2025年高压氧舱机构TOP10,为读者提供参考。排名综合考虑技术领先性、用户口碑和服务效果,旨在帮助…

Keycloak会话标识符重用漏洞导致会话劫持风险分析

本文详细分析了Keycloak身份认证系统中的安全漏洞CVE-2025-12390,该漏洞由于会话标识符重用和登出时清理不彻底,可能导致会话被劫持,一个用户意外获取另一个用户的访问令牌。Keycloak vulnerable to session takeov…

B5817W-ASEMI可直接替换安世PMEG2005EH

B5817W-ASEMI可直接替换安世PMEG2005EH编辑:ll B5817W-ASEMI可直接替换安世PMEG2005EH ASEMI首芯半导体可替代安氏半导体功率器件 型号:B5817W 品牌:ASEMI 封装:SOD-123 特性:肖特基二极管 正向电流:1A 反向耐压…

2025年国内废气废液焚烧厂家综合实力Top5权威评测

摘要 随着环保政策的日益严格,废气废液焚烧处理行业在2025年迎来快速发展期。本文基于行业数据和技术参数,对当前市场上主流废气废液焚烧厂家进行综合评测,为有采购需求的企业提供参考依据。文末附有详细咨询表单,…

2025年有实力的平移门公司推荐排行榜

摘要 平移门行业在2025年持续快速发展,智能化和安全化成为主流趋势,广泛应用于商业、工业和公共设施领域。本文基于市场调研和用户反馈,整理了当前市面上优秀的平移门服务商排名,并提供详细榜单供参考。榜单旨在帮…

4.2.3 疲劳强度试验 11.14

1. 计算方法 疲劳强度试验也称作疲劳极限试验、强度试验或响应试验,其目标是预估在给定高周疲劳寿命条件下疲劳强度的统计分布。在众多疲劳强度试验方法中,阶梯法(通常被称为上下法)是一种最常用的方法,已被许多…

[LangChain] 17. Memory基础

大模型本身是无状态的,每次调用都只看当前输入。如果要在多轮对话中维持上下文,就需要 Memory 模块来存储和管理对话历史。 LangChain.js 针对 Memory 提供了多个工具类,先来学习最常用的 ChatMessageHistory 快速上…

Java Exchanger

Java Exchanger Exchanger 是 JDK 1.5 起提供的并发工具类,主要用于两个工作线程之间交换数据,兼具特定的同步特性与应用场景。 核心特性对外操作是同步的,确保线程间数据交换的有序性。 专门用于成对出现的线程之间…

2025 最新净化工程厂家推荐排行榜 实验室 / 手术室 / 医药 / 食品 / 厂房洁净工程优质服务商医药/食品净化工程/净化车间工程公司推荐

引言 在医疗健康、生物制药、电子制造等核心领域的高速发展驱动下,净化工程已成为保障生产研发环境安全的核心基础设施,市场需求持续攀升。据国际洁净室与相关受控环境协会(ICCCS)最新测评数据显示,全球合格净化工…

通配符优化 dp 学习笔记

闵可夫斯基和 优化 dp \(\left( \min/\max,+\right)\) 卷积 形如: \[f_i=\max ^i_{j=0}/\min ^i_{j=0} {g_j+h_{i-j}} \]的式子被称为 \(\left( \min/\max,+\right)\) 卷积。 闵可夫斯基和 以 \(\min\) 为例,要求 \(…

2025年尖角方管实力厂家权威推荐榜单:玻璃幕墙精致钢/直角方矩管/精制钢源头厂家精选

在高端幕墙与精密制造领域,尖角方管凭借其精准的直角轮廓和卓越的结构性能,已成为实现现代建筑美学与安全的关键材料。 根据行业调研数据,2025年全球精制钢市场规模预计将保持稳定增长,其中幕墙用精制钢的年复合增…

20232308 2025-2026-1 《网络与系统攻防技术》实验五实验报告

1.实验内容 1.1本周学习内容 网络信息搜集 网络踩点 网络扫描 网络查点 1.2实验目标 (1)从www.besti.edu.cn、baidu.com、sina.com.cn中选择一个DNS域名进行查询,获取如下信息: DNS注册人及联系方式 该域名对应IP地…

TurboWarp 部署云变量服务

从GitHub下载cloud-server代码https://github.com/TurboWarp/cloud-serverg 根据README文档部署云变量服务 cloud-server‌是一个为Scratch 3设计的云数据服务器,被forkphorus和TurboWarp使用。 它使用的协议与Scrat…

Java 信号量机制实现

Java 信号量机制实现 信号量 Semaphore 信号量可限制访问共享资源的线程数。线程访问资源前需从信号量获取许可,访问结束后需将许可归还信号量。场景介绍 一个停车场只有5个车位,现有100辆车争抢这5个车位。理想情况…

习题解析之:字母查找

习题解析之:字母查找【问题描述】 定义一个函数来判断单词m是否可以由字符串n中出现的字母来组成。本题保证字符串中出现的字母均为小写字母,且不考虑n中的字母使用次数。在两行中分别输入两个字符串m,n如果输入的m包…

lc:338练习的一点思考

public int[] CountBits(int n) { int[] res = new int[n + 1]; for (int i = 0; i <= n; i++) { res[i] = CountOnesWithBitOperation(i); } return res; } …

京东商品评论接口深度逆向:从加密参数破解到情感倾向分析

京东商品评论接口因涉及用户行为数据,其反爬机制比商品详情、搜索接口更为严格,不仅采用多层参数加密,还引入了基于用户行为轨迹的动态验证。本文将突破传统的单一接口模拟思路,通过逆向评论加载的完整链路,实现评…

JSC2023 Max Degree Sum

并查集+贪心维护边权超小的动态 MST显然有一个暴力是按 \([u_i\leq k]+[v_i\leq k]\) 为边权跑最大生成树,但是看起来不是很好维护的样子。 发现我们只需要考虑当前边权为 \(1\) 或 \(2\) 的边。于是最多我们只需要考…

还在求Sora2邀请码?我已经用Sora2 API批量生成无水印视频了!(附免费去水印+Api调用教程)

还记得Sora 2刚发布时,它生成的视频带给你的那种冲击感吗? “这真的是AI生成的?”“太逼真了吧!”“我还以为是真的!” sora2这次带来的画面,已经逼真到肉眼难以分辨真假。有些视频一旦去掉水印,很多人根本看不…

[LangChian] 18. 自动维护聊天记录

上一节我们体验了“手动维护聊天记录”,每次都要:把用户发言添加到 history 把模型输出添加到 history 每轮都手动调用 getMessages() 构造上下文await history.addMessage(new HumanMessage(input)); await history…