青鸾云步:基于 Cordova 的 AI 导盲机器人 APP 全栈开发实战 一、项目概述青鸾云步是一款面向视障人士的智能导盲机器人配套 APP运行于 Android 手机通过蓝牙连接 ESP32 双轮机器人实现障碍物语音预警 AI 智能对话 高德步行导航三大核心功能。用户全程无需看屏幕所有交互通过语音完成。核心体验闭环机器人推杆 → 超声波检测障碍物 → 蓝牙推送数据 → 手机 APP 语音播报方向与距离 → AI 大模型理解用户意图 → 高德地图规划步行路线 → TTS 逐段语音导航。立即开始https://github.com/NQLOVELSJ/QLYB_APP二、技术栈一览层级技术用途容器框架Apache Cordova 12 Android 14将 HTML5 网页打包为原生 APK前端 UI纯 HTML/CSS/JS 单文件深色主题适老化界面离线语音识别Vosk Android SDK 0.3.32中文 small 模型 66MB本地离线 STT无需联网语音合成cordova-plugin-ttsAndroid 原生 TTS Web Speech API 降级中文 TTS 播报AI 大模型DeepSeek V4 Flash/ProOpenAI 兼容 API自然语言理解、导航意图解析地图导航高德 Web Services REST API v3GPS 定位、地址编码、步行路线规划蓝牙通信cordova-plugin-ble-central BLE GATT 轮询接收机器人障碍物 JSON 数据定位cordova-plugin-geolocationWGS-84 GPS高精度实时位置追踪音频提示Web Audio API方向性蜂鸣左/右/中立体声定位三、架构设计关键设计决策离线 STT 优先Vosk 模型直接嵌入 APKassets 目录首次启动自动解压无需下载。解决视障用户网络不稳定场景。纯 REST 地图方案不使用高德 Android SDK体积大、需原生集成改用 REST API 在 JS 层完成所有地图操作APK 零侵入。BLE 轮询模式放弃不可靠的 BLE notify/indicate用 200ms 定时 readCharacteristic 获取传感器数据兼容性更好。四、核心技术实现4.1 Vosk 离线语音识别APK 内嵌模型 自动解压Vosk 中文小模型约 66MB直接放入assets/vosk-models/目录随 APK 分发。关键踩坑Android 的 aapt2 构建工具默认压缩 assets 中大于 1MB 的文件导致模型文件final.mdl16MB、Gr.fst26MB被压缩后无法通过AssetManager.open()读取。解决方案在build-extras.gradle中配置禁止压缩android { aaptOptions { noCompress mdl, fst, int, ie, mat, dubm, conf, stats } }回声消除通话模式下APP 播报 TTS 时麦克风会录到自己的声音导致自问自答死循环。解决方案分三层TTS 播报前停止识别器cordova.plugins.SpeechToText.stop()清空 Vosk 缓冲区ttsSpeaking标志位识别回调检测到后直接跳过播报时长估算中文 ~4字/秒延时后重启识别器去重机制Vosk 在用户沉默时会持续返回上一次的最终识别结果。通过lastRecognizedText变量记录上次已发送文本相同时跳过。4.2 高德地图步行导航采用高德 Web 服务 API非 SDK纯 HTTP 调用接口端点用途地理编码/v3/geocode/geo地名 → 坐标逆地理编码/v3/geocode/regeo坐标 → 街道名POI 搜索/v3/place/text附近地点查询步行路线/v3/direction/walking步行路径规划坐标系统坑点Android GPS 返回 WGS-84 坐标高德默认使用 GCJ-02国测局坐标。通过在所有请求中传入coordsysgps参数告知高德输入为 WGS-84省去手动坐标转换。坐标顺序坑点高德 API 返回的坐标格式统一为经度,纬度lng 在前解析时必须注意顺序。JS 端parseFloat(loc[0])是经度loc[1]是纬度。导航语音优先级体系优先级事件行为emergencyBLE 避障危险/紧急转弯立即打断一切high转弯接近 30m等待 emergency 结束medium转弯预告 30-100m空闲 3 秒后播报low继续直行空闲 5 秒后播报4.3 AI 导航意图解析利用 DeepSeek 大模型理解用户自然语言中的导航意图而非传统的关键词匹配。系统提示词注入当前 GPS 位置和导航状态并约定输出格式如果用户询问导航相关问题请在回复末尾附加一行[[NAV:地点名称]]前端检测 AI 回复中的[[NAV:...]]标记后自动提取目的地 → 调用高德 POI 搜索/地理编码 → 启动步行导航。示例对话用户“带我去最近的药店”AI“好的附近有老百姓大药房距离约300米。正在为您规划步行路线。[[NAV:老百姓大药房]]”系统自动搜索 POI 坐标 → 规划路线 → 语音引导4.4 BLE 蓝牙通信使用轮询模式每 200ms 读取一次 GATT 特征值替代不可靠的 BLE notify。ESP32 端每秒推送一次 JSON{distance:85.3,direction:left,direction_cn:左前方,status:Obstacle,level:warning,level_cn:警告,emergency:false,turning:false,turn_dir:,angle:95.0}APP 解析后实时更新障碍物界面距离数字、方向标签、安全等级色条并根据等级和方向触发立体声蜂鸣Web Audio API 的StereoPanner实现左右耳定位。五、项目结构android_app/ ├── www/ │ └── index.html # 整个 APP1402行HTMLCSSJS 全内联 ├── config.xml # Cordova 配置 ├── platforms/android/ │ ├── build-extras.gradle # 禁止压缩 Vosk 模型文件 │ └── app/src/main/ │ ├── assets/ │ │ ├── www/ # cordova prepare 自动同步 │ │ └── vosk-models/ # 内嵌中文语音模型 (66MB) │ ├── res/ │ │ ├── drawable/ # 启动画面图标 │ │ ├── mipmap-*/ # 自适应图标含 v26 版本 │ │ └── values/ # 主题和颜色 │ └── java/com/vayapedal/speechtotext/ │ ├── SpeechToText.java # Vosk 插件已修改内嵌模型自动复制 │ └── FileManager.java # 资产文件管理已修改assets→存储 └── plugins/ ├── cordova-plugin-tts ├── cordova-plugin-ble-central ├── cordova-plugin-geolocation └── vosk-speech-to-text # 离线语音识别插件六、构建命令cdandroid_app cordova prepare android# 同步 www/ 到平台cdplatforms/android ./gradlew assembleDebug# 编译 APK# 输出: app/build/outputs/apk/debug/app-debug.apk (~107MB)七、总结青鸾云步以 Cordova 混合开发框架为基座将离线语音识别、大模型 AI 对话、高德步行导航三大能力整合进一个 1400 行的单 HTML 文件实现了完全语音驱动的导盲体验。核心技术亮点包括 Vosk 模型 APK 内嵌免下载、BLE 轮询模式替代不可靠通知、AI 自然语言导航意图解析、以及导航语音与避障语音的优先级调度。