docs: 整理项目文档并统一界面表述
将项目说明按主题集中到 docs,补齐根目录 README 和 AGENTS,移除弃用方案并保留有效测试记录与未实现提案。同步文档索引、引用及改动日志生成路径,README 增加 GitHub Markdown 导航和 Mermaid 图。 - fix(client): 统一状态与操作文案,录制和截图成功后再显示完成提示 - test(client): 按文件名核对媒体类型,避免依赖时间戳排序 验证:23 份项目文档、144 处本地引用、27 条外链、2 张 Mermaid 图;前端构建和 12 项测试;截图与录制的 4 条异步反馈路径;Windows Rust 编译检查和后端测试。后端 40 项返回成功,其中 3 项 ffmpeg 集成用例因本机缺少工具而未实际执行。
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
# 改动记录
|
||||
|
||||
记录面向使用者和维护者的主要变化。历史条目依据 Git 提交整理,日期为提交日期,尚未对应正式发布版本;详细历史见 `git log`。
|
||||
|
||||
## 未发布
|
||||
|
||||
### 文档
|
||||
|
||||
- 重组根 README,补充 ESP Rust 入门、跨平台编译与标准烧录指南。
|
||||
- 将硬件限制、开发说明与改动记录分别整理为独立文档。
|
||||
- 修正 JPEG 质量与数据大小的说明,区分历史性能记录和当前验证。
|
||||
- 补充桌面端 Windows x64 / NSIS 构建、测试与产物路径说明。
|
||||
|
||||
### 构建
|
||||
|
||||
- 固定使用命名工具链 `esp-1.97.0.0`,避免较新预览版标准库的 ESP-IDF 兼容问题。
|
||||
- 移除 S3 构建配置中的个人 macOS SDK 路径,默认 ESP-IDF v5.5.5,支持环境变量覆盖。
|
||||
- 新增从 `.env` 读取配置的 PowerShell 构建脚本。
|
||||
- 图传构建脚本使用 `--locked`,忽略 SDK 缓存和生成配置。
|
||||
- 分区表复制到生成的 CMake 工程,不再依赖 Cargo 输出层级;支持 Windows 使用较短的外部构建目录。
|
||||
|
||||
### 修复
|
||||
|
||||
- 增加运行中 Wi-Fi 断线恢复、关联和 DHCP 超时退避;取址后重建 UDP socket,清理订阅目标与旧帧,保留相机状态和帧序号。
|
||||
- 桌面端向已发现的图传板 IP 定向续订,修复 VPN / 多网卡把全局广播发往虚拟接口后“设备在线但无画面”的问题。
|
||||
- 修正丢帧统计:计入未收齐就被替换、超时及帧号缺口,重复包和等待分片不计作丢帧;拒绝迟到旧帧覆盖新帧。
|
||||
- 校验分片数量、长度与同帧元数据,处理帧号回绕及设备重启。
|
||||
|
||||
### 图传性能
|
||||
|
||||
- 根据距离收益有限、拥塞增加的实测反馈,将交付 Wi-Fi 最大发射功率上限从 17 dBm 回退到 15 dBm,实板驱动回读 15.00 dBm;启动、重连均应用同一设置,拥塞和温控逻辑不自动降功率。保留此前 14/17 dBm 的原始记录,新增功率与拥塞分析。
|
||||
- 阻塞恢复时非阻塞取最新完整 JPEG,返回被替换的旧采集缓冲;保留三块采集内存,不增加待发送 FIFO。
|
||||
- 每帧增加采集帧龄和绝对发送期限,重试预算默认缩短至 8 ms;`UDP_RETRY_BUDGET_US=0` 可在回压时立即放弃剩余分片。
|
||||
- 客户端通过本机帧时间标记拒绝 WebView 积压和慢解码的过期画面;本地 JPEG 二进制头保持 16 字节兼容。
|
||||
- 根据长程运行的峰值丢帧反馈,当前交付恢复三缓冲;双缓冲的短测数据保留为历史对照。
|
||||
- 新增可选 OV5640 `CAM_AE_LEVEL` 细调:`-1` 将亮度目标从 55 调至 45,保留 AEC/AGC 与曝光上限,供轻微过亮时调整。
|
||||
- 增加完整 OV5640 `vga30` PLL 配置与可选双缓冲;保持默认行、帧时序与彩色读出窗口,配套调整自动曝光行数上限。
|
||||
- Windows 客户端增加裁判端 `--latency-report` 校准模式,通过屏幕标记和实际视频画布测量首次可解码回显时间,保存本地 NDJSON;区分画布刷新估计与物理面板响应。
|
||||
- 固件直接读取 PSRAM 中的 JPEG,复用单个数据报缓冲,减少每帧分片复制与分配。
|
||||
- 视频 socket 使用 IP precedence 4,映射至保留 AMPDU 的 Wi-Fi 视频队列 AC_VI。
|
||||
- 对临时 UDP 发送拥塞进行有时限的让出调度重试,统计实际提交帧、失败次数与丢弃帧。
|
||||
- Windows UDP 接收缓冲请求增至 1 MiB;界面视频通道和解码队列保留最新待处理帧,避免慢端持续积压。
|
||||
- 新客户端使用随机会话 ID;固件更新同一会话的源端口,避免 NAT / TUN 端口变化产生重复推流目标,旧固定 ID 客户端继续按地址区分。
|
||||
- 新增可选编译参数 `WIFI_TX_POWER_DBM`(2–20 dBm);未设置时保留 SDK 默认上限,按实际板卡和网络测量调节。
|
||||
- 新增 `scripts/perf_probe.py`,测量完整帧率、帧损失、接收间隔和分片组装耗时。
|
||||
- 新增 `CAM_MAX_FPS`(默认 0,不限帧),可限制取帧和发送节拍,过载后不追赶补发。
|
||||
- 新增 `CAM_GRAYSCALE`,通过传感器灰度效果保留硬件 JPEG;增加可配置的芯片温度减载和 5°C 恢复回差。
|
||||
- 增加芯片内部温度、采集错误与复位原因日志,以及串口和原生客户端视频通道的长测记录脚本。
|
||||
- 新增 OV5640 曝光目标偏置与固定快门行数配置,保留自动增益;记录实际曝光行数,避免将降低亮度等同于缩短快门。
|
||||
- 新增 OV5640 水平总长试验参数 `CAM_HTS`;过短消隐会出现绿紫闪烁,几何约束通过不代表画质稳定,必须在板上验证。
|
||||
- 新增可配置 UDP 分片间隔及有界帧发送时间,支持按五分钟窗口比较突发发送与让出调度发送。
|
||||
- 新增可选 JPEG 压缩回压调节 `CAM_QUALITY_MAX`,拥塞时快速减小彩色帧,连续稳定后缓慢恢复画质;记录实际压缩档位和传感器增益。
|
||||
- 新增 `CAM_EXPOSURE_MAX_LINES`,保留自动曝光和增益联动,以曝光上限控制拖影;固定短快门不再作为室内亮度优化的默认方案。
|
||||
- 新增 OV5640 自动增益上限 `CAM_GAIN_CEILING`,为室内短曝光提供增益余量,保留运行时增益读数供验证。
|
||||
|
||||
### 硬件配置
|
||||
|
||||
- 显式设置 `CONFIG_CAMERA_CORE1=y`;仅关闭 `CAMERA_CORE0` 时,Kconfig 的 choice 仍会默认选择 CPU0。
|
||||
- 按当前 Wi-Fi 配置的镜像核对 Factory 偏移与原测试模组 `0xFADE7` 坏字节的可写性;后续重编译仍需重新检查,以 `partitions.csv` 为准。
|
||||
|
||||
## 2026-10-15
|
||||
|
||||
### 持续集成
|
||||
|
||||
- 新增 Windows、Linux、macOS 客户端构建工作流。
|
||||
- 调整制品上传版本及缓存行为,适配 Gitea runner。
|
||||
- 修复 Windows runner 的 shell、临时目录和低完整性环境适配。
|
||||
- 使用 npm 安装的 JS 版 pnpm,处理安装目录残留与 `EEXIST`。
|
||||
|
||||
对应提交:`98dc87e` 至 `4794bed`。
|
||||
|
||||
## 2026-10-14
|
||||
|
||||
### 新增
|
||||
|
||||
- 引入 Tauri v2 + React 队伍端和裁判端,网络逻辑拆分到 `desktop/core`。
|
||||
- 加入 ESP32-C3 一主三从装甲板:四路受击检测、灯带及血量广播。
|
||||
- 保存早期 C 版装甲板工程到 `reference/armor/`。
|
||||
- 桌面端加入双方血条、归零胜负提示与裁判端队名编辑。
|
||||
|
||||
### 调整与修复
|
||||
|
||||
- 移除旧 Slint 客户端。
|
||||
- 修复演示模式命中节奏与设置文字显示,移除受击画面抖动。
|
||||
|
||||
对应提交:`a89d7ae`、`4f7a142`、`7fdebe3`、`a30eb32`、`fd71b83`、`a93ae06`。
|
||||
|
||||
## 2026-10-05
|
||||
|
||||
### 新增
|
||||
|
||||
- 建立摄像头固件、共享 UDP 协议与初代桌面客户端。
|
||||
- 支持多端发现、订阅、设备绑定及队伍端 / 裁判端视图。
|
||||
- 加入滚轮缩放、拖动平移与启动最大化。
|
||||
|
||||
### 修复
|
||||
|
||||
- 修复探测脚本重组状态未按帧隔离导致的坏帧误报,以及 FPS 窗口计算错误。
|
||||
- 修复裁判端两格宽度不一致,槽位按队伍语义分配。
|
||||
- 队伍端 release 接收路径限制到已绑定图传板。
|
||||
|
||||
早期对重复分片的协议归因已被后续提交更正,不能将当时的坏帧直接归为协议缺陷。对应提交:`4f893ce`、`1c65eaa`、`7be8d7d`、`c7f42a1`、`a16ad85`、`cd8344c`、`3631a03`。
|
||||
@@ -0,0 +1,44 @@
|
||||
{
|
||||
"version": "0.2.2",
|
||||
"major": 0,
|
||||
"minor": 2,
|
||||
"patch": 2,
|
||||
"build": 38,
|
||||
"protocol": 1,
|
||||
"date": "2026-10-19",
|
||||
"baseline": "v0.2.1",
|
||||
"commits": 3,
|
||||
"groups": {
|
||||
"fix": [
|
||||
{
|
||||
"scope": "client",
|
||||
"text": "统一状态与操作文案,录制和截图成功后再显示完成提示",
|
||||
"breaking": false
|
||||
}
|
||||
],
|
||||
"docs": [
|
||||
{
|
||||
"scope": null,
|
||||
"text": "整理项目文档并统一界面表述",
|
||||
"breaking": false
|
||||
},
|
||||
{
|
||||
"scope": null,
|
||||
"text": "README 不写死构建号,改由 version.json 提供",
|
||||
"breaking": false
|
||||
},
|
||||
{
|
||||
"scope": null,
|
||||
"text": "按 humanizer 重写项目文档并同步 RMIC::2026 现状",
|
||||
"breaking": false
|
||||
}
|
||||
],
|
||||
"test": [
|
||||
{
|
||||
"scope": "client",
|
||||
"text": "按文件名核对媒体类型,避免依赖时间戳排序",
|
||||
"breaking": false
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,116 @@
|
||||
# 改动记录
|
||||
|
||||
> 由 [`scripts/version.mjs`](../../scripts/version.mjs) 从 Git 历史生成,请勿手改。
|
||||
> 提交采用 Conventional Commits,规则见[版本维护](../development/versioning.md)。
|
||||
> 自动版本机制建立前的说明见[早期人工记录](changelog-legacy.md)。
|
||||
|
||||
## v0.2.2 — 2026-10-19
|
||||
|
||||
构建号 **38** · 线路协议 **1** · 3 个提交(v0.2.1 → v0.2.2)
|
||||
|
||||
### 修复
|
||||
|
||||
- **client** · 统一状态与操作文案,录制和截图成功后再显示完成提示
|
||||
|
||||
### 文档
|
||||
|
||||
- 整理项目文档并统一界面表述
|
||||
- README 不写死构建号,改由 version.json 提供
|
||||
- 按 humanizer 重写项目文档并同步 RMIC::2026 现状
|
||||
|
||||
### 测试
|
||||
|
||||
- **client** · 按文件名核对媒体类型,避免依赖时间戳排序
|
||||
|
||||
## v0.2.1 — 2026-10-19
|
||||
|
||||
1 个提交
|
||||
|
||||
### 修复
|
||||
|
||||
- **ci** · 版本校验在浅克隆下必然误报
|
||||
- **ci** · checkout 改成 fetch-depth: 0——没有标签、提交数恒为 1 时,
|
||||
- **version** · CHANGELOG 按标签区间重算全部历史,不再只渲染当前版本,
|
||||
- **build** · 固件包文件名用算出来的版本,不再用 BUILD-INFO.json 里那套旧编号
|
||||
|
||||
## v0.2.0 — 2026-10-19
|
||||
|
||||
1 个提交
|
||||
|
||||
### 新增
|
||||
|
||||
- **client** · RMIC::2026 界面重做、可计算的版本机制与固件版本联动
|
||||
- **client** · 界面换成墨黑蓝底 + 单支红的矩形语言,切角全部去掉,仅装甲条保留平行四边形
|
||||
- **client** · 自托管 HarmonyOS Sans SC 与 JetBrains Mono,中文与拉丁数字逐字回退
|
||||
- **client** · 新增启动序列、首启门、用户端 HUD、裁判端控制台、设置抽屉与固件维护页
|
||||
- **client** · 裁判端中缝与下方控制台可拖,鼠标落在哪一路下方就看哪一路
|
||||
- **client** · 设置抽屉常驻实时预览,与画面共用同一份准星绘制代码
|
||||
- **client** · 动效改用 Material 3 的缓动曲线与时长,逐条替换掉自造的贝塞尔
|
||||
- **version** · 版本号与 CHANGELOG 由 scripts/version.mjs 从 git 历史算出,不再手写
|
||||
- **firmware** · Hello 报文携带语义化版本、构建号与自报协议号,负载向后兼容
|
||||
- **client** · 固件版本显示在绑定列表与裁判端每一格;协议不匹配时给出具体原因
|
||||
- **firmware** · 固件包版本与客户端同源,都从 version.json 读
|
||||
|
||||
### 修复
|
||||
|
||||
- **client** · getCurrentWindow() 在没有 Tauri 注入时同步抛异常,浏览器预览整棵树被卸载
|
||||
- **client** · 启动序列的淡出 effect 清掉了自己刚设的 setTimeout,界面永远停在启动页
|
||||
- **client** · 设置抽屉左侧导航的锚点没挂到 section 上,且用错了坐标系
|
||||
- **protocol** · Hello 改用宽松帧头解析,让协议不匹配的板子能被解释而不是静默消失
|
||||
- **build** · Windows 上 bindgen 加载不了 libclang 的同目录依赖,构建脚本补上搜索路径
|
||||
- **build** · esp-idf-sys 在长路径下拒绝构建,固件构建改用短的目标目录
|
||||
|
||||
### 构建
|
||||
|
||||
- **client** · 队标图标,含光学尺寸分级与手工拼的多尺寸 ICO
|
||||
- **ci** · 守门 job 增加版本一致性检查,产物名改为 rmic-2026-*
|
||||
|
||||
### 文档
|
||||
|
||||
- 补充界面语言、版本机制与协议通告布局的说明
|
||||
|
||||
## v0.1.0 — 2026-10-19
|
||||
|
||||
33 个提交
|
||||
|
||||
### 新增
|
||||
|
||||
- 链路控制、延迟校准与长测工具,补全文档
|
||||
|
||||
### CI
|
||||
|
||||
- npm 装 pnpm 前先清掉残留影子文件(EEXIST),并去掉 npm 不认的 store-dir
|
||||
- Windows 改用 npm 装的 JS 版 pnpm(standalone 二进制在低完整性沙箱里必崩)
|
||||
- Windows 的 pnpm install 加 corepack 退路(standalone 在低完整性沙箱里栈溢出)
|
||||
- Windows 的 pnpm 安装目录改成每次运行都干净的路径
|
||||
- 删掉两段临时诊断(Windows 的坑已经查清并写进文件头第 5 条)
|
||||
- Windows 的 pnpm 那步写死 shell: pwsh(免得 actionlint 拿 bash 规则挑反斜杠路径)
|
||||
- Windows job 给 pnpm install 明确指定 store 与导入方式
|
||||
- Windows job 加 USERPROFILE 重定向 —— pnpm 的操作锁按它算路径
|
||||
- **diag** · 再探一次 —— pnpm 眼里的目录到底是哪个
|
||||
- Windows job 再加 LOCALAPPDATA/APPDATA 重定向(pnpm 的 store 锁挂在这里)
|
||||
- Windows job 低完整性适配 —— 把 CI 的"家目录"挪到 runner 自己的工作目录
|
||||
- **diag** · 在 Windows job 里加一段临时诊断(查完删)
|
||||
- 修 Windows job 第二个坑 —— TEMP/TMP 为空,Git Bash 的 mktemp 写不进 <Git>\tmp
|
||||
- 修 Windows job 0 秒失败 —— 宿主 runner 上的 bash 是 WSL,不是 Git Bash
|
||||
- Windows 产物默认就编(平台开关从 vars 换成 inputs)
|
||||
- 修两处 Gitea 上跑不了的东西(upload-artifact v4 → v3、去掉缓存)
|
||||
- 构建客户端 workflow(Windows / Linux / macOS)
|
||||
|
||||
### 其它
|
||||
|
||||
- 双方血条(角上平行四边形)、归零即击败、去掉受击抖动、裁判端可改队名
|
||||
- 早先那版 C 写的装甲板固件(ESP-IDF 工程)
|
||||
- ESP32-C3 装甲板固件(一主三从)+ 烧录脚本,之前一直没提交
|
||||
- 修两处小问题(预览模式的命中节奏、设置面板里漏出来的 **)
|
||||
- 用户端与裁判端两套页面(Tauri v2 + React),删掉 Slint 客户端
|
||||
- Tauri v2 后端 + 共享网络层(用户端/裁判端双身份)
|
||||
- 文档:写防作弊、缩放布局、槽位语义
|
||||
- 槽位对应队伍,不再按 id 顺序对号入座
|
||||
- 修裁判端两格不等宽,加滚轮缩放与拖动平移,启动即最大化
|
||||
- 队伍端 release 只接收绑定的那一块板子
|
||||
- 文档:按 UDP 多端架构重写根 README 与 client README
|
||||
- 修 udp_probe.py 的重组与 fps 两处测量错误
|
||||
- 更正上一个提交的归因——坏帧不在这里
|
||||
- 修复重复分片能凑出一张坏帧
|
||||
- ESP32-S3 摄像头图传:固件 + Slint 客户端 + 共享协议
|
||||
Reference in New Issue
Block a user