|
8| 1
|
三模块多模态智能车载系统,集成声源定位、人脸追踪... |
|
本帖最后由 hennychen 于 2026-7-30 10:53 编辑 PathFinder_LCD — 多模态智能车载系统 项目概述 PathFinder_LCD 是一个三模块多模态智能车载系统,集成声源定位、人脸追踪、动态表情、环境感知与 AI 语音能力: [td]
https://www.bilibili.com/video/BV1Gf3p6HEo9/?buvid=XU4687D4A0B7B994767097CD3F9899A202C12&from_spmid=public.webview.0.0&is_story_h5=false&mid=ZfWom8sQ6xAyYNZXVcaLrA%3D%3D&p=1&plat_id=116&share_from=ugc&share_medium=android&share_plat=android&share_session_id=0b722783-3c5d-406a-bde4-20c323804abe&share_source=WEIXIN&share_tag=s_i&spmid=united.player-video-detail.0.0×tamp=1785379895&unique_k=UDV0hOg&up_id=43723713系统架构 三模块总体架构 ┌─────────────────────────────────────────────────────────────────────────────┐ │ 板 A — PathFinder_EMOTE (TK021F2699) │ │ │ │ ┌──── 传感器层 ────┐ ┌──── UI 层 ──────────┐ ┌──── 通信层 ────────┐ │ │ │ AHT20 温湿度 │ │ ST7701S 480×480 LCD │ │ BLE GATT (C2/C3/C4)│ │ │ │ BMP280 气压海拔 │ │ CST3530 触摸屏 │ │ Wi-Fi STA/Mesh ROOT│ │ │ │ MPU6050 IMU │ │ LVGL 8.3 渲染引擎 │ │ UART → 板 B │ │ │ │ GUVA-S12SD UV │ │ EAF 表情动画播放器 │ │ ESP-NOW 广播 │ │ │ └──────────────────┘ │ 飞行仪表盘 │ └────────────────────┘ │ │ └─────────────────────┘ │ └──────────────────────────────┬──────────────────────────────────────────────┘ │ Mesh / ESP-NOW / UART ▼ ┌─────────────────────────────────────────────────────────────────────────────┐ │ 板 B — PathFinder_Tracker (N16R8) │ │ │ │ ┌──── 音频层 ──────┐ ┌──── 视觉层 ────────┐ ┌──── 执行层 ────────┐ │ │ │ ES7210 4ch 麦克风 │ │ OV2640 DVP 摄像头 │ │ 2×MG90S 舵机云台 │ │ │ │ GCC-PHAT 声源定位 │ │ ESP-DL 人脸检测 │ │ Pan (水平) + Tilt │ │ │ │ I2S TDM 48kHz │ │ Core-1 独立任务 │ │ PWM 50Hz 控制 │ │ │ └──────────────────┘ └─────────────────────┘ └────────────────────┘ │ │ │ │ ┌──── 通信层 ──────┐ ┌──── 指示层 ────────┐ ┌──── AI (预留) ─────┐ │ │ │ Mesh CHILD 节点 │ │ WS2812 × 36 灯环 │ │ MAX98357A TTS 输出 │ │ │ │ ESP-NOW 广播 │ │ 声源方向可视化 │ │ xiaozhi AI 语音 │ │ │ └──────────────────┘ └─────────────────────┘ └────────────────────┘ │ └─────────────────────────────────────────────────────────────────────────────┘ │ BLE GATT Notify ▼ ┌─────────────────────────────────────────────────────────────────────────────┐ │ PathFinder_Dashboard (Flutter Android App) │ │ │ │ ┌──── BLE 通信层 ────┐ ┌──── 数据持久层 ────┐ ┌──── UI 可视化层 ───┐ │ │ │ ReactiveBleService │ │ Drift SQLite ORM │ │ Environment Screen │ │ │ │ BLE Codec 编解码 │ │ Env/Motion/Emote │ │ Motion Screen │ │ │ └─────────────────────┘ │ CSV Export │ │ Emote Screen │ │ │ └─────────────────────┘ │ History Screen │ │ │ └────────────────────┘ │ └─────────────────────────────────────────────────────────────────────────────┘ 板间通信拓扑 ┌──────────────────┐ │ 家用 Wi-Fi 路由器 │ └────────┬─────────┘ │ ┌────────────┴────────────┐ ▼ ▼ ┌────────────────────┐ ┌────────────────────┐ │ 板 A (EMOTE) │ │ 板 B (Tracker) │ │ MESH_ROLE_ROOT │◄──────►│ MESH_ROLE_CHILD │ │ 连接路由器 │ 无线 │ 加入 Mesh 网络 │ └─────────┬──────────┘ └────────────────────┘ │ │ BLE GATT Notify ▼ Flutter Dashboard 三级 Fallback 通信优先级 B板向A板发送数据时自动选择最佳通道(见 comm_link.c): [td]
方案一:无线组网(默认,零接线) ✅ 前提:两板在同一 2.4GHz Wi-Fi 环境下,且 A板已通过 BLE/Web Portal 配网写入路由器 SSID/密码。 A板 (EMOTE) B板 (Tracker)┌──────────┐ ┌──────────┐ │ ROOT 节点 │ ◄─ ESP-WIFI-MESH ──► │ CHILD 节点 │ │ 连接路由器 │ ◄─ ESP-NOW ──► │ 加入 Mesh │ └──────────┘ └──────────┘ 仅需给两板独立供电,无需任何信号线连接 仅需给两板独立供电,无需任何信号线连接 启动流程:
使用单个 USB-C PD 5V/5A 适配器从 B板进电,再从 B板的 5V/VIN 和 GND 引脚拉杜邦线到 A板: USB-C PD 5V/5A 适配器 │ ▼ ┌────────────────────────┐ │ B板 (Tracker) │ │ USB 口(主供电入口) │ │ │ │ 5V/VIN ───┬───────────┼── 5V 线 ─────► A板 5V/VIN │ │ │ │ GND ──────┴───────────┼── GND 线 ────► A板 GND │ │ │ (同时走无线 Mesh) │◄── 零通信线 ──► A板 └────────────────────────┘ [td]
供电要点:
仅在无线失效或无路由器环境使用,需要交叉连接 TX↔RX: A板 (PathFinder_EMOTE) B板 (PathFinder_Tracker) ┌──────────────────┐ ┌──────────────────┐│ GPIO ?? (TX) ├───────────────►│ GPIO20 (RX) │ │ │ │ │ │ GPIO ?? (RX) │◄───────────────┤ GPIO19 (TX) │ │ │ │ │ │ GND ├───────────────►│ GND │ └──────────────────┘ └──────────────────┘ 115200 bps, 8N1 [td]
帧格式:[HEADER 0xAA][CMD][LEN][DATA[LEN]][CRC8][TAIL 0x55](见 drv_uart_comm.c)
硬件接线图 板 A — PathFinder_EMOTE (TK021F2699) ESP32-S3 ST7701S LCD (480×480) ┌──────────┐ ┌──────────────────┐ │ GPIO 0 ├──── R3 ──────────►│ R3 │ │ GPIO 2 ├──── PCLK ────────►│ PCLK │ │ GPIO 4 ├──── B0 ──────────►│ B0 │ │ GPIO 5 ├──── B1 ──────────►│ B1 │ │ GPIO 6 ├──── B2 ──────────►│ B2 │ │ GPIO 7 ├──── B3 ──────────►│ B3 │ │ GPIO 9 ├──── G4 ──────────►│ G4 │ │ GPIO 10 ├──── G5 ──────────►│ G5 │ │ GPIO 11 ├──── G6 ──────────►│ G6 │ │ GPIO 15 ├──── B4 ──────────►│ B4 │ │ GPIO 16 ├──── G0 ──────────►│ G0 │ │ GPIO 17 ├──── G1 ──────────►│ G1 │ │ GPIO 18 ├──── G3 ──────────►│ G3 │ │ GPIO 21 ├──── R4 ──────────►│ R4 │ │ GPIO 41 ├──── HSYNC ───────►│ HSYNC │ │ GPIO 42 ├──── DE ──────────►│ DE │ │ GPIO 46 ├──── VSYNC ───────►│ VSYNC │ │ GPIO 45 ├──── R1 ──────────►│ R1 │ │ GPIO 47 ├──── R2 ──────────►│ R2 │ │ GPIO 48 ├──── G7 ──────────►│ G7 │ │ GPIO 1 ├──── SPI CS ──────►│ CS (初始化配置) │ └──────────┘ └──────────────────┘ I2C 总线(复用触摸屏 I2C-0,100kHz) ESP32-S3 传感器组(与触摸屏共线)┌──────────┐ ┌──────────────────────────────┐ │ GPIO 13 ├──── SCL ────►│ CST3530 (0x58) SCL (触摸) │ │ │ │ AHT20 (0x38) SCL (温湿度)│ │ │ │ BMP280 (0x76) SCL (气压) │ │ │ │ MPU9250 (0x68) SCL (IMU) │ │ │ │ HMC5883L (0x1E) SCL (罗盘) │ │ GPIO 20 ├──── SDA ────►│ CST3530 (0x58) SDA │ │ │ │ AHT20 (0x38) SDA │ │ │ │ BMP280 (0x76) SDA │ │ │ │ MPU9250 (0x68) SDA │ │ │ │ HMC5883L (0x1E) SDA │ │ GPIO 8 ├──── INT ────►│ CST3530 触摸中断 │ │ GPIO 3 ├──── AN ─────►│ GUVA-S12SD (UV) 模拟输出 │ │ 3V3 ├──── VCC ────►│ 所有传感器 VCC (3.3V) │ │ GND ├──── GND ────►│ 所有传感器 GND │ └──────────┘ └──────────────────────────────┘ I2C 频率:100kHz(降低以保证上拉较弱时稳定通信) AHT20 温湿度模块 ESP32-S3 AHT20 (外接模块)┌──────────┐ ┌─────────────┐ │ GPIO 13 ├──── SCL ────►│ SCL │ │ GPIO 20 ├──── SDA ────►│ SDA │ │ 3V3 ├──── VCC ────►│ VCC (3.3V) │ │ GND ├──── GND ────►│ GND │ └──────────┘ └─────────────┘ I2C 地址: 0x38 (固定) BMP280 气压计模块 ESP32-S3 BMP280 (外接模块)┌──────────┐ ┌─────────────┐ │ GPIO 13 ├──── SCL ────►│ SCL │ │ GPIO 20 ├──── SDA ────►│ SDA │ │ 3V3 ├──── VCC ────►│ VCC (3.3V) │ │ GND ├──── GND ────►│ GND │ └──────────┘ └─────────────┘ I2C 地址: 0x76 (SDO=GND) 或 0x77 (SDO=VCC) MPU9250/6500 九轴 IMU 模块 ESP32-S3 MPU9250/6500 (外接模块)┌──────────┐ ┌─────────────┐ │ GPIO 13 ├──── SCL ────►│ SCL │ │ GPIO 20 ├──── SDA ────►│ SDA │ │ 3V3 ├──── VCC ────►│ VCC (3.3V) │ │ GND ├──── GND ────►│ GND │ │ — │ │ AUX/AK8963 │ │ — │ │ (内置磁力计,自动 bypass) └──────────┘ └─────────────┘ I2C 地址: 0x68 (AD0=GND) 或 0x69 (AD0=VCC) 内置 AK8963 磁力计 @0x0C (自动启用 bypass) HMC5883L / QMC5883L 三轴磁力计模块(独立罗盘) ESP32-S3 HMC5883L / QMC5883L (外接模块) ┌──────────┐ ┌─────────────────────────┐ │ GPIO 13 ├──── SCL ────►│ SCL │ │ GPIO 20 ├──── SDA ────►│ SDA │ │ 3V3 ├──── VCC ────►│ VCC (3.3V) │ │ GND ├──── GND ────►│ GND │ │ — │ │ DRDY (未接) │ │ — │ │ S1,S2 (GND) │ └──────────┘ └─────────────────────────┘ HMC5883L: I2C 地址 0x1E (固定) QMC5883L: I2C 地址 0x2C (固定) 磁力计三级优先级策略: drv_hmc5883l_is_ready() ──┬──► ✅ 使用 HMC5883L (@0x1E) │└──► drv_qmc5883l_is_ready() ──┬──► ✅ 使用 QMC5883L (@0x2C) │ └──► 使用 AK8963 (@0x0C) (MPU-9250 内置)
其他外设 ESP32-S3 外设┌──────────┐ ┌──────────────────┐ │ GPIO 38 ├──── DATA ───►│ WS2812 RGB LED │ └──────────┘ └──────────────────┘ 板 B — PathFinder_Tracker (ESP32-S3 N16R8) ESP32-S3 N16R8 ┌───────────────┐ │ │ ┌──── AcousticEye 模块 ────────────────────┐ │ │ │ │ │ GPIO 38 ─────┼────┼──── SDA ────► ES7210 (I2C 0x40) │ │ GPIO 39 ─────┼────┼──── SCL ────► ES7210 │ │ GPIO 42 ─────┼────┼──── MCLK ───► ES7210 │ │ GPIO 41 ─────┼────┼──── BCLK ───► ES7210 │ │ GPIO 40 ─────┼────┼──── WS ─────► ES7210 │ │ GPIO 21 ─────┼────┼──── DOUT ───► ES7210 (I2S DIN) │ │ GPIO 45 ─────┼────┼──── PA_EN ──► 板级音频使能 (HIGH=开启) │ │ │ │ │ │ │ └──────────────────────────────────────────┘ │ │ │ │ ┌──── OV2640 摄像头 (DVP 接口) ────────────┐ │ │ │ │ │ GPIO 4 ─────┼────┼──── SIOD (SDA) SCCB I2C │ │ GPIO 5 ─────┼────┼──── SIOC (SCL) SCCB I2C │ │ GPIO 6 ─────┼────┼──── VSYNC │ │ GPIO 7 ─────┼────┼──── HREF │ │ GPIO 8 ─────┼────┼──── D2 │ │ GPIO 9 ─────┼────┼──── D1 │ │ GPIO 10 ─────┼────┼──── D3 │ │ GPIO 11 ─────┼────┼──── D0 │ │ GPIO 12 ─────┼────┼──── D4 │ │ GPIO 13 ─────┼────┼──── PCLK │ │ GPIO 15 ─────┼────┼──── XCLK (16MHz 输出) │ │ GPIO 16 ─────┼────┼──── D7 │ │ GPIO 17 ─────┼────┼──── D6 │ │ GPIO 18 ─────┼────┼──── D5 │ │ │ │ │ │ │ │ ┌──── 电源与控制(非 GPIO) ────────┐ │ │ │ │ │ VCC ── 3.3V(~100mA,禁接 5V) │ │ │ │ │ │ GND ── GND(共地) │ │ │ │ │ │ RESET ── 3.3V 或悬空(低有效) │ │ │ │ │ │ PWDN ── GND 或悬空(高=休眠) │ │ │ │ │ └──────────────────────────────────┘ │ │ │ └──────────────────────────────────────────┘ │ │ │ │ ┌──── MG90S 舵机 ──────────────────────────┐ │ │ │ │ │ GPIO 47 ─────┼────┼──── 橙色信号线 ──► Pan (水平轴) │ │ GPIO 14 ─────┼────┼──── 橙色信号线 ──► Tilt (垂直轴) │ │ │ │ 红线 ──────────► VCC (5V) │ │ │ │ 棕线 ──────────► GND │ │ │ │ │ │ │ └──────────────────────────────────────────┘ │ │ │ │ ┌──── WS2812 灯环 (36 LED) ───────────────┐ │ GPIO 48 ─────┼────┼──── DIN ──────► WS2812 数据输入 │ │ │ │ │ │ │ └──────────────────────────────────────────┘ │ │ │ │ ┌──── MAX98357A 功放 (I2S1 TTS) ──────────┐ │ GPIO 1 ─────┼────┼──── BCLK (位时钟) │ │ GPIO 2 ─────┼────┼──── WS (字选择) │ │ GPIO 3 ─────┼────┼──── DIN (数据输入) │ │ │ │ VIN ──────────► 5V │ │ │ │ GND ──────────► 共地 │ │ │ │ │ │ │ └──────────────────────────────────────────┘ │ │ │ │ ┌──── UART 板间通信 (可选备用 → 板 A) ─────┐ │ GPIO 19 ─────┼────┼──── TX ────────► 板 A RX (交叉连接) │ │ GPIO 20 ─────┼────┼──── RX ────────◄ 板 A TX (交叉连接) │ │ │ │ 115200 bps (默认走无线, 仅在无线失效) │ │ │ └──────────────────────────────────────────┘ └───────────────┘
I2C 设备地址总览 [td]
多模态追踪工作流程 ┌──────────────────┐ │ 声源粗定位 │ │ ES7210 4ch 采集 │ │ GCC-PHAT 算法 │ │ 输出: 0°~360° │ └────────┬─────────┘ │ 角度有效 ▼ ┌──────────────────┐ │ 舵机粗调 │ │ Pan/Tilt 转向 │ │ 声源方向 │ └────────┬─────────┘ │ 云台对准 ▼ ┌──────────────────┐ │ 视觉精追踪 │ │ OV2640 人脸检测 │ │ ESP-DL 推理 │ │ 坐标反馈微调 │ └────────┬─────────┘ │ 人脸锁定 ▼ ┌──────────────────┐ │ 闭环保持 │ │ 音频+视觉融合 │ │ 丢失→搜索→重捕 │ └──────────────────┘ 状态机:IDLE → ACOUSTIC_TRACK → FACE_TRACK → SEARCH → (循环) 已实现功能模块 板 A — PathFinder_EMOTE 固件 Phase 1:传感器 + 动态表情联动 ✅ [td]
[td]
Phase 1-2:声源定位 + 舵机云台 ✅ [td]
[td]
[td]
Flutter App — PathFinder_Dashboard [td]
技术栈 ESP32 固件端 [td]
[td]
BLE 通信协议 GATT Service 结构 Service UUID: 0000fe00-0000-1000-8000-00805f9b34fb├── C2 Environment Data (NOTIFY @1Hz) UUID: 0000fe02-...├── C3 Motion Data (NOTIFY @25Hz) UUID: 0000fe03-...├── C4 Emote State (NOTIFY @on-change) UUID: 0000fe04-... 数据帧格式 C2 环境数据帧(16 字节) [td]
C3 运动数据帧(44 字节) [td]
C4 表情状态帧(8 字节) [td]
帧格式: [MSG_TYPE(1)][SEQ(1)][PAYLOAD_LEN(1)][PAYLOAD(0~246)][CRC8(1)]最大帧长: 250 字节(兼容 ESP-NOW 限制)消息类型: 0x01 MSG_ANGLE_DATA 声源角度 (B→A) 0x02 MSG_TRACK_STATE 追踪状态 (B→A) 0x03 MSG_FACE_INFO 人脸信息 (B→A) 0x04 MSG_SERVO_CTRL 舵机控制 (A→B) 0x05 MSG_MODE_SWITCH 模式切换 (A→B) 0x10 MSG_HEARTBEAT 心跳 (B→A, 500ms) 运动事件映射表 [td]
[td]
硬件平台规格 板 A — TK021F2699 [td]
[td]
![]() 感谢DFRobot赞助该空气质量传感器,为该项目助力新功能Sharp GP2Y1010AU0F 空气质量粉尘传感器Gravity: SHARP 空气质量传感器 转接模块 SHARP 粉尘传感器 转接模块https://www.dfrobot.com.cn/goods-827.html |
沪公网安备31011502402448© 2013-2026 Comsenz Inc. Powered by Discuz! X3.4 Licensed