4.6 KiB
4.6 KiB
NaviGlass 系统架构与实现详情
更新日期: 2026-01-06 (Day 28) 项目状态: ✅ 核心功能完备 / 室内导盲优化交付
🏗️ 系统总体架构
NaviGlass 采用 端云协同 架构,将即时性要求高的采集/播放任务放在前端眼镜终端,将算力密集的 AI 推理与大模型交互放在高性能 GPU 服务器端。
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 对话日志和系统状态监控。