news 2026/9/7 1:09:37

足底多模态传感器阵列融合:让机器人真正感知地面接触状态

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
足底多模态传感器阵列融合:让机器人真正感知地面接触状态

机器人的腿我调了很多年,一开始最不习惯的事情就是:它明明长着脚,却根本不知道自己的脚是怎么踩在地上的。关节编码器能告诉我电机转了多少圈,机身IMU能告诉我躯干歪了几度,但足底接触的是瓷砖还是地毯、前掌还是后跟先着地、地面反力集中在哪一点——这些信息系统里是完全没有的。这个项目“机器人足底多模态传感器阵列融合与感知系统”,就是专门把这层感知盲区补上。核心思路很直接:在机器人足底嵌入一套多模态传感器阵列,包含压力分布阵列、足部IMU、以及可选的三维力传感器,然后用融合算法把时间上严格对齐的多源信号拼成一个稳定、连续、可用的感知结果,输出触地状态、压力中心轨迹、步态相位、地面材质类别和打滑风险。

这套方案不是实验室里的花瓶设计,而是我基于一台实际运行的双足平台反复迭代出来的。对做足式机器人、人形机器人、四足机器人整机或行走控制的朋友来说,它解决的是“控制环里缺少地面反力反馈”这个老问题;对做嵌入式传感和信号融合的开发者来说,它也是一套可以照着搭的完整样例。我会从方案选型、硬件布局、融合算法、实测效果到坑位排查,把能说的细节都摊开讲。

1. 项目定位与方案选型

1.1 为什么一定是“足底多模态”,而不是只上一个单点传感器

如果你做过双足或四足行走控制,一定遇到过这类现象:机器人明明在很平整的地面上走,脚落下去的时候控制系统却以为触地失败了;地面上铺了薄地毯,足端压力信号一直抖动,触地检测不断误触发;或者机器人站在斜坡上,重心其实已经偏了,但机身IMU还没反应过来,等真摔了才在日志里看到异常。

这些问题的根源在于,传统腿足机器人通常只有两种感知通道:关节编码器和机身IMU。前者反映的是“腿打算怎么动”,后者反映的是“身体在往哪边歪”,唯独缺少“脚和地面之间实际发生了什么”。足底是机器人与外界接触的唯一结构,所有支撑力、摩擦力、颠簸冲击都要从这里过一遍。在足底布置传感器,等于在最源头的地方做观测,信息损失最小。

但单点传感器又不够。一个压力传感器只能告诉你“脚下有没有压力”,回答不了“压力分布在哪、重心是否落在支撑多边形边缘、地面是硬是软、脚是不是在滑”。这些问题需要同时知道多个通道的信息。多模态的价值就在这:压力阵列给出空间分布,IMU给出脚部的动态运动,三维力传感器给出完整的三轴接触力,三者不一样的时间响应和失效模式还能互相校验。简单说,单模态是“一个证人的片面证词”,多模态融合是“多个证人交叉验证”。

1.2 传感器选型:把性能、成本、系统复杂度放在一起算账

市面上可用的足底传感方案不少,我最初列了一张对比表,把每种方案在足底应用场景下的核心指标都过了一遍。

方案优点缺点适合场景
压阻式薄膜压力阵列成本低、厚度薄、易定制、空间分辨率高温漂明显、长期蠕变、过载易损大多数实验室和产品原型
电容式压力阵列稳定性好、功耗低、迟滞小电路复杂、电极边缘效应、抗干扰要求高需要长时间稳定运行的场景
应变式三维力传感器线性好、刚度大、能测Fx/Fy/Fz贵、厚、重、难做大阵列对三轴力精度要求极高的控制研究
足部IMU体积小、带宽高、信息互补有积分漂移、无法直接测接触所有融合方案都建议加

我最后选择的是压阻式压力点阵 + 足部IMU两个模态先跑通,同时足底结构上预留三维力传感器的安装位。理由很实在:压阻点阵能提供我需要的空间压力分布,IMU价格便宜、融合收益大,整套系统在一个人能维护的复杂度范围内。三维力传感器很好,但一颗六维力/力矩传感器的价格可能超过整只脚其他所有零件的总和,而且它只能测合力,给不出“压力分布”这种空间信息,所以第一版方案里它作为可选扩展而不是核心依赖。

