Files
Docs/task_complete.md
2026-01-06 17:29:46 +08:00

642 lines
26 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# NaviGlass项目开发任务清单
**项目**NaviGlass项目开发
**平台**:全志 V821 (32-bit RISC-V)
**更新时间**2026-01-06
**整体进度**100%(室内导盲系统优化交付)
## 📖 快速导航
| 章节 | 说明 |
|------|------|
| [已完成任务](#-已完成任务) | Day 1-28 完成的功能 |
| [后续规划](#-后续规划与遗留问题) | 待办 / 债务 / 未来展望 |
| [进度统计](#-进度统计) | 各模块完成度 |
| [里程碑](#-里程碑) | 关键节点回顾 |
| [时间线](#-时间线) | 开发流水账 |
**相关文档**
- [实现计划详情](file:///d:/CodingProjects/Antigravity/NaviGlass/Docs/implementation_plan_complete.md)
- [Day 日志](file:///d:/CodingProjects/Antigravity/NaviGlass/Docs/DevLogs/) (Day1-Day28)
---
## ✅ 已完成任务
### 基础环境配置
- [x] SDK 下载与编译
- [x] 工具链配置
- [x] 固件烧录测试
- [x] SSH 服务配置
### 网络通信层
- [x] libuwsc WebSocket 库编译
- [x] libcurl HTTP 库编译
- [x] UDP Socket 基础功能
- [x] 静态编译链接优化
### 音频系统
- [x] I2S 音频输出 (MAX98357A)
- [x] Device Tree 引脚配置 (PD12/PD13/PD15)
- [x] ALSA 播放测试
- [x] 音质验证
- [x] 模拟麦克风输入 (Audio Codec)
- [x] MIC Switch 配置
- [x] 增益调优 (MIC Gain = 25)
- [x] 录音功能测试
- [x] 音质验证
- [x] **音频错误处理与稳定性** (Day 10)
- [x] 修复 I/O 错误导致的崩溃问题
- [x] 实现设备自动重新初始化机制
- [x] 修复类型安全问题size_t → snd_pcm_sframes_t
- [x] 程序稳定性验证36+ 秒无崩溃)
### IMU 传感器
- [x] ICM-42688-P 硬件连接
- [x] I2C 方案调研(失败,改用 SPI
- [x] GPIO 模拟 SPI 实现
- [x] SPI 时序编码
- [x] 寄存器读写功能
- [x] WHO_AM_I 识别 (0x47)
- [x] 6 轴数据采集
- [x] 加速度计配置 (±16g)
- [x] 陀螺仪配置 (±2000°/s)
- [x] 温度监控
- [x] 数据验证测试
### 摄像头系统
- [x] GC2083 MIPI 配置
- [x] Device Tree 验证(已有配置)
- [x] ISP 参数加载 (gc2083_mipi)
- [x] 视频格式设置 (1280x720 @20fps)
- [x] MPP 框架集成
- [x] VI (视频输入) 模块
- [x] ISP (图像信号处理) 模块
- [x] VENC (视频编码) 模块
- [x] JPEG 硬件编码
- [x] Camera 类封装
- [x] 帧采集与测试
- [x] 帧缓冲管理 (5个VI, 4MB VBV)
- [x] JPEG 压缩 (质量80)
- [x] 测试程序验证 (100%成功率)
### 开发工具
- [x] 交叉编译脚本
- [x] 麦克风测试脚本 (test_mic.sh)
- [x] IMU 测试程序 (test_imu)
- [x] GPIO 测试程序 (test_gpio)
### 交叉编译配置 (Day 7)
- [x] 工具链路径验证
- [x] 确认实际工具链位置 (out/toolchain/nds32le-linux-glibc-v5d)
- [x] 编译器前缀统一为 riscv32-unknown-linux-
- [x] Makefile 配置更新
- [x] src/Makefile - 主程序编译
- [x] src/Makefile_test - 测试版本
- [x] 所有构建脚本 (build_*.sh)
- [x] 文档更新
- [x] Day7.md 工作日志
- [x] README.md 工具链说明
### 整体编译与集成 (Day 8)
- [x] 构建脚本修复
- [x] build_main.sh 路径问题修复
- [x] Makefile 链接库补充
- [x] 添加完整 Cedar 库列表
- [x] 解决 CDC_LOG_LEVEL_NAME 未定义错误
- [x] 主程序编译成功
- [x] avaota_client (3.9MB)
- [x] 集成所有模块(音频/IMU/摄像头/网络)
### musl 工具链修复 (Day 9)
- [x] 识别 glibc/musl 不兼容问题
- [x] 通过 ldd 诊断动态链接器错误
- [x] 确认开发板运行 musl libc 1.2.4
- [x] 发现符号不兼容 (`__register_atfork`)
- [x] 定位正确的 musl 工具链
- [x] 查找 SDK 工具链目录
- [x] 发现 musl 在 `prebuilt/rootfsbuilt/riscv/`
- [x] 更正 Makefile 路径配置
- [x] 重新编译程序
- [x] 使用 musl 工具链重新编译
- [x] 验证动态链接器为 `/lib32/ld.so.1`
- [x] 程序成功运行并通过测试
### 板端部署与测试 (Day 9)
- [x] WiFi 网络配置
- [x] 连接到局域网 (192.168.110.132)
- [x] 验证网络连通性
- [x] 程序部署
- [x] musl 版本上传到 /tmp/avaota_client
- [x] 创建动态链接器符号链接
- [x] 硬件功能测试
- [x] IMU 传感器测试通过 (WHO_AM_I=0x47)
- [x] 音频采集测试通过 (16kHz mono)
- [x] 摄像头测试通过 (1280x720@20fps)
- [x] ISP 系统正常运行
- [x] JPEG 编码器正常工作
- [x] 程序稳定性测试
- [x] 多线程正常运行
- [x] 心跳日志稳定
- [x] 优雅退出验证 (Ctrl+C)
### 网络通信测试 (Day 10-17)
- [x] WebSocket 连接测试
- [x] 服务器已部署 (192.168.110.188:8081)
- [x] 音频 WebSocket 连接成功
- [x] 摄像头 WebSocket 连接成功
- [x] 摄像头初期传输 JPEG 帧成功
- [x] 音频播放功能TTS 播放流畅,断连恢复机制已验证)
- [x] 摄像头 VBV 缓冲区优化256KB → 2MB
- [x] UDP 数据传输测试
- [x] UDP 发送验证
- [x] IMU 数据实时上传成功,服务器正常接收
- [x] **Day 17: frpc.toml 添加 UDP 12345 代理,公网传输正常**
### 网络模块优化 (Day 11)
- [x] **WebSocket 崩溃修复**
- [x] 识别崩溃原因disconnect() 处理不当)
- [x] 添加 shutdown() 中断阻塞的 recv()
- [x] 修复线程 join() 逻辑
- [x] 验证 403 错误时不再崩溃
- [x] **音频播放功能实现**
- [x] 扩展 WSClient 支持二进制数据接收
- [x] 添加 poll_binary_messages() 方法
- [x] 实现二进制数据队列m_binary_queue
- [x] 集成 AudioPlayer 使用 hw:1,0 设备
- [x] 实现 TTS 音频接收和播放逻辑
### TTS 播放优化与事件循环阻塞修复 (Day 13)
- [x] **Omni 客户端异步化(核心修复)**
- [x] 识别同步迭代器阻塞 asyncio 事件循环
- [x] 使用 `threading.Thread` + `asyncio.Queue` 解耦
- [x] TTS 块间隔从 5-15 秒降至 ~2 秒
- [x] **客户端 TTS 预缓冲机制**
- [x] 实现 16000 帧1秒预缓冲
- [x] 添加最小播放阈值8000 帧)
- [x] 优化播放批次大小100ms
- [x] **服务器退出修复**
- [x] lifespan 捕获 CancelledError
- [x] 添加强制退出线程
- [x] Ctrl+C 后正常返回 shell
- [x] **TTS 音频传输优化**
- [x] 8kHz → 16kHz 上采样
- [x] WebSocket 断开时 TTS 缓存机制
- [x] WebSocket 引用保护
- [x] **TTS 播放流畅度** ✅(服务器端修复后已流畅)
### 项目清理与 TTS 流畅 (Day 14)
- [x] **项目清理**
- [x] 删除 HTTP TTS 相关文件 (http_tts_stream.*, http_client.*)
- [x] 删除测试脚本 (build_test*.sh, debug_*.sh)
- [x] 删除测试源码 (test_*.cpp, main_test.cpp)
- [x] 删除冗余文件 (Makefile_test, build_phase*.sh)
- [x] 清理后仅保留核心文件
- [x] **恢复 WebSocket TTS**
- [x] 移除 HTTP TTS 线程
- [x] 恢复 audio_capture_thread 中的 TTS 播放
- [x] 更新 Makefile 移除 HTTP 文件
- [x] **服务器端导航器预初始化**
- [x] 识别导航器延迟初始化问题(客户端连接后才加载)
- [x] 在服务器启动时预初始化 BlindPathNavigator/CrossStreetNavigator/NavigationMaster
- [x] 客户端连接无延迟
- [x] **增大 TTS 预缓冲**
- [x] PRE_BUFFER_FRAMES: 8000 → 32000 (0.5s → 2s)
- [x] MIN_PLAY_FRAMES: 3200 → 4800
- [x] **服务器端 TTS 阻塞修复**
- [x] 识别 HTTP 20ms 节拍循环阻塞 WebSocket 发送
- [x] 将 HTTP 广播改为后台任务 `asyncio.create_task()`
- [x] TTS 播放已流畅!
### 导航性能优化与调试 (Day 15)
- [x] **修复导航模式严重卡顿**
- [x] 识别根因:主线程 await 等待 CPU 密集型任务Process Frame
- [x] 实现非阻塞跳帧机制(后台线程处理 + 最新帧优先)
- [x] 验证 FPS 恢复(导航模式 0.9 FPS -> 10.0 FPS
- [x] **YOLO 检测频率优化**
- [x] 盲道检测间隔设为 5 帧
- [x] **修复模型重复加载 BUG**
- [x] 解决 `app_main` 模块重载问题
- [x] **用户体验优化**
- [x] 调整导航语音冷却时间 (1.0s -> 3.0s)
- [x] 添加详细性能诊断日志
### 固件重刷与自启动配置 (Day 16)
- [x] **修复动态链接器路径问题**
- [x] Makefile 添加 `-Wl,--dynamic-linker=/lib/ld-musl-riscv32.so.1`
- [x] 无需手动创建 `/lib32/ld.so.1` 符号链接
- [x] **配置程序自启动**
- [x] 使用 `/etc/init.d/avaota` + `load_script.conf` 方案
- [x] 发现 `rc.final` 会导致 SD 卡检测失败(已规避)
- [x] 发现 `crontab @reboot` 不支持BusyBox crond
- [x] 需要 15 秒延迟等待音频系统就绪
- [x] 实现 start/stop 命令支持
- [x] **确认 WiFi 自动连接**
- [x] 系统自动保存配置到 `/etc/wifi/wifimg.config`
- [x] **配置公网服务器访问**
- [x] 修改 `main.cpp` 服务器地址为公网 IP `8.148.25.142`
- [x] 配置 frp 内网穿透frpc.toml
- [x] 测试 iPhone 热点连接成功
### 室外测试与语音系统优化 (Day 17)
- [x] **室外实地测试**
- [x] 开发板通过 iPhone 热点连接公网服务器
- [x] 摄像头视频流传输正常
- [x] 过马路导航语音播报正常
- [x] 发现盲道导航无语音播报问题
- [x] **IMU 公网传输修复**
- [x] 识别 frpc.toml 缺少 UDP 12345 配置
- [x] 添加 UDP 代理配置
- [x] 公网服务器防火墙开放 UDP 12345
- [x] **盲道导航语音修复**
- [x] 识别根因:线程池中无法运行 asyncio 协程
- [x] 移除 `workflow_blindpath.py` 内部 `play_voice_text` 调用
- [x] 统一由 `app_main.py` 处理语音播放
- [x] **IMU 采样率优化**
- [x] 从 50Hz 降低到 10Hz 减少对音频的干扰
- [x] **扬声器杂音分析**
- [x] 确认为硬件层面问题(电磁干扰、接地不良)
- [x] 需硬件层面改进(加磁环、重新布线)
### 性能优化与紧急修复 (Day 18)
- [x] **服务器性能深度优化**
- [x] **YOLO 推理加速**: 启用 FP16 半精度 + 动态分辨率 (RTX 3090 优化)
- [x] **模型层融合**: 添加 fuse() 操作与 CUDA 预热
- [x] **线程池扩张**: max_workers 2 -> 3
- [x] **音频延迟与协议优化**
- [x] **协议统一**: 客户端/服务器统一使用 20ms (320 samples) 音频包
- [x] **延迟降低**: TTS 预缓冲从 2s 降至 0.5s
- [x] **网络/传输瓶颈修复**
- [x] **WebSocket 并行广播**: 引入 `asyncio.gather` 解决多客户端卡顿
- [x] **户外网络适配**: 相机增加 "Outdoor Mode" (8fps/Q45)
- [x] **紧急 Bug 修复**
- [x] 修复 `NameError` (MODEL/imports) 导致的服务崩溃
- [x] 修复 `.env` 未加载导致的 GPU 禁用(解决画面假死)
### 传输优化与 TurboJPEG 加速 (Day 19)
- [x] **零拷贝直传**
- [x] CHAT/IDLE/ITEM_SEARCH 模式直接转发原始 JPEG
- [x] 跳过无意义的 imdecode + imencode 循环
- [x] **延迟解码**
- [x] 只在导航模式才执行 cv2.imdecode
- [x] 非导航场景 CPU 开销降低 90%+
- [x] **TurboJPEG 集成**
- [x] 替换 cv2.imencode/imdecode速度提升 2-3 倍
- [x] 带回退逻辑,未安装时自动使用 cv2
- [x] **导航结果 JPEG 缓存**
- [x] 新结果编码一次后复用,编码次数 8→2 次/秒
- [x] **GPU 配置修正**
- [x] .env 配置使用 GPU 1 (CUDA_VISIBLE_DEVICES=1)
### 性能瓶颈深度分析与 UI 优化 (Day 20)
- [x] **服务器性能优化**
- [x] **日志精简**: `_detect_obstacles` 输出从 20 行/次减到 1 行/30帧
- [x] **GPU 并发槽位**: 从 2 增加到 4
- [x] **TTS WebSocket 修复**: 连接时立即保存引用
- [x] **可视化网页优化**
- [x] **IMU 浮窗缩小**: 宽度 600px添加可折叠功能
- [x] **折叠状态优化**: 完全隐藏 3D 模型和数据面板
- [x] **Badge 动画**: 连接中闪烁、已连接脉冲呼吸
- [x] **状态中文化**: `📷 已连接` 替代英文
- [x] **底部边界修复**: 移除 `.chat { height: 100vh }`
- [x] **背景色统一**: 左右两栏使用相同的 `var(--card)`
- [x] **Favicon 添加**: `/static/favicon.png`
- [x] **移动端适配**: @media 600px/1100px 响应式布局
- [x] **Numba 多核加速**
- [x] 创建 `numba_utils.py` JIT 编译工具函数
- [x] mask 像素计数、统计、交集计算加速
- [x] 启动时 JIT 预热,避免首次调用延迟
- [x] **TensorRT 模型加速**
- [x] 导出 `yolo-seg.engine``yoloe-11l-seg.engine``trafficlight.engine` (FP16)
- [x] 创建 `model_utils.py` 自动选择 .engine 文件
- [x] 修复 `.to()` / `.fuse()` 不兼容 TensorRT 问题
- [x] 修复推理尺寸不匹配 (640→480)
- [x] 统一使用环境变量 `AIGLASS_YOLO_IMGSZ=480`
### AI 管道修复与音频优化 (Day 21-22)
- [x] **GLM API 修复**
- [x] 升级至 `zai-sdk` + `glm-4.6v-flash`
- [x] 修复 Error 400/1210 调用问题
- [x] **语音识别修复**
- [x] SenseVoice 语言固定为 `zh` (解决韩语误识)
- [x] **VAD 截断修复**: 引入 300ms 环形缓冲,解决首字丢失
- [x] **音频系统优化**
- [x] **TTS 语速排查**: 确认源文件语速,用户决定保留
- [x] **底噪优化**:
- [x] 软件规避 (80%音量)
- [x] **彻底解决**: 移除串口/USB供电改用电池消除共地干扰
- [x] **AI 回答质量**:
- [x] 升级模型至 `glm-4.6v-flash` (预期解决相关性问题)
### 移动端适配与部署优化 (Day 23)
- [x] **移动端可视化界面修复**
- [x] `.stage` 容器添加 `min-height: 50vh`
- [x] `fitCanvas()` 使用容器实际高度
- [x] IMU 浮窗移到右下角,默认折叠
- [x] **PM2 服务器部署**
- [x] 一行命令启动配置
- [x] VAD 模型本地缓存优先(启动 30s→3s
- [x] **红绿灯检测卡顿修复**
- [x] 实现非阻塞跳帧机制
- [x] 独立缓存(不干扰盲道导航)
- [x] 停止时清除缓存
- [x] **Nginx 域名配置**
- [x] naviglass.hbyrkj.top 反向代理
- [x] WebSocket 支持
### YOLOE 室内导盲模型训练 (Day 24)
- [x] **训练指南完善**
- [x] 更新 PyTorch 版本 (cu124)
- [x] 简化 conda 环境名
- [x] 统一目录结构 (val → valid)
- [x] **Indoor Obstacle Detection 数据集**
- [x] 选择 v11 版本 (1440+57+54 张图片)
- [x] 8 个类别closed_door, door, elevator, escalator, footpath, obstacle, person, wall
- [x] YOLOv11 原生格式,无需转换
- [x] **服务器训练启动**
- [x] 配置 GPU 1 (RTX 3090)
- [x] RAM 缓存加速 (192GB)
- [x] 150 epochs 训练进行中
### 室内导盲分割模型完成 (Day 25)
- [x] **训练问题修复**
- [x] 发现 YOLOE 不支持自定义类别训练
- [x] 改用标准 `yolo11l-seg.pt` 模型
- [x] **MIT Indoor 数据集筛选**
- [x] 从 2573 类别筛选出 14 个导盲相关类别
- [x] 创建 `filter_categories.py` 脚本
- [x] 生成 `indoor_blind` 数据集 (1265+363+175 张)
- [x] **训练完成**
- [x] 模型参数27.6M
- [x] 推理速度4.8ms/张 (训练) / 23ms/张 (验证)
- [x] **模型验证**
- [x] 测试集 175 张图片全部通过
- [x] 14 类别全部可检测
- [x] 无检测率仅 2.3%
### 室内导盲服务器集成 (Day 26)
- [x] **状态机扩展**
- [x] `NavigationMaster` 支持 `INDOOR_NAV` 状态
- [x] 实现 `start_indoor_navigation` 切换逻辑
- [x] **模型集成**
- [x] `load_indoor_model` 支持 TensorRT 引擎加载
- [x] `app_main.py` 集成室内导航器初始化
- [x] **交互支持**
- [x] 支持 "室内导航" / "室内导盲" 语音唤醒
- [x] ASR 白名单更新
- [x] **流程打通**
- [x] 预热与推理流程验证通过
- [x] **Bug 修复与优化**
- [x] **命令冲突修复**: 修复 "停止室内导航" 误触发启动的问题
- [x] **检测互斥**: 室内模式下禁用室外斑马线检测
- [x] **日志净化**: 屏蔽启动时冗余警告 (TRT/YOLO/Audio)
- [x] **EdgeTTS 磁盘缓存**: 持久化 TTS 合成结果
- [x] **可配置日志间隔**: `AIGLASS_LOG_INTERVAL` 环境变量
- [x] **项目文件清理**: 释放 ~1.75GB
- [x] **室内导航工作流**
- [x] 创建专用 `workflow_indoor.py` (IndoorNavigator)
- [x] 14 类别映射: floor/corridor/sidewalk + 障碍物类别
- [x] 可行走区域检测与方向引导
- [x] 障碍物避障与兴趣点提示
### 室内导盲模型优化 (Day 27)
- [x] **训练错误修复**
- [x] 修复 `Loss NaN/Inf` (关闭 AMP 混合精度)
- [x] 创建 `check_dataset_health.py` 数据完整性验证脚本
- [x] **代码集成完善**
- [x] **20类数据适配**: 更新 `workflow_indoor.py` 类别映射
- [x] **模型路径更新**: `app_main.py` 默认加载 `yolo11l-seg-indoor.engine`
- [x] **代码清理**: 移除所有 `indoor14` 旧引用
- [x] **数据集终极优化 (22类)**
- [x] **餐具扩展**: 合并 Spoon/Fork/Chopstick 数据集,强化 `tableware` (ID 21)
- [x] **跨平台路径修复**: 解决 Windows 生成 `data.yaml` 在 Linux 报错问题
- [x] **文档同步**: 更新《训练指南》至 V2 (22类 + 路径注意)
### 室内导航优化与 Bug 修复 (Day 28)
- [x] **模型精准化**
- [x] 切换至 `yolo11l-seg-indoor14.engine` (14类)
- [x] 更新 `workflow_indoor.py` 类别映射
- [x] 地面检测率提升,解决无路误报
- [x] **语音播报修复**
- [x] **强制首播**: 解决初始无路提示被节流的问题
- [x] **即时反馈**: 启动命令后立即播报“正在寻找可行走区域”
- [x] **音频 Pop 消除**: 增加静音填充至 200ms
- [x] **崩溃修复**: 移除 undefined class 引用
- [x] **终端 WiFi 诊断**
- [x] 确认断连不可恢复为 OS 层面问题
- [x] 建议部署 `wifi_check.sh` 守护脚本
---
## 🛤️ 后续规划与遗留问题
### 🔴 优先待办 (Priority)
- [ ] **稳定性验证**: 长时间运行测试5分钟基础 / 1小时稳定性 / 内存泄漏检查)
- [ ] **异常恢复**: 模拟断网重连、设备异常恢复等边界条件
- [ ] **WiFi 保活**: 部署终端脚本 `wifi_check.sh` 解决断网不重连问题
### 🟠 技术债务 (Debt)
1. **音频底噪**: 需探索软件降噪 (AEC/ANS) 以消除回环底噪
2. **硬件屏蔽**: 扬声器电流声需硬件改进(磁环/布线)
3. **代码规范**: 补充单元测试,统一注释风格
### 🔵 长期探索 (Future)
- [ ] **硬件升级**: 尝试硬件 SPI 替代 GPIO 模拟(提升 IMU 采样率)
- [ ] **I2C 攻坚**: 重新探索 ICM-42688 的 I2C 通信模式
- [ ] **能效优化**: 内存占用优化与 CPU 负载平衡
## 📊 进度统计
### 总体进度
```
████████████████████ 100%
```
**🎉 核心功能完成!项目代码已清理!**
### 各模块进度
| 模块 | 进度 | 状态 |
|------|------|------|
| SDK 环境 | 100% | ✅ 完成 |
| 网络库 | 100% | ✅ 完成 |
| 音频输出 | 100% | ✅ 完成 |
| 音频输入 | 100% | ✅ 完成 |
| 音频稳定性 | 100% | ✅ 完成 (Day 10) |
| IMU 传感器 | 100% | ✅ 完成 |
| 摄像头 | 100% | ✅ 完成 |
| 工具链配置 | 100% | ✅ 完成 |
| musl 工具链 | 100% | ✅ 完成 |
| 整体编译 | 100% | ✅ 完成 |
| 网络通信 | 100% | ✅ 完成 |
| 板端测试 | 100% | ✅ 所有硬件通过 |
| TTS 播放 | 100% | ✅ 流畅播放 (Day 14) |
| 项目清理 | 100% | ✅ Day 14 完成 |
| 导航模式 | 100% | ✅ Day 15 修复 |
| 服务器优化 | 100% | ✅ Day 18-19 完成 |
| AI 交互管道 | 100% | ✅ Day 21-22 修复 (GLM-4V/SenseVoice) |
| 室内导盲模型 | 100% | ✅ Day 28 优化交付 (14类模型) |
---
## 🎯 里程碑
### Milestone 1: 基础设施 ✅
**完成时间**: Day 1-2
**成果**: SDK 编译成功、网络库就绪、工具链配置完成
### Milestone 2: 音频系统 ✅
**完成时间**: Day 3-4
**成果**: 扬声器播放正常、麦克风录音清晰、参数优化完成
### Milestone 3: IMU 传感器 ✅
**完成时间**: Day 4
**成果**: SPI 驱动实现、6轴数据采集、测试验证通过
### Milestone 4: 摄像头系统 ✅
**完成时间**: Day 5
**成果**: MPP框架集成、JPEG 编码正常、100%捕获成功率
### Milestone 5: 工具链配置与整体编译 ✅
**完成时间**: Day 7-8
**成果**: 工具链配置验证、Makefile 统一更新、主程序编译成功 (3.9MB)
### Milestone 6: musl 工具链修复 ✅
**完成时间**: Day 9 (上午)
**成果**: 识别并解决 glibc/musl 不兼容问题、定位正确的 musl 工具链路径
### Milestone 7: 板端测试验证 ✅
**完成时间**: Day 9 (下午)
**成果**: WiFi 配置成功、所有硬件模块测试通过、程序稳定性验证
### Milestone 8: 音频稳定性修复 + 网络通信验证 ✅
**完成时间**: Day 10
**成果**: 修复音频崩溃问题、WebSocket 连接成功、IMU UDP 传输正常
### Milestone 9: 网络模块稳定性优化 ✅
**完成时间**: Day 11
**成果**: 修复 WebSocket 崩溃、实现音频双向通信、VBV 缓冲区优化
### Milestone 10: 摄像头稳定性优化 ✅
**完成时间**: Day 11-12
**成果**: VBV 缓冲区 256KB→2MB、VI 缓冲区 3→5、错误恢复机制
### Milestone 11: 音频交互修复与系统加固 ✅
**完成时间**: Day 12
**成果**: 修复链接器符号冲突、解决音频采集无数据问题、恢复全系统功能
### Milestone 12: TTS 播放优化与事件循环阻塞修复 ✅
**完成时间**: Day 13
**成果**: Omni 客户端异步化、TTS 块间隔从 5-15s 降至 ~2s、服务器退出修复
### Milestone 13: 项目清理与 TTS 流畅 ✅
**完成时间**: Day 14
**成果**: 删除 19 个冗余文件、服务器端 TTS 阻塞修复、TTS 播放已流畅
### Milestone 14: 导航模式卡顿修复 ✅
**完成时间**: Day 15
**成果**: 高性能跳帧机制、FPS 从 0.5 恢复至 10.0、语音导航频率优化
### Milestone 15: 固件重刷与自启动配置 ✅
**完成时间**: Day 16
**成果**: 动态链接器路径修复、自启动方案确定、WiFi 自动连接验证
### Milestone 16: 室外测试与语音系统优化 ✅
**完成时间**: Day 17
**成果**: 室外测试成功、IMU 公网传输修复、盲道语音修复、IMU 降至 10Hz
### Milestone 17: 深度性能优化与修复 ✅
**完成时间**: Day 18
**成果**:
- **高性能推理**: RTX 3090 实现 20+ FPS (FP16 + 动态分辨率)
- **音频优化**: 统一 20ms 音频包TTS 延迟显著降低
- **Bug 修复**: 解决 NameError 崩溃、GPU 配置失效问题
### Milestone 18: 传输优化与 TurboJPEG 加速 ✅
**完成时间**: Day 19
**成果**:
- **零拷贝直传**: 非导航场景 CPU 开销降低 90%+
- **TurboJPEG**: 编解码速度提升 2-3 倍
- **JPEG 缓存**: 导航模式编码次数 8→2 次/秒
- **GPU 配置**: 正确使用 GPU 1 (CUDA_VISIBLE_DEVICES=1)
### Milestone 19: AI 管道修复与音频完整性 ✅
**完成时间**: Day 21-22
**成果**:
- **大模型升级**: 集成 GLM-4.6v-Flash (zai-sdk),修复调用错误
- **语音识别优化**: SenseVoice 强制中文模式,修复 VAD 截断 (300ms 缓冲)
- **音频硬件修复**: 移除串口改用电池供电,彻底消除地环路底噪
- **流畅度确认**: 用户确认保留原生语速AI 对话闭环打通
### Milestone 20: 移动端与部署优化 ✅
**完成时间**: Day 23
**成果**:
- **移动端适配**: 视频区域高度修复、IMU 浮窗折叠
- **PM2 部署**: 一行命令启动VAD 本地缓存加速
- **红绿灯检测修复**: 跳帧机制消除卡顿
- **域名配置**: naviglass.hbyrkj.top 可访问
### Milestone 21: 室内导盲分割模型训练完成 ✅
**时间**: Day 24-25
**成果**:
- **问题修复**: YOLOE 不支持自定义训练,改用 yolo11l-seg.pt
- **数据集筛选**: MIT Indoor 2573→14 类别 (floor/door/stairs/person 等)
- **训练完成**: 150 epochs27.6M 参数4.8ms/张推理
### Milestone 22: 室内导盲服务器集成 ✅
**时间**: Day 26
**成果**:
- [x] **完整闭环**: 从语音唤醒 -> 模型加载 -> 推理引导 -> 语音播报全流程打通
### Milestone 23: 室内导盲模型优化与完备 ✅
**时间**: Day 27
**成果**:
- **大规模数据扩展**: 整合 22 类室内物体 (新增 tableware, washroom 等)
- **跨平台部署**: 修复 Windows/Linux 训练路径兼容性问题
- **稳定性修复**: 彻底解决 FP16 训练 NaN 问题 (AMP=False)
- **完整性验证**: 数据集健康检查 100% 通过
### Milestone 24: 室内导盲系统优化交付 ✅
**时间**: Day 28
**成果**:
- **高精度感知**: 切换 14 类模型,地面检测率/避障精准度显著提升
- **体验升级**: 修复无路提醒节流 Bug消除音频 Pop 噪声,交互响应即时化
- **系统诊断**: 明确终端 WiFi 断连根因并给出自动化运维方案
---
## 📅 时间线
```
Day 1-2: SDK + 网络库 ✅ 完成
Day 3: I2S 音频输出 ✅ 完成
Day 4: 麦克风 + IMU ✅ 完成
Day 5: GC2083 摄像头 ✅ 完成
Day 6: 硬件验证与调试 ✅ 完成
Day 7: 工具链配置收敛 ✅ 完成
Day 8: 整体编译成功 ✅ 完成
Day 9: musl修复+板上测试 ✅ 完成
Day 10: 音频稳定性修复 ✅ 完成
Day 11: 网络稳定性优化 ✅ 完成
Day 12: 音频交互与系统加固 ✅ 完成
Day 13: TTS事件循环阻塞修复 ✅ 完成
Day 14: 项目清理+TTS优化 ✅ 完成
Day 15: 导航性能优化 ✅ 完成 (跳帧机制)
Day 16: 自启动配置 ✅ 完成 (load_script.conf)
Day 17: 室外测试+语音修复 ✅ 完成 (frpc UDP)
Day 18: 性能优化+紧急修复 ✅ 完成 (YOLO FP16)
Day 19: 传输优化 ✅ 完成 (TurboJPEG, 零拷贝直传)
Day 20: 深度性能优化 ✅ 完成 (日志精简, GPU并行, 槽位增加)
Day 21: 新AI管道开发 ✅ 完成 (初步集成)
Day 22: AI与音频修复 ✅ 完成 (GLM-4V, VAD缓冲, 语速确认)
Day 23: 移动端+部署优化 ✅ 完成 (PM2, 红绿灯跳帧)
Day 24: YOLOE模型训练 ✅ 完成 (问题诊断+数据集筛选)
Day 25: 室内导盲模型完成 ✅ 完成 (训练+验证通过)
Day 26: 室内导盲服务器集成 ✅ 完成 (IndoorNavigator工作流)
Day 27: 模型训练优化与完善 ✅ 完成 (NaN修复+22类适配+路径修复)
Day 28: 室内导航优化与修复 ✅ 完成 (14类模型+语音修复+音频Pop修复)