1. 项目的来龙去脉:为什么要用姿态传感器测碰撞
1.1 一个被低估的测量场景
这台WT9011DCL-BT50第一次出现在我工位上的时候,项目已经因为“用什么测碰撞加速度”卡了一周。市面上正经的碰撞测试加速度计,一套下来够买好几台验证车,而我们需要的,其实是一套能装到几辆验证车上、实时记录低速碰撞加速度波形、并且能自动识别碰撞事件的低成本方案。
先说清楚这个需求是怎么来的。我们要对园区物流配送车和部分城市道路试验车辆做低速碰撞事件监测,车速范围大概在5km/h到30km/h,碰撞场景包括追尾、侧面剐蹭、保险杠顶撞等。这类碰撞不会像整车碰撞试验那样有几十个g甚至上百个g的剧烈冲击,但它的加速度变化仍然非常快,完整过程往往只有几十到一百多毫秒。要在这么短的时间内捕捉到加速度从正常振动水平冲高数倍甚至十倍以上的突变,对采样率、量程和记录方式的要求,跟平时做姿态解算是完全两码事。
传统方案不是没有,但在这个场景下都别扭。专业碰撞测试用的压电式加速度计,量程大、采样率高,但需要配套昂贵的同步数据采集仪,传感器本体和线缆的安装也极其讲究,动不动要打胶、焊接、做屏蔽。车载CAN总线上的信号记录仪倒是便宜,但它拿到的是ECU处理后的数据,不是原始的加速度波形,时间分辨率也远远不够。手机方案更不用说,内置传感器的量程和采样率决定了它只能“大概感受”到碰撞,做不了定量分析。所以当时我的判断很明确:需要一个体积小、方便安装、有足够量程和采样率、最好还不用拉线的传感器,再加上一套能自动抓取碰撞时刻的数据采集方案。
1.2 为什么是WT9011DCL-BT50而不是传统方案
选型的时候,我主要从五个维度去比:成本、量程、采样率、安装复杂度、数据输出方式。市面上能满足“汽车碰撞加速度检测”最核心需求的方案大概有三种,我拉了个对比表。
| 方案 | 单点成本 | 加速度量程 | 最高采样率 | 安装复杂度 | 数据输出 |
|---|---|---|---|---|---|
| 专业碰撞测试加速度计(压电式/压阻式) | 数千到数万元 | ±50g~±200g | 10kHz以上 | 高,需要专用粘接、线缆、同步采集仪 | 有线模拟/数字 |
| 工业MEMS加速度计+独立采集卡 | 数百到数千元 | ±16g~±200g可选 | 1kHz~10kHz | 中,需要接线和采集仪 | 有线SPI/I2C/以太网 |
| WT9011DCL-BT50 | 百元级 | 出厂±16g(可配置) | 按官方手册可配置到较高帧率 | 低,单点粘贴或夹具固定,蓝牙无线 | BLE无线 |
单看每一项,WT9011DCL-BT50都不是最强的那个,但它是综合匹配度最高的。这个型号自带三轴加速度计和三轴陀螺仪,量程覆盖低速碰撞场景,蓝牙5.0输出,内置姿态融合算法,静止的时候可以直接读出欧拉角来判断传感器装没装歪,这对现场安装调试太方便了。体积和重量也友好,一个几十克的小盒子贴在车身结构件上,基本不影响原车状态。
更重要的是它的可编程能力。官方SDK能配置输出频率、量程档位、输出内容,这意味着我可以根据自己的项目需求,把传感器调整成“适合碰撞采集”的状态。这不是一个开箱即用的碰撞测试仪,但它给了足够的底层自由度,让我能用工程手段把它改造成一个小型碰撞事件记录单元。折腾了两个月之后,这套方案算是完整跑通了,后面把选型、安装、通信、数据处理的整个过程和踩过的坑都记录下来。
2. 传感器选型背后的几个硬指标
2.1 量程是第一个要算清楚的账
碰撞检测最容易犯的错误,就是一上来直接选大量程。实际上量程和分辨率是互斥的,量程越大,每个LSB对应的加速度值越大,测量精度就越低。WT9011DCL-BT50的加速度量程档位大概有±2g、±4g、±8g、±16g这几档,出厂默认不一定是±16g,所以拿到手第一步就是确认配置。
那低速碰撞到底会产生多少个g?我根据实际测试和经验数据粗略估算过:
- 5km/h左右的保险杠轻度碰擦,车身纵梁位置的减速度峰值大约在3g~8g;
- 10km/h~15km/h的追尾碰撞,峰值通常能到10g~20g;
- 30km/h级别的刚性碰撞,峰值可能摸到25g~30g,但这个量级已经不是低速碰撞了。
所以对这个项目来说,±16g是必须的。如果传感器被错误地配置在±8g档,15km/h碰撞时波形就削顶了,峰值丢失,后面的积分计算完全没法做。
顺带算一下分辨率。16bit有符号数,满量程±16g对应32768,那么每个LSD就是16÷32768,约0.49mg。这个精度对碰撞检测已经绰绰有余了,因为碰撞加速度信号的特征值都是g级别的,1mg以内的分辨率完全不影响峰值提取、ΔV积分这些核心计算。如果追求更高的分辨率而去选±2g档,那测得稍微激烈一点的碰撞就直接超量程了。在碰撞场景里,“测不到”比“测不准”更可怕,量程匹配是第一优先级。
2.2 采样率与无线带宽的匹配
量程解决了“能不能测到”的问题,采样率解决的是“能不能测出形状”的问题。碰撞加速度波形不是一条干净的直线,它包含不同频率的成分。参考行业内对碰撞试验数据的滤波分类,车体结构响应的典型频率范围一般在几十赫兹到几百赫兹之间,乘员保护相关的通道通常关注到180Hz以上,车体结构通道甚至关注到600Hz。对低速碰撞来说,真正有价值的信息基本集中在200Hz以内。
按照奈奎斯特采样定理,采样率至少要是信号最高频率的两倍才能恢复波形。但实际做工程我不会卡着两倍去选,最终在WT9011DCL-BT50上配置的是约500Hz的帧率。这个选择有两个原因:一是低速碰撞的有用信号不超过200Hz,500Hz采样留出了足够的裕量;二是在蓝牙BLE链路上,采样率越高,每秒钟需要传输的数据量就越大,丢帧风险也直线上升。
这里可以简单算一笔账。一帧三轴加速度数据如果用int16表示,再加上温度、状态、时间戳等字段,大约十几字节。500Hz就是每秒七八字节乘以500,大概8KB/s左右的吞吐量。BLE虽然理论带宽有2Mbps,但实际有效吞吐率受连接间隔、MTU大小、协议开销影响,并不会像串口那样稳定。所以我在实际项目中遇到过采样率配置过高之后,蓝牙链路完全吃不消、数据大面积丢失的情况。后来把连接参数调短、MTU调大,再把帧率限制在500Hz,才算稳定下来。对于低速碰撞检测,这个帧率足够,没必要盲目追高。
2.3 安装方向与坐标系的“前装备”
传感器装在车上的姿势,决定了数据后处理要做多少额外工作。WT9011DCL-BT50内部用的是右手坐标系,X、Y、Z三轴方向印在外壳上,而车体坐标系一般习惯定义为车辆前进方向为X正轴、左侧为Y正轴、垂直向上为Z正轴。如果传感器不是严格按这个方向安装的,测出来的X/Y/Z分量和车体坐标就对不上,后面分析纵向碰撞还是横向碰撞时,投影转换会非常痛苦。
我的做法是安装前先规划好每个测点的朝向,尽量让传感器的X轴对准车辆前进方向,Z轴朝上。装完之后立刻通过蓝牙连接读取一次静态欧拉角,记录初始安装姿态。如果偏差小于5度,可以直接忽略;如果偏差较大,就保存这个初始角度,在后处理时用旋转矩阵把数据变换回车体坐标系。
安装位置同样有讲究。碰撞加速度检测最怕把传感器装在容易局部变形或者柔性连接的地方。塑料保险杠蒙皮、可溃缩吸能盒外侧、薄板金件上都不合适,那里测到的更多是局部结构的变形和振动,不是车体的真实冲击响应。实际项目里我主要装在B柱根部、门槛梁、后纵梁这些刚度较大的位置。这些地方在碰撞时能相对真实地传递车体减速度信号。固定方式上,打磨掉漆层和油污之后,用环氧树脂胶或者金属支架刚性连接,绝对不能用双面胶、磁吸座这类柔性或者半柔性固定方式,这一点后面专门讲,它直接决定数据可信度。
3. 实战:数据采集系统的搭建过程
3.1 硬件连接与供电方案
硬件部分比想象中简单,但供电问题差点翻车。单台WT9011DCL-BT50自带电池,续航在低功耗姿态监测场景下没问题,但碰撞检测要长时间待机、随时可能连续记录多组事件,内置电池坚持不了太久,而且碰撞冲击可能导致电池接触瞬间断开。所以我的方案是每辆车用一路12V转5V的稳压电源,专门给传感器供电,不跟车载屏幕、行车记录仪共用,避免其他设备启停时拉低电压。
电源回路里我额外串了一个防反接二极管和一个470μF的电解电容。防反接纯粹是保护传感器,因为现场布线的人不一定是同一个人,插反一次就可能烧板子。电容的作用更关键:碰撞瞬间车辆线束可能因为冲击而瞬间接触不良,电容能维持几十毫秒的供电,防止传感器在关键时刻突然重启。实测中这个电容确实救了一次数据,那次恰好是电瓶桩头松动导致的接触瞬断,换做直接供电,整段碰撞波形就丢了。
传感器布局方面,一辆车装三个测点:车头前纵梁附近一个,B柱根部一个,车尾后纵梁附近一个。每台终端通过蓝牙同时连接这三个传感器,组成一个简单的星型拓扑。理论上BLE蓝牙中心设备连接的从机数量是有限制的,实测这台平板挂3个传感器比较稳定,再多容易互相干扰。如果以后要扩展到更多测点,建议用多个采集终端分担,而不是让一台设备硬扛。
3.2 蓝牙通信配置与数据解析
蓝牙连接的建立流程不复杂,但有几个细节直接决定数据完整性。首先扫描到设备之后,连接成功后要主动请求一个更大的MTU,默认23字节的MTU一次只能传极少的数据,开大之后单次通知能承载更多帧数据,有效降低丢帧率。然后找到ID为FFE0的服务,使能其中的FFE1特征值的notify,数据就会源源不断地推过来。配置参数的量程、输出频率、输出内容等功能,一般写在FFE2特征值里,具体协议要参考官方手册。
数据解析这块是新手最容易写错的地方。蓝牙notify回调里拿到的byte数组,可能包含半帧、一帧或者多帧数据,不能想当然地认为一次回调就是一帧。我的解析逻辑是:先找帧头0x55,找到之后按固定帧长去切片,如果剩余字节数不够完整帧,就留在缓冲区等下一包到来再拼接。下面这段是Kotlin环境下的核心示意代码:
private fun parseAccData(data: ByteArray): List<AccFrame> { val frames = mutableListOf<AccFrame>() var offset = 0 while (offset + 11 <= data.size) { if (data[offset] != 0x55.toByte()) { offset++ continue } // 帧类型判断,0x51表示加速度帧,这里以官方协议为准 val type = data[offset + 1] if (type != 0x51.toByte()) { offset += 11 continue } // 加速度低位在前,高位在后,拼接成16位有符号数 val axRaw = ((data[offset + 4].toInt() shl 8) or (data[offset + 3].toInt() and 0xFF)).toShort() val ayRaw = ((data[offset + 6].toInt() shl 8) or (data[offset + 5].toInt() and 0xFF)).toShort() val azRaw = ((data[offset + 8].toInt() shl 8) or (data[offset + 7].toInt() and 0xFF)).toShort() val axG = axRaw / 32768.0f * 16.0f val ayG = ayRaw / 32768.0f * 16.0f val azG = azRaw / 32768.0f * 16.0f frames.add(AccFrame(axG, ayG, azG)) offset += 11 } return frames }这段代码里最关键的一点是大小端转换和帧头对齐。BLE传出来的原始数据都是字节流,协议里低位在前,如果不做转换直接按大端解析,加速度数值必然是错的。我当时第一次解析出来的X轴加速度一直在奇怪地抖动,排查了半天才发现是高低位拼反了。
notify回调里还有一个铁律:不能做任何耗时操作。蓝牙回调是高频触发的,如果在这里面执行写文件、打日志、数据库操作,轻则丢帧,重则阻塞蓝牙协议栈导致系统断连。我的做法是在回调里只做解析和入队,把数据放进一个环形缓冲队列,单独的存储线程负责从队列里批量取出数据落盘。队列用有界队列,满了就把最旧的数据丢弃,保证内存不膨胀。
3.3 碰撞事件自动触发与记录策略
碰撞发生在一瞬间,靠人工盯着实时曲线去发现几乎不可能,所以采集程序必须能自动识别碰撞并保留完整波形。这里采用工业数据采集里常用的“预触发”模式,思路很简单:平时只保留最近一段时间的数据,一旦检测到碰撞触发条件成立,就把触发前的一段数据和触发后的一段数据一起保存下来。
核心就是一块环形缓冲。程序里固定分配一块能容纳2秒数据的缓冲区,新数据不断写入覆盖最旧的数据。触发发生后,先取出缓冲区里已有的数据作为碰撞前记录,同时继续采集2秒,这样最终落盘的波形就包含了“碰撞前1秒+碰撞后2秒”的完整信息。触发前数据非常重要,因为计算ΔV、扣除加速度零漂都需要碰撞前的信号作为基线。
触发条件不能只看瞬时值超过阈值就触发,那样误报率会非常高。我在第一版程序里只设了一个1.5g的合成加速度阈值,结果测试车过减速带也触发、大力关车门也触发,根本没法用。后来改成“阈值+持续时间”的双重判定:
THRESHOLD = 1.5 # 合成加速度阈值,单位g DURATION_MS = 5 # 连续超过阈值的时间 def collision_trigger(samples, fs=500): over_count = 0 for i, s in enumerate(samples): # 合成加速度,把三轴分量换算成矢量模 mag = (s.ax ** 2 + s.ay ** 2 + s.az ** 2) ** 0.5 if mag > THRESHOLD: over_count += 1 if over_count >= int(DURATION_MS / 1000 * fs): return True, i else: over_count = 0 return False, -1阈值怎么定?不能拍脑袋,我花了小半天时间采集了一段正常行驶和操作车辆时的数据。先统计正常场景下合成加速度的最大值,比如过减速带大概是1.1g,大力关车门是1.8g但持续时间极短,然后再把阈值定在正常值的3到5倍,同时用持续时间筛掉短促冲击。这样一套组合拳下来,误报率从最初的每天十几次降到了平均两三天一次。
4. 碰撞加速度数据的后处理与分析
4.1 看懂原始波形:信号特征与滤波选择
碰撞波形看起来是什么样子?以低速追尾为例,加速度时间曲线通常不是一个光滑的尖峰,而是叠加了大量高频毛刺的复杂波形。之所以有毛刺,一方面是车辆碰撞过程中本身存在结构件的局部振动,另一方面是传感器安装方式带来的谐振。这两个来源都不是车体整体减速度的真实反映,但它们的幅度有时比真实信号还大,直接干扰分析。
我在刚开始处理数据时,看到原始波形第一反应是“完了,传感器坏了”。因为波峰值比理论值高了不少,而且看起来很不平滑。后来才意识到,原始加速度信号里混着大量高频分量,必须先滤波再做特征提取。滤波的关键是选截止频率和相位响应。碰撞波形最怕相位失真,相位偏移会把波峰的位置移动几十毫秒,直接影响后续的时间对齐。
所以我在后处理里用的是零相位滤波,也就是正向滤波一次、反向再滤波一次,这样相位偏移被抵消,波形形状基本保持原样。参数上,经过多组数据对比,我最终选了4阶巴特沃斯低通滤波器、截止频率200Hz、采样率500Hz:
import numpy as np from scipy.signal import butter, filtfilt def butter_lowpass(data, cutoff, fs, order=4): nyq = 0.5 * fs normal_cutoff = cutoff / nyq b, a = butter(order, normal_cutoff, btype='low') return filtfilt(b, a, data) fs = 500 raw_data = np.loadtxt('collision_acc_x.csv') filtered = butter_lowpass(raw_data, cutoff=200, fs=fs)滤波前后的对比非常明显。滤波前,碰撞波峰周围全是密密麻麻的高频毛刺,峰值的最大值比滤波后高了大概20%;滤波后,波形变得干净平滑,主峰的幅度和位置都清晰可辨。要注意的是,滤波只能在数据采集完成之后做,不能指望传感器端硬滤波,因为传感器内部的滤波参数不可控、实时性要求又不允许我们做高保真处理。
4.2 严重程度评估:为什么不能只看峰值
很多人拿到碰撞数据,第一反应就是看峰值加速度,比如“这次撞了12个g”。但峰值这个东西在实际工程里并不靠谱。同一辆同一次碰撞,传感器贴在B柱和贴在发动机纵梁上测到的峰值可能差出好几倍。峰值对局部共振、安装刚度、传感器自身谐振极其敏感,是一个稳定性较差的指标。
更稳定、也更有物理意义的是速度变化量ΔV,也就是对加速度在碰撞持续时间内做积分。ΔV反映的是碰撞过程中车辆整体速度的变化,它对应着碰撞前后车辆动量的变化量,受局部振动影响小得多。行业里判断碰撞严重程度也经常用ΔV作为分层指标。
计算ΔV之前,必须先扣除零漂。传感器内部存在零偏,静止时输出并不严格是0,如果直接用原始数据积分,误差会被积分过程不断放大。我的处理方法是取碰撞触发前0.5秒内的平均加速度作为偏置,然后从整个碰撞区间里减去这个偏置再积分:
base = np.mean(filtered[int(0.2 * fs):int(0.5 * fs)]) corrected = filtered - base # 碰撞区间截取,假设碰撞起始点为t_start,结束点为t_end start_idx = int(t_start * fs) end_idx = int(t_end * fs) delta_v = np.trapz(corrected[start_idx:end_idx], dx=1.0 / fs) print(f"ΔV = {delta_v:.2f} m/s = {delta_v * 3.6:.1f} km/h")实践下来,用ΔV做碰撞严重程度分级非常有效。我这边大概分了三个层次:ΔV小于2m/s的算轻微碰擦,这类碰撞对乘客几乎没有影响;2m/s到5m/s属于中等碰撞,需要检查车辆结构;超过5m/s就需要仔细排查车身变形和安全系统状态了。对比峰值指标,ΔV在多次重复碰撞实验中的稳定性好了很多。
4.3 多传感器同步的朴素解法
多测点采集面临一个头疼的问题:多个WT9011DCL-BT50之间的时间不同步。BLE传感器不像有线采集系统那样有统一的同步时钟,每个传感器都是独立上电、独立计数,各走各的时间。碰撞持续100毫秒级别,如果传感器之间时间偏差超过几十毫秒,把三个测点的波形放在一起比较就完全没意义了。
认真查过方案,无线同步本质上很困难,要么用带PPS等硬件同步接口的高端设备,要么用专门的同步算法。这个项目预算有限,我用的是一种很朴素的解法:现场强制对齐。每次测试开始前,找一个金属扳手在车体的某个刚性位置用力敲一下,所有传感器同时记录这段冲击信号。由于每个传感器的时钟频率是相对稳定的,敲击产生的冲击波形在每个通道上都会出现一个明显的尖峰,后处理时找到这个尖峰的位置,就能算出各传感器相对参考通道的时间偏移。
多通道对齐的自动化可以用互相关实现,简单说就是滑动一个信号,找到它与参考信号最相似的位置,那个位置就是时间延迟:
from scipy.signal import correlate # sig_ref是参考通道信号,sig_meas是待对齐信号 corr = correlate(sig_ref, sig_meas, mode='full') delay = np.argmax(corr) - (len(sig_ref) - 1) # delay > 0 表示待对齐信号滞后了delay个采样点用这个方法做完对齐之后,三个测点的碰撞波形在前沿和峰值位置上能较好地吻合。当然这个方案也有局限,它假设在采集窗口内传感器时钟漂移不大。实测下来,500Hz采样下短时间采集的时钟漂移很小,对齐后的同步误差基本在几个毫秒以内,对低速碰撞分析完全够用。
5. 现场踩坑实录与排查心得
5.1 蓝牙断连和数据丢帧,把锅甩给系统没用
现场跑数据时遇到最多的问题,不是传感器本身,而是蓝牙连接的稳定性。一开始用普通Android手机当采集终端,屏幕一锁,程序后台运行一会儿蓝牙就断了;后来换平板,也遇到过开屏状态下连接偶发断开的情况。查了一圈,问题出在系统省电策略和BLE连接参数上。
手机锁屏断连,原因是系统在休眠后停止扫描、挂起蓝牙GATT连接,解决方法是把采集程序做成前台服务,获取PARTIAL_WAKE_LOCK让CPU保持运行,同时提高BLE连接优先级、请求更短的连接间隔。代码层面还要重写onConnectionStateChange回调,实现断开后自动重连,并且保留现场数据不丢。
数据丢帧则是另一个根源。BLE的notify通知是有频率上限的,连接间隔长短决定了单位时间内能传多少数据。我当初把连接间隔保持默认值,500Hz数据量一上来就开始丢帧,表现为波形上出现缺口。解决方法是主动请求更短的连接间隔和更大的MTU。Android端可以用requestConnectionPriority高优先级来缩短连接间隔,同时通过requestMtu把MTU从默认的23拉大到185左右,单次通知能承载的数据量大了,协议开销占比降下来,丢帧情况明显改善。
这里要说一句,调试蓝牙问题千万不要只盯着代码层,用一款BLE调试工具把实际连接参数和数据流量显示出来,一目了然。我看到连接间隔从30ms降到7.5ms之后,丢帧率从千分之几直接降到接近零。
5.2 安装共振导致的数据失真
这是项目里踩得最深的一个坑。最开始为了图省事,我直接把3M VHB双面胶把传感器贴在试车员座椅下方的地板位置,低速碰撞测试测出来的波形峰值高得离谱,而且高频振荡特别重。当时第一反应是传感器量程不够或者蓝牙传输出问题了,排查了半天硬件,最后才发现是安装方式的问题。
双面胶本质上是柔软的高分子材料,传感器和车体之间等于隔了一层“弹簧垫圈”。碰撞时,弹簧质量系统被激起高频共振,传感器的加速度输出里包含了大量谐振分量,这些分量的频率往往在几百赫兹甚至上千赫兹,幅度还特别大。这个共振不是车体的真实响应,它测到的是“传感器自己在这个安装条件下的响应”。
解决办法有两步。第一步是物理上消除共振源,打磨掉安装点的漆层,用环氧树脂胶或者金属夹具把传感器壳体刚性固定到车体结构件上。我当时在一个测点上试过改回刚性固定,同一个碰撞条件下,高频振荡幅度下降了至少一半。第二步是数据后处理时用200Hz低通滤波,把可能残留的谐振成分进一步压制。改完之后波形干净很多,峰值也回到合理的理论范围内。这里提醒所有做碰撞检测的朋友,传感器安装刚性的优先级高于一切,柔性安装下的数据无论算法怎么做都不干净。
5.3 误触发问题的一次完整排查
误触发是碰撞触发记录最烦的问题。在没有碰撞的普通工况下,系统频繁进入记录状态,既浪费存储空间,也会让后面的数据筛选变得困难。我遇到过的误触发来源主要有三类:过减速带、大力关车门、颠簸路面连续跳动。
这三类误触发分别对应不同的信号特征。过减速带和颠簸路面引起的加速度冲击主要在垂直方向,也就是Z轴分量过大;大力关门则是短促的高频冲击,持续时间往往只有几毫秒,但峰值能到2g左右。真实碰撞更多的是纵向或横向的持续冲击,比如追尾主要体现为X轴减速度增大、持续时间几十毫秒。
针对这个特征,我把触发逻辑从“只看合成加速度”升级成“方向分轴判定+持续时长+事后确认”三重判断。第一重,只统计X轴和Y轴方向的加速度分量,Z轴方向基本不参与触发判断,这一下就排除了过减速带和颠簸路面的大部分误报。第二重,保留“连续超过阈值5毫秒以上”的持续时间条件。第三重,触发记录完成后,自动计算碰撞时间窗内的ΔV,如果ΔV小于2km/h就标记为疑似误报,不进入正式碰撞事件列表。
| 误触发场景 | 主要轴向 | 持续时间特征 | 解决办法 |
|---|---|---|---|
| 过减速带 | Z轴 | 几十毫秒 | 触发判断排除Z轴 |
| 大力关车门 | 多轴高频 | 几毫秒 | 增加最短持续时长判定 |
| 颠簸路面 | Z轴为主 | 连续随机 | Z轴排除+ΔV事后确认 |
经过这三重过滤,系统在实际运行一周里记录了二十多条事件,人工查验下来只有两条是误报,其中一条是车辆维修时被举升机顶起时的小幅晃动。整体准确率已经达到工程可用级别。误触发问题说到底还是一个“信号特征建模”问题,把真实碰撞和常见干扰在时域上的区别识别清楚,触发逻辑自然就能写精确。
最后再分享一点个人体会。这套以WT9011DCL-BT50为核心的碰撞加速度检测方案,硬件成本很低,工程难度却一点也不小。它不是那种拿来即用的专业碰撞仪器,量程、同步机制、安装要求都有天生的局限,但只要把传感器装牢、量程和采样率配好、触发逻辑和下位机通信理顺,它完全可以胜任低速碰撞事件监测这类工作。后续我打算在里面接入一路GPS数据,把碰撞时的车速叠加进分析模型里,再用前面的多传感器波形做碰撞类型分类。如果你们也打算走这条路线,我的建议是先把基础数据质量抓扎实,传感器固定、时间同步、数据不丢这三点做到了,再往上层加算法,否则后面全是在错误数据上做文章。