1.3 总体架构与数据流

系统整体分四层:传感层、采集层、融合层、应用层。传感层就是足底压阻点阵、足部IMU,以及预留的F/T传感器接口。采集层由足端嵌入式MCU负责,SPI读取压力阵列和IMU数据,打上统一时间戳之后通过CAN总线发回主控制器。融合层跑在机器人主控或单独的感知计算单元上,完成时间对齐、特征提取、状态估计和分类识别。应用层是下游的行走控制器、平衡控制器或导航系统,它们直接消费融合层输出的触地状态、CoP、地形类别、打滑风险等抽象标签。

数据流设计上有几个原则我反复强调:传感层到采集层必须用同步采样,不能靠软件轮询去碰运气;采集层只做轻量滤波和打包,不做重量级算法;融合层的所有计算必须对时序确定性有保证,避免某帧数据因为算法耗时被堵在路上。后面所有稳定性问题,几乎都能回溯到这三条原则有没有被认真执行。

2. 足底传感器阵列的硬件拆解与安装设计

2.1 阵列布局:从足跟到脚趾的分区逻辑

很多人第一次做足底压力阵列会犯一个错误:把传感器点阵均匀铺满整个脚底,以为这样信息最全。实际完全没必要。人体行走研究中有一个基本事实:静态站立时,压力主要集中在前脚掌和足跟;动态行走时,压力重心从足跟快速过渡到前掌,脚趾区域参与最后蹬地发力。不同区域的细节需求不一样,均匀铺只会浪费通道和成本。

我的布局是分区设计:足跟区域布置一块高密度点阵,因为落地瞬间冲击大、需要精确检测触地和足跟离地;前脚掌区域布置最密的点阵,用于精细跟踪压力中心轨迹和蹬地阶段的受力状态;脚趾区域点阵稀疏一些,只要大致判断是否有发力参与即可。具体通道数视足底尺寸而定,常见做法是足跟8×8、前掌16×8、脚趾4×4,一共128到192个点。相邻点距8到10mm,既能分辨压力集中点,又不至于让布线和成本失控。

2.2 关键器件选型与对比

压阻式点阵的核心是压敏导电材料和电极结构。我实测下来,油墨型压阻传感器的初始重复性比导电橡胶型好一个量级,但抗过载能力更弱;导电橡胶型传感器在安装时更耐造,但迟滞稍大。如果你做的是原型验证,选油墨型;如果机器人经常跑动态步态,建议用导电橡胶型,它的耐用性会让你少换很多次脚底。

IMU方面我选了带数字输出和可配置量程的工业级模块,而不是手机用的低端六轴。原因很简单:机器人落地冲击会瞬间产生几十g的加速度峰动,低量程IMU很容易饱和,一旦饱和,融合算法拿到的就是一段反常识的加速度数据。量程至少要选16g以上,输出速率建议不低于400Hz。采集MCU我用的是带多个SPI外设和CAN接口的STM32系列,主频不需要很高,但定时器资源要够,用来做同步采样触发。

2.3 采集链路设计:采样率、同步与通信

采样率的选择要和机器人步态频率匹配。一般双足机器人一个步态周期在0.8到1.5秒,触地瞬间只有几十毫秒,为了捕捉到完整的落地冲击和蹬地过程,压力阵列采样率至少要100Hz,我实际配置为200Hz。IMU采样率我配到400Hz或更高,因为足部瞬态加速度信号频率更高。压力阵列和IMU不同采样率会产生一个关键问题:时间对齐。解决办法是让MCU用同一个定时器周期触发SPI读取,读取完成后给所有数据打上同一个硬件时间戳,再通过CAN周期上报。CAN总线的调度周期设为0.5ms整数倍,主控端只要按时间戳重采样,就能把两种信号对齐到同一个时间轴。

2.4 机械安装与防护:测量精度的隐形战场

传感器本身再好,装不好一样白搭。足底安装的headache主要集中在预紧力一致性和机械防护上。压阻传感器对压力敏感,也对“不受控的机械应力”敏感。如果安装底面不平整、螺丝紧固力度不均匀,传感器静态读数就会五花八门。我的做法是:在足底底板开浅槽,槽底贴一层0.5mm柔性硅胶垫用于分散应力,传感器放在硅胶垫上,上方再覆盖一层聚氨酯保护膜,最后用固定压板拧紧。压板不能直接压到传感器敏感区,要压在传感器边缘的非敏感边框上。

