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

106 lines
4.6 KiB
Markdown
Raw 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 系统架构与实现详情
**更新日期**: 2026-01-06 (Day 28)
**项目状态**: ✅ 核心功能完备 / 室内导盲优化交付
---
## 🏗️ 系统总体架构
NaviGlass 采用 **端云协同** 架构,将即时性要求高的采集/播放任务放在前端眼镜终端,将算力密集的 AI 推理与大模型交互放在高性能 GPU 服务器端。
```mermaid
graph TD
subgraph Client [Avaota F1 终端]
Cam[摄像头 GC2083] -->|JPEG 流| WS_Cam[WebSocket /ws/camera]
Mic[麦克风] -->|PCM 流| WS_Audio[WebSocket /ws_audio]
IMU[传感器 ICM-42688] -->|UDP JSON| UDP_IMU[UDP :12345]
WS_Audio -->|TTS PCM| Spk[扬声器]
end
subgraph Server [RTX 3090 服务器]
WS_Cam --> |TurboJPEG| Visual[视觉感知中心]
WS_Audio --> |SenseVoice| ASR[语音识别]
UDP_IMU --> |Fusion| NavLogic[导航逻辑]
Visual --> |YOLOv11-seg| Lane[盲道检测]
Visual --> |YOLOv11-seg| Indoor[室内分割]
Visual --> |YOLOv11-det| Light[红绿灯检测]
ASR --> |Text| LLM[GLM-4V-Flash]
LLM --> |Response| EdgeTTS[语音合成]
EdgeTTS --> |PCM| WS_Audio
Lane --> |Guidance| NavMaster[导航总控]
Indoor --> |Guidance| NavMaster
NavMaster --> |Prompt| EdgeTTS
end
Client <--> |FRP Tunnel| Server
```
---
## 🧠 核心模块实现详情
### 1. 视觉感知中心 (Visual Perception)
**文件**: `NaviGlassServer/navigation_master.py`, `workflow_*.py`
* **多模态导航状态机**:
* `IDLE`: 待机/闲聊模式
* `BLINDPATH_NAV`: 盲道导航 (Outdoor)
* `INDOOR_NAV`: 室内导盲 (Indoor)
* `TRAFFIC_LIGHT`: 红绿灯检测
* `ITEM_SEARCH`: 物品寻找
* **室内导航 (Indoor) [Day 28 New]**:
* **模型**: `yolo11l-seg-indoor14.engine` (TensorRT FP16)
* **策略**: 语义分割 (Seg) 优先。提取 `floor` (CLSID 0) 生成可行走区域掩膜 (Mask),计算中心点偏移量进行方向引导。
* **避障**: 检测 `chair`, `table`, `cabinet` 等障碍物,结合深度/位置给出避让提示。
* **盲道导航 (Outdoor)**:
* **模型**: `yolo11l-seg-blind.engine`
* **算法**: `FindBestPath` 算法,计算盲道分割掩膜的主方向,引导用户居中行走。
### 2. AI 交互管道 (Voice Interaction)
**文件**: `NaviGlassServer/app_main.py`
* **ASR (语音识别)**: FunASR/SenseVoiceSmall (本地运行,强制中文 `zh`)。
* **LLM (大模型)**: ZhipuAI GLM-4.6v-Flash (通过 API)。支持视觉理解,用于 "这是什么"、"前方的文字" 等通用问答。
* **TTS (语音合成)**: EdgeTTS (本地/在线)。生成 16kHz PCM 音频流,并通过 WebSocket 实时推送到客户端播放。
### 3. 服务器性能优化 (Performance)
**关键技术**:
* **TensorRT 加速**: 所有 YOLO 模型导出为 `.engine`,启用 FP16 半精度。
* **TurboJPEG**: 替代 OpenCV 进行 JPEG 编解码,速度提升 3 倍。
* **零拷贝直传**: 非导航模式下,直接转发 JPEG 数据流给前端网页不进行解码CPU 占用降低 90%。
* **GPU 线程池**: `ThreadPoolExecutor` 管理 GPU 推理任务,避免 GIL 锁阻塞 Websocket 事件循环。
---
## 🕶️ 终端硬件与嵌入式实现
**平台**: Avaota F1 (全志 V821 / RISC-V 架构)
**系统**: Tina Linux (OpenWrt base, musl libc)
### 1. 传感器驱动
* **摄像头**:通过 MPP (Media Process Platform) 框架直接采集 ISP 处理后的图像,硬件编码为 JPEG。
* **IMU**: 使用 GPIO 模拟 SPI 驱动 ICM-42688实现 10Hz 数据采集。
* **音频**: ALSA 架构。
* 播放: I2S 接口 (hw:1,0) -> MAX98357A 功放。
* 录音: Audio Codec (hw:0,0) -> 驻极体麦克风。
### 2. 客户端程序 (`NaviGlassClient`)
**语言**: C++
* **多线程架构**: `CameraThread`, `AudioCaptureThread`, `IMUThread` 独立运行。
* **断网重连**:
* WebSocket 连接具备指数退避 (Exponential Backoff) 重连机制。
* *注: 底层 WiFi 接口需依赖 OS 脚本保活。*
* **音频流**: 20ms 分包 (320 samples @ 16kHz),确保低延迟传输。
---
## 🛠️ 部署与运维
* **内网穿透**: FRP (Fast Reverse Proxy)。将本地端口 8081 (WS) 和 12345 (UDP) 暴露到公网服务器。
* **进程管理**: PM2 (Server), Systemd/Init.d (Client)。
* **可视化监控**: Web Dashboard (`/static/index.html`) 提供实时第一视角画面、IMU 姿态、AI 对话日志和系统状态监控。