流程 1/6
🛑
减速入弯
轻踩刹车, 把车速降下来
通过标准: --
✅
核心是一块 STM32 最小系统板(Blue Pill)加六轴惯性传感器,全部搭在面包板上,总成本约 30 元。盒子绑在方向盘转轴上,任意安装角度都行。








| 部件 | 型号 | 作用 |
|---|---|---|
| 主控 | STM32F103C8T6 (Blue Pill) | 采集传感器、组帧发送、接收网页指令 |
| 六轴传感器 | MPU6500 (GY-6500 模块) | 陀螺仪测角速度、加速度计测三轴加速度 |
| 蓝牙 | HC-05 | 无线连接手机(9600 串口透传) |
| OLED | 0.96" 四脚 I2C | 盒体显示当前状态 / 指令回显 |
| 指示灯 + 蜂鸣器 | LED×3 + 有源蜂鸣器 | 绿/黄/红三档提示 + 蜂鸣声反馈 |
| 调试口 | CH340 USB转TTL | 电脑串口连接 / 固件调试(USART1) |
| 烧录器 | STLINK | Keil 编译固件烧录 |
MPU6500 走硬件 SPI1(PA5=SCK / PA6=MISO / PA7=MOSI / PA4=CS,Mode3,562.5kHz)。陀螺仪量程 ±250°/s,加速度计 ±2g(16384 LSB/g)。上电静止 1 秒做零偏校准(100 次平均),运行中用死区 ±3°/s + 死区内 1/16 慢速跟踪抑制零偏漂移。
TIM2 1ms 时基,每 100ms 组一帧,9600 波特通过 USART1(CH340)或 USART2(HC-05)发送:
{"angle_vel":-18.2, "angle":-95.3, "ax":0.02, "ay":0.98, "az":0.15}
# angle_vel: 角速度 °/s (右转为负) angle: 陀螺仪积分转角 °
# ax/ay/az: 三轴加速度 g — 网页端用水平分量判减速/停车
| 指令 | 含义 |
|---|---|
LED:0 / LED:1 / LED:2 | 绿灯 / 黄灯 / 红灯亮 |
BUZZ:1 / BUZZ:2 | 蜂鸣短响 / 长响 |
OLED:xxx | OLED 显示指定文字 |
数据到网页后由四个独立检测器并行判定,各管一个动作,全部在浏览器本地完成,不上传任何画面:
| 检测器 | 数据源 | 判定逻辑 | 负责步骤 |
|---|---|---|---|
| 加速度计行为判定 | 固件 ax/ay/az | 重力方向 EMA 校准后取水平分量:>0.08g 持续 0.8s = 减速;<0.5g 持续 1.5s = 停车 | ① 减速入弯 ⑤ 停车瞭望 |
| 转向灯嗒声检测 | 手机麦克风 | 时域 RMS 包络:尖峰 >4×基线+0.02 且间隔 >250ms = 一声嗒(继电器声),3 声 = 转向灯已打;教练语音播报时暂停检测 | ② 打右转向灯 |
| 头部姿态检测 | 前置摄像头 + MediaPipe FaceMesh | 鼻尖与左右颊距离比 ×100 得 yaw 角,EMA 平滑去抖:13°~40° 持续约 1s = 看后视镜;>40° 持续 0.6s = 回头盲区;±25° = 左右扫视 | ③ 看后视镜 ④ 回头盲区 ⑤ 左右扫视 |
| 转弯状态机 | 固件 angle_vel / angle | |角速度|>8°/s 持续 0.8s 进入转弯,<4°/s 持续 0.8s 结束;积分转角 40°~150° 为有效右转弯,记录峰值角速度与用时 | ⑥ 平稳入弯 |
// 转弯状态机三段式: IDLE → TURNING → RESULT
IDLE: 连续 8 帧 |av| > 8°/s → TURNING (同时判反方向并提示)
TURNING: 连续 8 帧 |av| < 4°/s → RESULT
RESULT: angle 差 40°~150° → ✅ 有效右转弯, 否则提示转角不足/过大
MediaPipe 模型全部本地自托管(face_mesh.js + wasm + 模型权重共 8 文件),不依赖外网 CDN,离线也能跑;另带非 SIMD wasm 兜底老手机。
流程按标准驾驶动作顺序编排,每步有中文语音引导、通过标准提示和「跳过」按钮,做完自动打勾进入下一步,顶部进度点一目了然。
| 步骤 | 动作 | 通过标准 |
|---|---|---|
| ① 减速入弯 | 轻踩刹车降速 | 水平加速度 >0.08g 持续 0.8s |
| ② 打右转向灯 | 提前 3 秒打灯 | 听到转向灯继电器嗒嗒声 3 声 |
| ③ 看右后视镜 | 头向右转 15°~40° | 持续约 1.2s |
| ④ 回头扫盲区 | 回头超过 40° | 持续约 0.6s |
| ⑤ 停车瞭望 | 停车 + 左右扫视 | 停车 1.5s + 左/右各扫视一次 |
| ⑥ 平稳入弯 | 低速均匀打方向 | 持续右转 1s 以上, 总转角 40°~150° |
转弯有效时按完成的动作数评级(共 5 个动作:转向灯 / 后视镜 / 盲区 / 停车 / 减速);转弯无效最高 B 级:
| 动作完成数 | 转弯有效 | 转弯无效 |
|---|---|---|
| 5 / 5 | S | — |
| 4 / 5 | A | B |
| 3 / 5 | B | C |
| 2 / 5 | C | D |
| ≤1 / 5 | D | D |
| 细节 | 做法 | 为什么 |
|---|---|---|
| 重力方向校准 | 前 25 帧平均锁定重力方向,水平分量小时才微调,刹车/转弯时冻结 | 盒子任意摆放姿势都能用,不受安装角度影响 |
| 语音锁检测 | 播报步骤提示期间检测器锁定,播完才解锁;按字数估时兜底强制解锁 | 防止「卡片还没看清就被语音秒过」 |
| 步骤缓冲 | 进入步骤后 max(进入时刻, 播报结束)+1.5s 内不判定 | 给演示者看卡片的时间 |
| 进步重置检测器 | 每步进入时清零该步所有计数 | 上一步残留状态不能秒过下一步 |
| yaw 滞回 | 角度回落 3° 才清零帧计数 | 头部轻微晃动不误判「看完后视镜」 |
| 转弯结果不丢 | RESULT 阶段每帧重试直到语音锁解锁 | 一次性判定事件不能因语音播报错过 |
| 串口流解析 | 按行缓冲拼接,兼容 \r,半行不丢 | 蓝牙/USB 丢字节时命令依然完整 |
| 模型自托管 | MediaPipe 全套 8 文件本地部署 + 非 SIMD wasm 兜底 | 不依赖外网 CDN,老手机也能跑 |
| 问题 | 原因 | 现状 |
|---|---|---|
| iPhone 无法连接设备 | iOS 全系浏览器不支持 Web Serial / Web Bluetooth | 需安卓 Chrome 或电脑 Chrome/Edge |
| HC-05 是经典蓝牙 | 无 GATT 服务,Web Bluetooth 连不上 | 已适配:安卓 Chrome Web Serial 直连系统已配对设备 |
| 减速/停车是行为判定 | 加速度计积分漂移,测不了绝对速度 | 用水平加速度阈值判定行为,演示场景够用 |
| 转角依赖陀螺仪积分 | 零偏漂移导致积分误差累积 | 死区+归零+慢速跟踪缓解,长时间使用仍有误差 |
| 头部检测条件受限 | 需前置摄像头正对脸部 | 弱光、遮挡时帧数下降 |
| 转向灯靠听声识别 | 麦克风识别继电器嗒嗒声 | 车内其他类似声响可能误判(阈值已加宽) |
| 项目 | 详情 |
|---|---|
| 服务器 | Ubuntu 22.04 (124.221.224.40) |
| 访问地址 | https://cdqtech.online/rightturn/ |
| 服务方式 | 纯静态页面 + nginx (alias /opt/rightturn/),无需后端 |
| 固件工程 | STM32F103C8T6 + MPU6500,Keil5 编译,STLINK 烧录 |
| 通信协议 | 9600 波特 · 10Hz JSON 行帧 · 指令 LED:/BUZZ:/OLED: |
| 浏览器要求 | Chrome / Edge(需支持 Web Serial + 摄像头 + 麦克风) |
cdqtech.online · 右转弯智能教练技术文档