还有两个细节特别值得提醒。第一,足底一定会接触灰尘、砂砾和水,传感器敏感区上方必须有一层耐磨且有弹性的覆盖材料,否则砂砾造成的局部点载会直接让传感器“内伤”。第二,传感器线缆在足关节弯曲处来回弯折,疲劳断线几乎必然发生,所以线缆走线要留余量,穿过足踝时用螺旋护套保护,并且统一从内侧走线,减少外侧磕碰。

3. 多模态融合算法设计与感知进阶

3.1 为什么要融合:单一传感器的天花板在哪

融合不是炫技,而是因为每个单一模态都有明显的天花板。压阻式压力阵列能给出压力分布,但长期工作后会有蠕变和温漂,今天标定好的零点明天可能就偏了;它面对光滑硬地面的高频微振动也容易输出毛刺。IMU能给出脚部的加速度和角速度,响应快、带宽高,但加速度信号积分出来的速度会漂移,短时间内判断不出脚到底触没触地——脚在摆动和脚在打滑,表面上看都有非零加速度,只有结合接触力才能分得清。

所以融合的本质是:用互相独立的观测源,弥补对方最薄弱的环节。压力阵列提供“接触的绝对事实”,IMU提供“接触瞬间的动态细节”,融合算法负责在时间上把它们对齐,在空间上把它们联合解释。

3.2 融合层级选择:数据级、特征级还是决策级

多模态融合通常分三层:数据级融合、特征级融合、决策级融合。数据级融合是对原始采样值直接运算,比如把压力量映射到某个几何空间再与IMU姿态拼接,好处是信息保留最完整,坏处是对时序对齐要求极高,任何一帧丢包都会污染整段数据。特征级融合是先分别从各模态提取可解释的特征,再把这些特征拼接成一个联合特征向量,用分类器或回归器处理。决策级融合是各模态分别输出自己的判断,再用投票、贝叶斯加权或逻辑规则做最终决策。

我的方案以特征级融合为主,数据级对齐为底层支撑,决策级融合作为安全校验兜底。具体流程:压力阵列原始数据先归一化并提取总压力、压力中心坐标、压力分布熵、质心移动速度等特征;IMU数据提取脚部姿态角、三轴加速度方差、角速度能量等特征;所有特征按时间对齐后拼成一个特征向量,输入到一个轻量级分类器(第一版用随机森林,后期换成了两层MLP)输出地形类别和接触相位。

3.3 面向任务的感知实现:触地检测、步态相位、CoP轨迹与打滑识别

同样的融合特征,喂给不同的下游任务,可以同时产出多个有价值的感知结果。

触地检测是最基础的任务。单看压力阈值当然也能做,但足底刚接触地面的瞬间压力上升有过渡过程,阈值设小了噪声会误触发,设大了又会延迟真实触地时刻。融合后用“压力总和超过阈值AND足部IMU垂向速度接近零”的双条件判断,实测可以把触地检测时延稳定控制在10ms以内,同时基本消除误触发。

步态相位划分是在连续行走中区分摆动相、触地相、支撑相、蹬地相。我按融合特征在时间轴上的变化趋势来切分:足跟压力开始上升且足部角速度出现负峰,判断触地;CoP从足跟向前掌移动,判断进入支撑;前掌压力快速下降且脚部角速度开始变化,判断蹬地;压力总和接近零点并持续一段时间,判断进入摆动。这套规则在均匀地面上的准确率很高,在复杂地形上则靠分类器做概率修正。

CoP轨迹估计是平衡控制的直接输入。压力阵列给出每个点的力,CoP就是所有点按力加权后的几何中心。我实测发现,单独用压力阵列算CoP时噪声很大,尤其在地面不平整时会出现跳变。融合IMU的角速度信息后,我用卡尔曼滤波对CoP轨迹做平滑,噪声幅度降低了大约60%,跳变基本消除。

