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

4.6 KiB
Raw Blame History

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 对话日志和系统状态监控。