4.3 KiB
4.3 KiB
Day 28: 室内导航优化与 Bug 修复 (2026-01-06)
🎯 今日目标
- 修复室内导航无语音播报问题。
- 优化“未检测到可行走区域”的播报逻辑,消除闪烁。
- 切换到更精准的室内分割模型 (14类)。
- 解决 TTS 音频末尾的“啪”声。
- 排查终端 WiFi 断连后无法重连的问题。
🔧 实施细节
1. 模型切换与优化
- 切换模型: 从原
yolo11l-seg-indoor.engine(22类) 切换为yolo11l-seg-indoor14.engine(14类,专为室内地板优化)。 - 类别映射更新: 修改
workflow_indoor.py以适配 14 类数据集 (MIT Indoor Subset):- 可行走区域:
floor(0),corridor(1),sidewalk(2) - 静态障碍物:
chair(3),table(4),sofa_bed(5),cabinet(11),trash_can(12) - 兴趣点:
door(6),elevator(7),stairs(8) - 动态障碍:
person(10)
- 可行走区域:
- 效果: 地板 (
floor) 检测置信度显著提升(0.85+),彻底解决了“无法识别地面”的问题。 - 识别逻辑优化:
- 视觉持久化: 引入可行走区域 Mask 缓冲机制,防止因单帧检测失败导致的“绿道闪烁”现象。
- 阈值微调: 将
WALKABLE_MIN_AREA降至 50,提高对狭窄路段或远距离地面的检出灵敏度。 - 可视化增强: 完善
_draw_indoor_visualizations,确保实时渲染分割掩膜与避障框。
2. 语音播报修复
- 强制首播机制: 修复了
IndoorNavigator中“未检测到可行走区域”的节流逻辑。- 问题: 初始化时间
last_no_walkable_time为 0,导致首次检测失败时由于时间差过大或逻辑判断失误被跳过。 - 修复: 增加显式判断
if self.last_no_walkable_time == 0,确保首次检测到无路时立即播报,后续保持 8 秒间隔。
- 问题: 初始化时间
- 启动即时反馈: 在
app_main.py中,收到“室内导航”指令后,立即播报“室内导航已启动,正在寻找可行走区域”,消除用户等待时的不确定感。 - 崩溃修复: 移除了新模型中不存在的
CLASS_TOILET和CLASS_SINK引用,解决了后台报错导致的导航中断。 - 语音识别优化:
- 别名扩展: 针对 SenseVoice 的同音误识,增加了
["四内导航", "思维导航", "失内导航", "室类导航"]等别名映射,确保“室内导航”指令的高唤醒率。 - 短指令支持: 允许单独说“导航”触发盲道导航,防止吞字导致命令失效。
- 别名扩展: 针对 SenseVoice 的同音误识,增加了
3. 音频体验优化
- 消除“啪”声: 在
app_main.py的 TTS 播放流末尾,将静音填充时长从 60ms 增加到 200ms,有效消除了音频截断带来的爆音。
4. 终端 WiFi 重连问题分析
- 现象: 终端离开 WiFi 范围后断网,返回后无法自动重连。
- 分析: 客户端程序 (
NaviGlassClient) 的 WebSocket 连接逻辑已有无限重试和指数退避机制。无法重连是因为底层操作系统 (Tina Linux) 的 WiFi 接口在断开后未自动重新关联 AP。 - 结论: 此为系统配置问题,非 App 代码 Bug。
- 建议: 在终端部署后台脚本 (
wifi_check.sh),定期检测网关连通性并在断网时重启 WiFi 接口。
📊 结果验证
- ✅ 地面检测: 14类模型能稳定识别大面积
floor(area > 60000)。 - ✅ 语音反馈: 启动导航和无路警告均能正常听到,不再静默。
- ✅ 稳定性: 修复未定义变量错误后,导航进程稳定运行。
- ⚠️ 遗留问题: 终端 WiFi 自动重连需在设备端通过脚本解决。
5. 文档体系重构与完善
- 系统架构图更新: 重写
implementation_plan_complete.md,新增基于 Mermaid 的端云协同架构图,更新至 Day 28 状态。 - 任务清单优化: 全面整理
task_complete.md,合并“技术债务/未来规划”板块,优化快速导航与排版。 - 技术文档刷新: 更新《技术栈对比》与《服务器技术栈》,纳入室内导盲 (14类) 与新 AI 管道信息。
- 更新规则精简: 优化
DOC_RULES.md,移除冗余示例,确立“轻量化检查清单”原则。
📝 下一步计划
- 在真实环境中实测 14 类模型的避障效果。
- (终端侧) 部署 WiFi 保活脚本。