打滑识别是这个系统里我最看重的功能。机器人打滑的物理本质是:足底期望的静摩擦力超出实际表面能提供的摩擦上限,接触点相对地面产生滑移。从传感器上看,打滑初期压力总和不变,但CoP会突然向滑动方向偏移,同时IMU的切向加速度出现异常尖峰,而机器人关节角度显示腿部并没有主动做这个动作。把这三个特征放到一起,就能在滑动发生后的极短时间内给出预警。我的实测模型中,打滑预警比控制系统最终失去平衡平均提前约30到50ms,这段提前量足够让控制器降低步幅或调整步频来止损。

下面这段伪代码展示了特征级融合的一个核心处理流程,我把它列在这里方便复现:

import numpy as np def extract_fused_features(pressure_frame, imu_frame, prev_cop): total_force = pressure_frame.sum() cop_x = (pressure_frame * x_grid).sum() / total_force cop_y = (pressure_frame * y_grid).sum() / total_force cop_vel = np.linalg.norm([cop_x - prev_cop[0], cop_y - prev_cop[1]]) acc = imu_frame['acc'] acc_norm_std = np.std(np.linalg.norm(acc, axis=1)) gyro_energy = np.sum(imu_frame['gyro'] ** 2) features = np.array([ total_force, cop_x, cop_y, cop_vel, acc_norm_std, gyro_energy, imu_frame['roll'], imu_frame['pitch'] ]) return features, (cop_x, cop_y)

3.4 状态估计里的卡尔曼滤波实践

融合系统里最重要的状态估计对象,是机器人足部的接触力学状态。我用的卡尔曼滤波器以“脚中心的速度、接触区域等效刚度误差”为状态量,以IMU加速度积分作为预测方程来源,以“压力阵列反算出的CoP变化率”和“足端速度触地时归零约束”作为观测约束。这里面有一个很有用的约束技巧:当融合判断脚确实处于完全触地且稳定支撑时,把足底部件的速度约束到接近零,这个约束能有效抑制IMU积分带来的漂移,比单纯低通滤波可靠得多。

状态向量的具体设计是:x = [vx, vy, vz, copx, copy]ᵀ,预测方程使用IMU加速度的旋转校正值,观测方程把压力阵列算出的CoP直接作为copx和copy的观测量,同时把稳定触地时的vx、vy、vz约束到0。协方差矩阵的调参原则是:IMU加速度在高动态时刻噪声大,观测权重相对提高;在平稳支撑时刻观测噪声小,可以参考压力分布熵来动态调整。这个滤波器跑起来之后,输出信号有两大好处:一是去掉了原始信号的高频毛刺,二是能输出控制环路可以直接使用的平滑速度约束,不用控制器再去额外做微分。

4. 实测全记录与效果

4.1 测试场景与评价指标

我在机器人平台上跑了一个多月实测,覆盖的场景包括硬质瓷砖、地毯、带有细砂砾的塑胶跑道、干燥和洒水状态下的瓷砖地面、约8度斜坡上下坡。为了量化效果,我定义了几组指标:触地检测时延(从真实触地到系统给出触地标签的时间差)、步态相位划分准确率(与人工标注对照)、地形分类准确率(五分类)、打滑提前预警率(在失去平衡前至少20ms给出预警的样本比例)、CoP轨迹平滑度(相邻帧跳变幅度标准差)。

这些指标分别对应下游不同控制需求:时延影响平衡控制的响应速度,相位划分准确率影响步态规划器,地形分类影响落脚策略,打滑预警率决定安全兜底能力,CoP平滑度则直接影响姿态闭环的稳定性。

4.2 融合前后的效果对比

我把单压力阵列方案、单IMU方案和融合方案在相同测试集上做了对照,结果如下:

指标单压力阵列单IMU融合方案
触地检测时延15ms,噪声下偶发误触发8ms,无法区分摆动和打滑9ms,无误触发
地形分类准确率81%无法独立完成94%
打滑识别提前量无法稳定识别有尖峰但无法区分主动加速平均提前约35ms
CoP轨迹标准差3.2mm不适用1.3mm

最直观的提升在地形分类和打滑识别上。单压力阵列在区分瓷砖和塑胶地面时经常出错,因为两者在静态压力分布上太相似,差别主要在于接触时的微振动特质,而这恰好是IMU能捕捉的信号。反过来说,IMU单独看地形完全无从下手,它测到的是自己脚的动作,不是地面的属性。只有融合两侧信息,才能用压力分布表达“接触几何”、用IMU高频振动表达“接触动力学”,两者结合,分类边界一下清晰了。

