
人形机器人这两年从实验室一路走到公众视野能跑能跳能搬箱子演示视频一个比一个炸裂。但真正在一线做过整机调试的人都清楚让机器人动起来是一回事让它动得安全、动得可控、出了岔子还能自己察觉完全是另一回事。我前后参与过几个双足与轮足平台的运动控制调试最深的体会就是演示环境里跑通的动作换到真实场景里十次里有三次会因为地面摩擦变化、负载偏移或者传感器漂移而出现姿态异常严重的直接摔机。所以当我看到“RAPT人形机器人安全控制与异常检测新方法”这个题目时第一反应是——这戳到了行业里最疼的那块地方。RAPT 这套方法核心解决的是人形机器人在复杂工况下的安全控制与异常检测两个耦合问题一方面要让机器人在执行动作时始终待在一个“安全可行”的状态范围内另一方面要能实时判断自己是不是已经偏离正常、偏离了多少、该不该降级或急停。它适合谁看做机器人运动控制、整机调试、安全策略设计的工程师做强化学习策略落地、想把仿真策略迁移到真机的算法同学以及负责机器人产品安全合规的测试人员都能从中拿到可以直接参考的思路。下面我按自己理解这套方法的方式把它拆开讲透中间穿插我踩过的坑和能直接抄的参数思路。1. 整体设计思路与方案选型拆解1.1 为什么“安全控制”和“异常检测”必须一起做很多团队一开始是把这两件事分开做的控制组负责让机器人走得稳安全组负责加一层急停和限位保护。听起来分工明确实际落地时问题一大堆。最典型的是误报与漏报的拉扯——安全层用固定阈值判断机器人正常做大幅度动作时被误判为异常频繁触发降级操作员烦到直接把保护关掉反过来真出问题时阈值又太松等触发急停机器人已经快摔了。RAPT 的思路是把两者放进同一个闭环里异常检测的输出不是简单的“正常/异常”二值信号而是一个连续的风险度量这个度量直接参与控制决策控制层根据风险等级动态调整动作幅度、步态参数甚至切换安全策略。打个比方这就像开车时的ESP车身稳定系统它不是等车打滑了才介入而是实时感知轮胎附着状态在临界点之前就微调动力分配。人形机器人比车复杂得多因为它的“附着状态”随时在变支撑腿和摆动腿的角色每几百毫秒就切换一次。这种耦合设计带来的直接好处是安全约束不再是外挂的补丁而是控制律的一部分。控制器的优化目标里同时包含任务完成度和安全裕度异常检测模块提供的风险信号作为约束边界动态收缩。我实测过类似架构最大的感受是机器人动作会变得“保守但连贯”不会出现那种突然一顿一顿的急停感这对需要和人协作的场景特别重要。1.2 方案选型的三个关键取舍RAPT 在方法选型上有几个我认为很关键的取舍值得单独拎出来说。第一个取舍是用学习型方法还是模型型方法做异常检测。纯模型型方法比如基于动力学残差可解释性强、不需要大量异常数据但对未建模的动态比如地面突然变软、负载突变不够敏感。纯学习型方法比如自编码器重构误差对异常敏感但需要大量正常数据训练而且黑盒特性让安全工程师不敢用。RAPT 走的是混合路线用模型型方法提供基线残差用学习型方法捕捉残差里的时序模式两者加权融合。这个取舍很务实因为人形机器人真机异常数据极其稀缺纯学习路线根本喂不饱模型。第二个取舍是安全约束加在关节空间还是任务空间。关节空间约束好实现直接限幅就行但问题是关节限幅内组合出来的末端位姿可能仍然危险比如手臂关节都在限位内但末端速度叠加后打到人。任务空间约束更贴近真实安全需求但计算量大、实时性难保证。RAPT 的做法是分层约束任务空间做粗粒度的安全包络比如末端速度上限、质心投影范围关节空间做细粒度的动态限幅两层之间用优先级协调。这个设计我在调试时深有体会——单靠关节限幅机器人手臂在快速收回时末端速度能飙到危险值加了任务空间速度约束后才压住。第三个取舍是异常检测的触发粒度。是按整机一个信号判断还是按链路腿、臂、躯干分别判断整机信号简单但定位差出问题时不知道是哪条腿的问题。RAPT 采用分链路检测加全局融合每条运动链有自己的异常评分全局风险是各链路评分的加权聚合。这个设计对排查特别友好我在调试时靠分链路评分快速定位过一次踝关节编码器间歇性丢帧的问题整机信号当时只是轻微抖动根本看不出根源。1.3 整体架构的分层逻辑把上面这些取舍串起来RAPT 的整体架构可以理解成四层感知层、异常评分层、安全决策层、控制执行层。感知层负责采集关节编码器、IMU、足底力/触觉、电流等多源信号做时间对齐和滤波异常评分层用混合方法算出各链路的风险分安全决策层根据风险等级映射到不同的控制模式正常、保守、降级、急停控制执行层把安全约束注入到具体的控制律里。这个分层的关键在于层间接口的设计。异常评分层输出的不能只是一个标量而要包含风险来源、置信度、趋势是在恶化还是在恢复。安全决策层需要这些信息来决定是“再观察一下”还是“立即降级”。我见过一些实现把接口简化成一个阈值比较结果就是决策层变成了无脑开关失去了渐进调节的能力这恰恰是 RAPT 想避免的。提示分层架构最容易犯的错是层间耦合过紧比如控制层直接去读原始传感器做判断。一定要保证每层只依赖上一层的输出这样单层替换和调试才可行。2. 核心细节解析与实操要点2.1 多源信号的预处理与时间对齐异常检测的准确性七成取决于输入信号的质量。人形机器人上常见的信号源包括关节编码器位置、速度、关节电流间接反映力矩、IMU躯干姿态、角速度、线加速度、足底力传感器或触觉阵列、以及部分平台的视觉/深度信息。这些信号的采样率差异很大编码器可能 1kHzIMU 200Hz 到 1kHz 不等足底力传感器常见 500Hz 到 1kHz视觉只有 30Hz 左右。RAPT 在预处理阶段做了两件我认为很关键的事。第一是统一到控制周期的时间基准用插值把低频信号对齐到控制周期同时对高频信号做抗混叠滤波后再降采样。这里有个坑IMU 的角速度信号如果直接线性插值在快速转动时会产生相位滞后我实测滞后能到 5 到 10 毫秒对平衡控制来说这个量级不能忽略。更稳的做法是对 IMU 用一阶保持或者基于角加速度的补偿插值。第二是信号归一化与去趋势。不同关节的编码器噪声水平、电流量纲差异很大直接送进异常评分层会让大数值信号主导结果。RAPT 对每个信号做基于滑动窗口的标准化窗口长度一般取 1 到 2 秒既能跟上工况变化又不至于把异常本身也归一化掉。去趋势则是针对 IMU 的零偏漂移用高通滤波或者滑动均值扣除截止频率我一般设在 0.1 到 0.5Hz 之间太低去不干净漂移太高会把真实的低频运动也滤掉。实操中还有一个容易被忽略的点传感器故障的早期识别。编码器间歇丢帧、力传感器饱和、IMU 通信超时这些在真机上太常见了。RAPT 在预处理层就加了信号有效性检查比如连续 N 个周期数值不变卡死、跳变超过物理极限野值、时间戳间隔异常丢帧这些检查的结果本身也作为异常评分的一个输入维度。我踩过的坑是早期没做这层检查结果一个力传感器偶发饱和被异常检测当成真实受力突变触发了不必要的降级。2.2 混合异常评分的计算逻辑异常评分层是 RAPT 的核心。前面说了是模型型加学习型的混合具体怎么混这里展开讲。模型型部分用的是动力学残差。简单说就是用机器人的动力学模型根据当前关节位置、速度、力矩指令预测下一时刻应该出现的状态和实际测量值做差残差大说明有未建模的扰动或者执行异常。人形机器人的浮动基动力学模型计算量不小实操中一般用简化模型比如把躯干当刚体、忽略部分连杆柔性来保证实时性残差里包含的模型误差用学习型部分去补偿。残差的计算要注意用指令力矩还是测量力矩——用指令力矩残差反映的是“执行器没跟上指令”用测量力矩残差反映的是“外部扰动”两者含义不同RAPT 是两个都算分别对应执行异常和扰动异常。学习型部分用的是时序重构常见做法是轻量级的时序自编码器或者基于滑动窗口的预测网络。输入是最近一段时间的多源信号窗口我一般取 0.5 到 1 秒输出是对当前时刻信号的重构或预测重构误差作为异常分。这里的关键是只用正常数据训练因为异常数据稀缺。训练数据的覆盖度直接决定误报率我建议采集时要覆盖不同步态速度、不同转向、上下坡、负载变化等工况每种工况至少几分钟的稳定数据。两部分的融合不是简单相加RAPT 用的是基于置信度的加权模型型残差在模型可信的工况下权重高学习型在模型误差大的工况下权重高。置信度可以用残差的统计特性在线估计比如残差的滑动方差小说明模型当前可信。融合后的评分再做时序平滑用指数移动平均或者中值滤波避免单帧噪声导致评分跳变。平滑系数我一般取 0.1 到 0.3太小响应慢太大又起不到平滑作用。评分来源擅长捕捉主要局限实操建议动力学残差执行器异常、外部扰动依赖模型精度模型误差大时误报用简化模型加在线参数辨识时序重构误差未建模动态、信号模式突变需要充足正常数据黑盒训练数据覆盖多工况定期增量更新信号有效性检查传感器故障、通信异常只能捕捉硬故障阈值按物理极限设定留余量2.3 安全约束如何注入控制律异常评分出来之后怎么把它变成控制动作这是 RAPT 区别于普通异常检测的地方。安全决策层把连续的风险评分映射到离散的控制模式映射用滞回区间避免在阈值附近反复切换。比如风险分低于 0.3 是正常模式0.3 到 0.6 是保守模式降低步速、增大支撑相占比、收紧关节速度限幅0.6 到 0.85 是降级模式切换到更保守的步态或者原地站立高于 0.85 触发急停。滞回的意思是进入和退出用不同阈值比如进入保守用 0.3退出用 0.25防止抖动。控制执行层收到模式指令后把安全约束注入到控制律。这里有两种常见做法约束收缩和参考轨迹修正。约束收缩是把关节位置/速度/力矩的可行域按风险等级缩小优化型控制器比如MPC或QP在这个缩小后的可行域里求解。参考轨迹修正是直接调整期望轨迹比如降低期望速度、增大抬脚高度裕度。RAPT 是两者结合低风险时用约束收缩保持任务完成度高风险时用轨迹修正优先保证安全。我实操中的一个心得是约束收缩的比例要跟风险分连续挂钩而不是按模式跳变。比如保守模式下速度限幅不是直接砍到固定值而是按风险分在正常限幅和保守限幅之间线性插值。这样机器人的动作过渡会平滑很多不会出现模式切换瞬间的顿挫。另外急停策略也要分级一级急停是快速但受控地减速到站立二级才是切断动力因为人形机器人直接断电会瘫倒反而危险。注意安全约束的注入点一定要在控制律内部不能放在控制输出之后做后处理限幅。后处理限幅会破坏控制律的稳定性保证我见过因为输出限幅导致闭环振荡的案例。3. 实操过程与核心环节实现3.1 从零搭建一套可复现的验证流程想把 RAPT 这套思路落地验证我建议按“仿真先行、真机小步验证、逐步放开”的节奏来别一上来就在真机上跑全套。下面是我实际用过的一套流程参数和步骤都可以直接参考。第一步是仿真环境搭建。用主流的物理仿真平台搭一个和真机参数接近的模型重点是把关节驱动特性力矩上限、速度上限、响应延迟、传感器噪声模型、地面接触模型配准。地面接触模型特别关键摩擦系数、接触刚度这些参数如果和真机差太多异常检测的阈值在仿真里调好了到真机全废。我的做法是用真机静止站立和低速行走的数据去反标定接触参数误差能压到可接受范围。第二步是正常数据采集与基线训练。在仿真里让机器人跑多种工况不同速度的直行、不同半径的转向、启停、上下不同坡度的斜面、不同负载在躯干或手上加配重。每种工况采集至少 5 分钟稳定数据采样率对齐控制周期。用这些数据训练时序重构模型同时统计动力学残差的分布确定模型型部分的基线阈值。这里要注意留出验证集而且验证集要包含训练时没见过的工况组合用来评估泛化。第三步是异常注入测试。这是验证异常检测能力的关键环节。在仿真里人为注入各类异常关节力矩指令加偏置模拟执行器故障、编码器加噪声或丢帧模拟传感器故障、地面摩擦突然降低模拟打滑、外部施加冲击力模拟碰撞。每类异常记录检测延迟、误报率、漏报率。我一般要求检测延迟在 100 毫秒以内误报率低于每小时 1 次达不到就回去调评分融合权重和平滑参数。第四步是真机低速验证。真机上先做静止站立和极低速行走把仿真里调好的参数搬过来重点观察误报情况。真机噪声和仿真差异大误报往往在这一步暴露。我的经验是真机上的平滑系数要比仿真里大一些因为真机信号噪声更复杂。确认无误报后再逐步提高速度、增加工况每提高一档都重新观察一段时间。3.2 关键参数的计算与选择过程参数选择这块我挑几个最影响效果的展开说附上我的计算思路。滑动窗口长度异常评分用的信号窗口长度直接决定检测的灵敏度和延迟。窗口太短噪声主导误报多窗口太长检测延迟大。我的计算方法是窗口长度至少覆盖 2 到 3 个步态周期这样窗口内包含完整的步态相位信息。假设步态周期 0.8 秒窗口就取 1.6 到 2.4 秒。但控制周期是毫秒级窗口内样本数可能上千时序模型处理不了这么长所以实际做法是窗口内先做降采样或特征提取把上千个样本压到几十维再送模型。风险评分平滑系数指数移动平均的系数 α和等效时间常数 τ 的关系是 τ ≈ 控制周期 / α。假设控制周期 1 毫秒想要 50 毫秒的等效平滑时间α 就取 0.02。但 α 太小会让评分对真实异常的响应也变慢所以要在平滑和响应之间折中。我的经验是 α 取 0.05 到 0.1对应 10 到 20 毫秒的平滑时间既能压住单帧噪声又不至于明显延迟。模式切换阈值前面提到的 0.3、0.6、0.85 这些阈值不是拍脑袋定的而是根据正常数据下风险评分的分布来定。统计正常工况下评分的均值和标准差正常模式上限取均值加 2 到 3 倍标准差这样正常工况下误触发概率很低。保守和降级的阈值再往上按比例拉开。滞回带宽一般取阈值的 10% 到 20%。约束收缩比例保守模式下速度限幅收缩多少我一般按风险分线性映射风险分 0.3 时收缩 20%0.6 时收缩 50%。这个比例要结合机器人的动力学能力来定收缩太多会导致步态无法维持平衡。实操中我会做一组收缩比例和步态稳定性的对照测试找到既能降速又不失稳的区间。3.3 一次完整的异常响应现场记录讲一个我在验证中遇到的典型场景把整个响应链路串一遍。测试工况是中速行走时地面摩擦突然降低仿真里把摩擦系数从 0.8 降到 0.4模拟踩到湿滑区域。触发后大约 30 毫秒足底力传感器的切向力/法向力比值出现异常动力学残差开始上升因为实际足底力分布和模型预测不符。大约 50 毫秒时时序重构误差也明显上升因为足底力信号的变化模式超出了正常训练数据的分布。融合评分从基线 0.15 左右快速爬升80 毫秒时越过 0.3 进入保守模式。保守模式下步速降低约 20%支撑相占比从 60% 提高到 68%关节速度限幅收紧。此时评分还在上升因为打滑持续。120 毫秒时评分越过 0.6 进入降级模式控制器切换到更保守的步态抬脚高度降低、步长缩短同时增大踝关节的力矩响应增益来补偿打滑。大约 200 毫秒后机器人通过调整后的步态稳定下来评分开始回落降到 0.55 以下滞回阈值后退出降级回到保守再降到 0.25 以下退出保守回到正常。整个过程机器人没有摔倒速度损失约 30%但保持了连续行走。对比没有这套机制的基线控制器同样场景下大约 400 毫秒后就会失稳摔倒。这个对比让我对分层响应加滞回的设计有了实打实的信心。当然这个响应时间是在特定平台和参数下调出来的换平台要重新标定不能直接照搬。4. 常见问题与排查技巧实录4.1 误报频发怎么定位和压制误报是这套方法落地时最常被抱怨的问题操作员被频繁的降级搞烦了就会想关掉保护。排查误报我一般按这个顺序走先看是哪个链路的评分在触发再看是模型型还是学习型贡献大最后看原始信号有没有异常。分链路评分在这里就体现出价值了。如果误报集中在某一条腿大概率是那条腿的传感器或者执行器有问题而不是算法本身。如果各链路均匀误报那更可能是阈值或者平滑参数的问题。看模型型和学习型的贡献占比如果模型型主导说明模型和当前工况不匹配可能是负载变了或者地面参数变了需要在线辨识或者放宽模型型权重如果学习型主导说明当前信号模式超出了训练分布需要补充训练数据。我遇到过一个很隐蔽的误报源编码器量化噪声。低成本编码器在低速时量化台阶明显速度信号是位置差分出来的量化噪声被放大导致残差周期性波动刚好落在异常评分敏感的频段。解决办法是对速度信号做低通滤波截止频率设在步态基频的 2 到 3 倍既能保留步态信息又压住量化噪声。还有一个常见原因是训练数据工况覆盖不足。比如训练时只采了平地和缓坡真机上遇到台阶或者地毯边缘信号模式就超出分布了。这种误报不能靠调阈值解决只能补数据。我的做法是建立一个“误报样本回收”机制每次误报都把当时的信号窗口存下来定期人工确认后加入训练集做增量训练。4.2 漏报与检测延迟的权衡漏报比误报危险得多但完全消除漏报不现实关键是控制最坏情况下的检测延迟。漏报常见于缓变型异常比如执行器逐渐过热导致力矩输出缓慢下降或者电池电压缓慢降低导致响应变慢。这类异常单帧残差不大但趋势持续如果只看瞬时评分容易漏。RAPT 里应对缓变异常靠的是趋势特征。除了瞬时评分还计算评分的滑动斜率斜率持续为正且超过一定持续时间就提升风险等级。这个持续时间我一般取 0.5 到 1 秒太短会被噪声干扰太长又失去预警意义。另外对执行器电流和温度这类信号单独设趋势监控不依赖通用评分。检测延迟的另一个来源是平滑过度。前面说平滑系数太小会延迟响应实操中如果发现真实异常时评分爬升太慢可以把平滑改成自适应评分变化率大时减小平滑快速响应变化率小时增大平滑压制噪声。这个自适应逻辑实现不复杂但对检测延迟改善明显。问题现象可能原因排查动作处理建议单腿频繁误报该腿传感器故障或标定偏差查分链路评分和原始信号重新标定或更换传感器各链路均匀误报阈值过紧或工况超出训练分布看评分分布和训练覆盖放宽阈值或补训练数据缓变异常漏报只看瞬时评分忽略趋势查评分滑动斜率加趋势监控和持续时间判据异常响应迟钝平滑系数过小查评分爬升速率改自适应平滑模式切换抖动滞回带宽不足查切换频率增大滞回带宽4.3 真机迁移时的几个硬骨头从仿真到真机除了噪声差异还有几个硬骨头。第一个是通信延迟和抖动。真机上传感器数据到控制器、控制器指令到执行器都有延迟而且抖动不小。异常检测的时间对齐如果没考虑这个延迟残差里会混入延迟引起的误差。我的做法是实测各环节延迟在预处理里做固定延迟补偿抖动部分靠平滑吸收。第二个是执行器非线性。仿真里的执行器模型往往理想化真机的摩擦力、死区、饱和特性复杂得多。这会导致动力学残差在正常工况下就有较大偏置。解决办法是在线辨识执行器特性把辨识结果更新到模型里或者干脆把执行器模型误差纳入学习型部分的训练目标让它学会补偿。第三个是多机一致性。同一批次的机器人传感器标定、机械装配都有差异一套参数调好了换一台机器可能就不灵。我的经验是参数分两级跟安全底线相关的阈值比如急停阈值按最保守的机器设保证所有机器都不漏报跟性能相关的参数比如保守模式收缩比例允许按机器微调。另外每台机器出厂前都要跑一遍标准工况的基线采集建立各自的正常分布。提示真机迁移阶段一定要保留仿真环境的回归测试能力每次改参数或改模型先在仿真里跑一遍异常注入测试确认没退化再上真机能省大量时间。5. 这套方法还能往哪延伸RAPT 这套“连续风险评分加分层安全响应”的框架其实不局限于人形机器人。我在轮式移动平台和机械臂上做过类似的改造核心逻辑是通用的多源信号融合评分、分链路定位、滞回模式切换、约束连续注入。区别主要在动力学模型和异常模式的定义上。往深了做有两个方向我觉得值得投入。一个是风险评分的可解释性现在评分是个标量操作员看到降级提示但不知道具体原因排查还是靠工程师。如果能输出“哪条链路、哪类信号、什么趋势导致评分上升”现场处理效率会高很多。另一个是安全策略的自适应现在的阈值和收缩比例还是人工调的如果能根据长期运行数据自动优化减少人工标定负担对产品化很有价值。我自己在实际操作中的体会是这类安全方法的价值不在于算法多花哨而在于工程细节的扎实程度。信号对齐差几毫秒、平滑系数差一点、阈值定得偏一点效果就差很多。所以别急着上复杂模型先把数据链路、时间对齐、基线统计这些基础打牢异常检测的准确率自然就上来了。另外一定要建立异常样本的回收和复盘机制每一次误报漏报都是改进的素材攒上几个月这套系统就会越来越贴合你自己的平台。