642 lines
26 KiB
Markdown
642 lines
26 KiB
Markdown
# 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 epochs,27.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修复)
|