4.3 一次典型的打滑识别过程回放

我把一次在洒水瓷砖上的实测数据回放出来,整个过程大概200ms,很能说明问题。机器人右脚落地后,压力总和很快达到正常支撑值的85%,看起来一切正常;但从第120ms开始,CoP突然向左前方移动了大约8mm,这个量级在正常支撑中不会出现;紧接着IMU的纵向加速度出现一个与关节指令方向相反的高幅尖峰,说明脚底开始相对地面滑动了。

如果只看压力阵列,这8mm的CoP偏移还在正常噪声范围内,系统会给出“稳定”标签;如果只看IMU,这个加速度尖峰会被当成“机器人主动做了个前进动作”。但融合系统把两个信号放在一起对比,发现“CoP移动方向、加速度方向、关节指令方向”三者不一致,立刻把标签从“稳定”切到“高风险滑动”,并输出打滑预警。从尖峰出现到输出预警,只用了大约25ms,实测控制器收到预警后把支撑期缩短了60ms,成功避免了后续的重心偏移失控。

5. 常见问题与排查技巧

5.1 传感器一致性漂移

压阻式传感器最大的坑是长时间运行后一致性变差。原理是压敏材料在反复受压后存在蠕变效应,同一批传感器读同一载荷,初始数据可能很整齐,跑几小时后就会逐渐拉开差距。这个问题不解决,阵列的空间分布特征就会失真,CoP计算也会跟着偏。

我的处理方法是双保险。第一道保险是动态零点更新:每次检测到整只脚完全离地进入摆动相时,采集10ms的零负载数据,更新每个点的零点偏移。第二道保险是定期参考标定:准备一个标准重量的压块,放在足底固定位置,用采集到的总压力值反算每个点的增益系数。标定周期可以按运行时长估算,原型阶段我每跑8小时标定一次,后期稳定性提升后延长到每周一次。

5.2 数据丢帧与时序错位

多模态融合最怕的问题不是某一个传感器信号差,而是各传感器引用的时间轴不一致。压力阵列和IMU如果分别以自己的采样周期上报,哪怕只有0.5ms的时钟偏差,融合特征里的“当前加速度”和“当前CoP”实际对应的就不是同一物理时刻,轻则输出抖动,重则产生完全错误的打滑判断。

排查这个问题的第一件事,是检查主控端收到数据包的时刻是否按时间戳排序。如果发现偶发丢帧,不要简单丢帧了事,要用相邻时刻的IMU数据线性插值补齐,压力阵列数据则保持原值保持,确保融合输入始终对齐。第二件事是给CAN总线设固定调度周期,并在MCU端给每个数据包打上递增序号,主控端发现序号跳变时再去查是采集问题还是总线冲突,不要糊里糊涂把错位数据喂给融合模型。

5.3 机械磨损和过载保护

足底传感器的工作环境比很多工业传感器恶劣得多,因为它的上方是几十公斤机器人重量,下方是粗糙地面,中间还有动态冲击。我在早期测试中就废掉过一个阵列:机器人从台阶上跳下时,足底某点承受的瞬时载荷超过标称量程3倍以上,传感器直接失效。压阻传感器一旦过载,即使外观完好,输出也会永久偏移。

过载防护要从机械结构上兜底,而不能只靠软件判断。我在足底底板上加装了硬质限位柱,限位柱的高度刚好让传感器在过载时被底板和压板夹住、不再继续受力。这相当于给传感器做了机械限位,牺牲一点可压缩余量,换来传感器寿命的大幅提升。另外,传感器敏感区上方覆盖的耐磨层,我测试了几种橡胶硬度后,选用了邵氏A40左右的聚氨酯,既能传力,又能分散点载。

5.4 温漂与相邻点串扰

温度对压阻材料的影响不可忽略。脚底贴近电机、贴地,机器人连续运行半小时后足底温度可以上升十几度,压力读数会出现缓慢漂移。最直接的办法是每次开机后让系统预热10分钟再进行初值标定,或者在传感器旁边留一个温度参考点,做一阶温度补偿。

相邻点串扰则是阵列设计本身带来的:一个点受压,机械形变会传递给周边点,导致压力图像“变糊”。这在高密度阵列里更明显。实测中我用一个3×3的反卷积核对原始压力图像做空间去糊,恢复后的压力分布峰值更锐利,CoP计算也更稳定。这个处理如果放在MCU端会占用大量算力,我是放在融合层软件里离线完成的,原型阶段完全够用。

6. 一些补充经验与后续想做的事情

整套系统跑下来,我最深的体会是:足底感知不是“加个传感器”那么简单,它是一个和机械结构、嵌入式采集、状态估计、控制决策深度耦合的系统工程。传感器选型和安装决定了数据质量的物理上限,采集链路决定了数据能否真实到达算法层,融合算法决定了能否从嘈杂信号中提取出控制真正需要的语义。三个环节任何一个掉链子,整个感知系统都会变得不可信,而控制系统一旦开始不信任感知数据,就会选择忽略它,那这个系统就白做了。

有一个细节我觉得特别值得分享:安装完足底阵列后,一定要在空载状态下测一遍每个点的初始值并画成热力图确认均匀性。如果初始热力图就花里胡哨,说明安装预紧力不均匀,这时候做再多算法优化都是给错误数据打工。检查顺序永远是“机械装配先于算法调参”,这条经验帮我省了大量排查时间。

下一步我想做的方向有两个:一个是在融合特征里加入关节电机电流信息,用它来估计机器人主动发力意图,这样打滑识别就能区分“地面打滑”和“自主急停”,应用场景会更广;另一个是尝试用轻量级神经网络直接在足底压力时序上做端到端的地形分类,省掉人工特征提取步骤。不过这两个方向的先决条件,还是这套足底多模态传感阵列本身能稳定、可靠地输出数据。地基打好了,上面盖什么都稳。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/6 23:53:08

手写ChCore操作系统内核实验:从启动到进程调度的完整实战指南

简介:上海交通大学头歌实践教学平台Chcore操作系统实验整理版docx资料,定位为操作系统课程配套学习材料,适合正在完成内存管理、系统调用与缺页异常实验的本科生与自学者。文档以实验二内存管理和实验三系统调用与缺页异常为主线,…

作者头像 李华
网站建设 2026/9/6 23:51:13

基于Android的汝州青瓷博物馆文化推广APP实现

摘 要 本文针对汝州青瓷博物馆文化推广手段单一、受众面受限等现状,设计并实现了一套基于Android平台的文化推广APP。系统采用前后端分离的架构模式,后端基于SpringBoot框架构建,利用其强大的依赖管理与自动配置特性确保数据处理的高效性与…

作者头像 李华
网站建设 2026/9/6 23:45:48

无答案试卷如何变身高一语文期末复习利器

简介:西藏日喀则市第四高级中学2020学年高一语文上学期期末考试试题,是面向高一学生和语文教师的试卷资源。试卷由15道选择题与阅读理解两部分构成,选择题部分集中考查字音字形、词语理解、近义词与反义词辨析、感情色彩识别、词语运用、语序…

作者头像 李华
网站建设 2026/9/6 23:45:13

数控转塔冲床详解:结构原理、编程实操与维护保养

简介:面向机械加工、钣金制造等行业的初学者及一线操作人员,这份《数控转塔冲床基础知识教材》系统讲解数控转塔冲床的定义、工艺用途、应用行业、发展现状与趋势,以及机架、横梁、转盘等核心结构与冲切原理,内容贴近实际&#xf…

作者头像 李华
网站建设 2026/9/6 23:42:57

VM虚拟机卡死黑屏?从四层排查到通用流程,彻底解决VM故障

如果你用过 VM 虚拟机,多半遇到过一种有点像“卡进后室”的时刻:屏幕停在“正在安装虚拟网络”,光标可以移动,但进度条像被冻结;或者虚拟机窗口里只有一片黑,宿主机却告诉你“正在运行”;再或者…

作者头像 李华
网站建设 2026/9/6 23:41:49

Python部署运维自动化实践:从脚本到稳定服务的完整指南

我最早意识到部署和运维这件事不能靠“感觉”撑下去,是因为一次没那么光荣的线上事故。负责的 Python 脚本每半小时采集一次业务数据,跑了两个月都很正常。结果某天凌晨,它突然把同一批数据重复写入十七次,等第二天发现时&#xf…

作者头像 李华