
手上一台机械臂正在执行抓取任务目标是个表面有些光滑的金属零件视觉定位没问题夹具闭合力度也设置得中规中矩一切看起来都正常。结果刚把零件提到半空力传感器曲线出现了一小段抖动下一秒零件就斜着滑了出去。这种明明感觉要滑了却总是晚一步的体验做过机器人抓取的人应该都不陌生。滑动检测难就难在一个快字你要在一百毫秒甚至几十毫秒内从触觉信号里判断出物体与手指之间是否正在发生微小的相对位移。等你看清楚力曲线掉了、等视觉伺服系统反应过来物体早就脱离抓持状态了。后来我参与设计了一套叫SlipSense的多模态触觉学习系统目标很明确把视觉触觉信息与力传感信息融合起来通过模型学习滑移发生的时序特征做到低延迟、可泛化的滑移检测。这篇文章不打算复述论文内容我想从实际工程实现的角度聊聊这套系统背后的物理逻辑、模型选型、数据标注和部署坑点。如果你正在做类似的触觉感知项目或者打算给机械臂加滑动反馈应该能从中找到一些可复用的经验。1. 滑移检测的真正难点藏在物理层1.1 摩擦锥与微滑移为什么物体已经开始动了才报警会失败要理解滑移检测的难度首先得建立一个物理直觉物体在手指间滑动并不是嗖一下整体滑出去。真实的滑动过程有一个非常短暂却极其关键的阶段叫微滑移pre-sliding。当切向力逐渐增大时接触区域边缘的微小区域会率先突破静摩擦极限出现局部滑移。此时接触中心仍然保持粘滞锁定状态宏观上看物体还没动但应力分布已经开始变化。随着切向力继续增加滑移区域逐渐向中心扩展直到整个接触面进入动摩擦状态物体才真正开始宏观滑动。这个现象用摩擦锥来解释特别清晰。假设接触面摩擦系数为 μ法向力为 Fn则接触能抵抗的最大切向力为 μFn。用 Fz 表示法向力、Fx 和 Fy 表示切向力当合力的方向落在以法线为轴、半顶角为 atan(μ) 的锥体内部接触稳定一旦合力方向接近甚至超出摩擦锥边界滑移风险急剧上升。很多传统方法基于这个模型做滑移预警实时计算 F_t / F_n 的比值接近摩擦系数就报警。但问题在于μ 的估计极其困难——它不是传感器能直接读到的物理量而是取决于物体材质、表面粗糙度、湿度、污染情况甚至和法向力大小都有关系。你不可能在抓取每个物体前都精确测出它的摩擦系数。更麻烦的是摩擦锥模型的假设是刚性接触、均匀压力分布真实软指垫与物体的接触完全不是这么回事。所以仅仅依赖力比值判断滑动很容易出现两种情况要么报警太晚等比值超过 μ 时物体已经滑出去了要么误报太多压力小波动就触发报警。1.2 滑动瞬间的指纹藏在振动和形变里既然力比值不够可靠那什么信号能更快地反映滑动答案藏在微滑移阶段产生的两类物理现象里。第一类是高频微振动。当接触面局部发生粘滑stick-slip时会产生一个宽带的高频振动信号频率往往在几十赫兹到上千赫兹之间。这个信号本质上就是微滑移的声音它发生的时间点比宏观位移要早得多。过去有研究用压电薄膜贴在夹爪表面就是靠捕捉这个振动来触发滑移警报的。第二类是接触应力分布的重分布。视觉触觉传感器如 GelSight、Digit 这类能直接记录接触表面的弹性凝胶形变。当微滑移发生时接触区域边缘的应力突然集中凝胶的变形图案会从均匀分布变成一侧压缩、一侧拉伸的形态同时接触区域的边缘会出现细微的蠕动痕迹。这些空间形变信息非常丰富你甚至可以通过光流法直接估算接触面上每个点的位移场从而判断哪些区域已经进入滑移状态。SlipSense 选择多模态融合的原因就在这里力传感器对高频动态响应迅速但对空间细节无感视觉触觉传感器能提供高分辨率的接触面形变信息但帧率有限一般 30~60Hz单独靠它做低延迟判断有瓶颈。两者结合恰好互补了对方的短板。2. 多模态触觉怎么搭传感器选型与数据同步2.1 主流触觉传感方案与各自能力边界在开始搭建 SlipSense 之前首先要解决的是传感器选型问题。多模态不是把传感器堆在机器人上就完事每种传感方案的物理分辨率、响应频率、可部署性差异很大选型直接决定了后面的数据处理方式和模型结构。视觉触觉传感器方面最常见的是 Gelsight 系列MIT 开源方案和商业化的 Digit。它们的基本原理是用一个带标记点的弹性凝胶接触物体表面凝胶下方有一个微型摄像头拍摄变形后的标记点位置。通过标记点的运动场可以反推出接触面的应力分布、接触形状甚至表面纹理。这类传感器的空间分辨率可以做到很高几千个有效感知点不在话下缺点就是帧率受限、体积偏大。力/力矩传感器方面实验室常用 ATI、OptoForce工业夹爪内置的关节扭矩传感器也算这一类。它们直接输出 Fx、Fy、Fz 和力矩 Mx、My、Mz采样率可以到 1kHz 以上对动态力变化非常敏感。但缺点也很明显它只能给出接触的合力完全没有空间分布信息。简单说它知道接触在变但不知道接触怎么在表面上变。还有两类传感器也值得关注。一类是压阻式压力阵列比如压感薄膜阵列传感器它能输出接触面上的压力分布图但空间分辨率通常比视觉触觉低一个量级而且迟滞和漂移比较明显另一类是压电振动传感器响应极快、成本低但只能提供单/多轴振动信号无法还原空间结构适合做触发开关级别的检测。传感类型空间分辨率动态响应信号内容主要局限视觉触觉GelSight/Digit高亚毫米级30~60Hz接触面形变、应力分布帧率低体积大力/力矩传感器无空间分辨1kHz合力/合力矩无空间信息压阻阵列中毫米级100Hz左右压力分布迟滞、漂移压电振动传感器无空间分辨极高粘滑振动信号维度少SlipSense 的核心组合是视觉触觉 力传感。视觉触觉负责空间感知力传感负责时序动态感知两层信息输入到模型后做特征级融合。这套组合的好处在于它既能捕捉滑移时的应力重分布空间模式又能捕捉振动和力变化的时间动态两类信号相互印证显著降低误报率。2.2 时间戳对齐与不同采样率的处理多模态系统落地时最容易踩的坑就是不同传感器之间的时间戳不对齐。视觉触觉传感器的输出是 30fps 的图像帧力传感是 1kHz 的力向量流两者天生不在一个时间轴上。如果不对齐就送进网络模型会学到一堆错误的时序关系训练时 loss 还表现得不错一到真机上就原形毕露。我在 SlipSense 里对力信号做的是窗口平均时间对齐以视觉触觉图像帧的时间戳为基准取该帧前后各 15ms 的力数据做均值作为该帧的力特征。这样每一帧视觉信息和同一时刻的力状态绑定在一起。还有人会再加一步插值把力信号重采样到视觉帧率本质效果相同但我倾向于窗口平均因为它还能顺便滤掉一部分高频噪声。关于同步精度实际工程中视觉触觉传感器的时钟抖动一般有几毫秒力和视觉之间用同一个实时内核采集的话对齐到 ±5ms 以内基本可行。这个精度对滑移检测足够了——毕竟微滑移阶段本身持续几十毫秒到几百毫秒5ms 的抖动不会造成特征错位。但如果你打算把视觉触觉数据和其他控制指令做闭环那就要认真考虑用 PTPPrecision Time Protocol同步甚至从硬件层面用外部触发信号同步曝光否则时间偏差会直接影响控制稳定性。3. 模型设计低延迟与泛化不是二选一3.1 时序建模选型为什么因果卷积比LSTM更适合滑移检测滑移检测本质上是一个时间序列分类问题输入一段连续的触觉多模态信号流输出当前时刻是否处于滑移状态。但这类任务的特殊性是延迟极其敏感。我见过不少团队第一版模型用 LSTM 或 GRU效果还行但部署后发现推理延迟不稳定——递归网络的每一个时间步都必须等上一步计算完才能继续虽然算力足够的时候延迟不高但在嵌入式设备上这个串行依赖会成为瓶颈。SlipSense 的时序编码器用的是因果空洞卷积Causal Dilated Convolution也就是很多语音合成系统里用的 TCNTemporal Convolutional Network思路。因果卷积保证输出只依赖当前及之前的时间步不会泄漏未来信息空洞卷积通过指数增长的膨胀率扩大感受野用很浅的网络就能覆盖足够长的历史窗口。一个典型的配置是 3 层空洞卷积膨胀率取 1、2、4卷积核大小取 3。这样感受野长度为 1 2×3 7 帧如果把第一层的核看作普通卷积第三层的感受野算下来能覆盖约 13 帧对于 30fps 的视觉触觉输入覆盖约 400ms 的历史信息足够捕捉微滑移阶段的完整演化过程了。用因果卷积的另一个好处是训练速度。LSTM 需要逐时间步迭代训练效率低而 TCN 可以并行计算所有时间步训练和推理都快得多。模型结构还更容易导到 TensorRT 或 ONNX 里部署不用处理递归网络的时序依赖维护问题。3.2 融合策略特征级融合优于决策级融合多模态融合有三种常见方案输入级把两种信号直接拼接成多通道输入、特征级各自编码后在中间层融合、决策级两个独立模型分别出预测结果再做投票或加权。我实测下来滑移检测场景特征级融合最合适。原因也简单决策级融合的问题是视觉和力信号单独都不够可靠。视觉模态帧率低单帧判断不了滑动状态力模态容易受机械臂自身振动干扰。两边都半懂不懂的情况下决策级融合即便做加权也克服不了单模态本身的缺陷。而特征级融合让网络在中间特征空间自行学习两个模态的互补关系效果明显更好。具体到实现视觉触觉图像先过一个 CNN 编码器我用的是一个精简的 ResNet 变体把最后的全连接层替换成 128 维全局特征力信号序列过一个小型 MLP 或 1D 卷积编码器输出 64 维特征。两个表征拼接后经过融合层和一个输出分类头。这里有个细节值得说融合前两个特征最好都做 LayerNorm因为视觉特征和力特征的数值范围差异很大——视觉特征来自深层网络分布相对稳定而力特征原始数值可以差出几个量级不归一化的话融合层会过分偏重力信号网络训练初期很容易不收敛。为了让模型学会哪些情况下该信任哪个模态我在融合层后加了一个轻量级注意力模块。它的输入是拼接后的特征输出是两个模态各自的重要性权重然后用权重对特征做加权求和。实验里这个模块对降低误报率帮助挺大尤其是在遇到传感器噪声或短暂的信号丢失时模型能学会暂时降低不可靠模态的权重。这个小改动只增加了不到 5k 个参数但分类的 F1 分数提升了大概 2 到 3 个百分点。3.3 让模型泛化到没见过的物体泛化是所有触觉感知模型绕不开的坎。同一双手指捏一个钢球和捏一块海绵接触面的形变模式完全不同滑动时的振动特征也天差地别。如果训练集里只有钢、铝、塑料这些硬质物体模型遇到柔性物体时预测就会崩。SlipSense 解决泛化问题靠的是三招并行而不是单靠某一种技巧。第一招是域随机化Domain Randomization。在仿真环境里生成大量形态、材质、摩擦系数随机的接触场景让模型在海量合成数据上先学到一个相对通用的特征表达。这一步不用太纠结仿真触觉数据的物理保真度因为后面还有真实数据的微调。但注意别太依赖仿真我见过光靠仿真训练出的模型放到真实机器人上效果一塌糊涂因为仿真的凝胶变形和真实之间总有差距。第二招是真实数据的多样性采集。在采样数据时我刻意加入了金属、塑料、泡沫、橡胶、木材、布料、食品包装等不同材质、不同表面粗糙度的物体。采集时覆盖不同夹持力、不同相对滑动速度甚至故意让夹爪带一点倾斜角度破坏理想化的正压接触状态。真实世界的数据永远是最可靠的学习来源。第三招是自监督预训练 微调。在没有明确标注的数据上用对比学习Contrastive Learning预训练视觉触觉编码器把同一时刻、不同视角的触觉图像对拉近把时间间隔较大的触觉图像对推远。这样模型在没有标签的情况下也能学到什么样的接触形变变化意味着接触状态的改变。之后再用滑动标注数据做有监督微调。这个小改动让模型在没见过的物体上的准确率提升了约 15%。4. 数据采集与标注泛化的根基4.1 自动化采集平台的搭建数据采集对触觉感知项目来说是个精细活。如果手动控制机械臂去滑动各种物体不仅效率低下还很难保证滑移过程均匀、可重复。SlipSense 的数据采集我用的是一个简单的自动化装置固定夹爪水平放置夹爪下方安装一个可编程控制运动的物体支架通过支架以不同速度拉动不同物体让物体在夹爪中产生可控的滑动。典型的采集流程是设定夹爪的法向力为某个固定值控制支架电机从静止开始以指定加速度拉动物体让夹爪经历了静止→粘滞→微滑移→宏观滑动的完整过程。为了覆盖更多情况我会在正拉的同时加入轻微的角度偏转模拟真实抓取中的不正对接触。整个过程由脚本控制一批次可以连续采集几百次滑动试验。采集的物体需要覆盖足够多的材质和几何形状。除了常规的方块体我特意加入了一些不规则形状的物体比如圆形截面的瓶子、边缘是弧形的包装盒、表面带纹理的橡胶垫。这能让模型学到更丰富的接触边界条件。4.2 标注策略人工标注不如半自动伪标签滑移检测模型的标注比普通图像分类复杂——需要标注的不是这张图上有没有滑移而是从哪个时间点开始接触面进入了滑移状态。逐帧人工标注的难度和主观性都很高。SlipSense 采取的方案是半自动化伪标签。在采集过程中系统同时记录高分辨率力信号用内置压电传感器或高频力传感器捕获滑动起始时的粘滑振动特征。通过振动幅值短时能量超过阈值的时刻自动确定一个候选滑移起始点。然后让标注人员在这个点附近做微调确认。实际用下来自动检测出的候选点通常已经很接近真实滑移起始点人工只需要在 ±100ms 窗口内确认或微调。这个方案将单条样本的标注时间从几分钟压缩到十几秒整个数据集的标注效率提升非常明显。但这里有一个坑压电振动传感器对粘滑信号的检测会有一定延迟在高速滑动中振动发生到能量超过阈值之间可能已经滑出去几毫米。所以自动标注出来的起始点偏向保守需要人工向回校正。我后来重新设计了自动标注流程在振动能量基础上再叠加一个接触面积变化判据视觉触觉传感器中标记点位移场分布突然不再均匀的时刻就是滑移扩展到整个接触面的时间点。用两个判据交叉验证能把候选点的位置误差缩小到 1~2 帧以内。4.3 数据集平衡与负样本的重要性关于数据平衡我特别想强调一点滑移检测是典型的不平衡分类问题。在一次采集序列中安全接触状态占了 80% 甚至 90% 以上的时间真正处于滑移状态的时间窗口可能只有几百毫秒。如果直接拿全序列做训练模型会严重偏向输出未滑动检测的召回率即使低到 10%整体准确率看起来还是很高极其具有欺骗性。我的做法是重采样策略把滑移状态帧作为正样本全部保留未滑移帧作为负样本从中随机抽取一部分使正负样本比例维持在 1:1 到 1:3 之间。实际部署时再去评估确保模型的预测分布没有明显偏差。负样本里面还要特别关注两类困难负样本一是夹爪正在接触但尚未滑动的瞬间二是夹爪受到外部冲击比如机械臂自身振动传递过来但物体并没有滑移的时刻。这两种情况在视觉触觉图像上和滑移初始阶段非常相似最难区分。把这些困难负样本单独捞出来做困难样本挖掘Hard Negative Mining能显著降低部署时的误报率。5. 从实验室到机械臂低延迟部署的实测记录5.1 端到端延迟的精确拆解模型在服务器上跑得再快也不代表闭环控制里真正可用。SlipSense 从传感器数据到输出滑移警报的完整链路包括几个环节图像采集、力信号读取、预处理、模型推理、后处理、控制指令输出。每一个环节都有延迟加起来才是最终端到端延迟。我在实际部署中的时间分配大致是视觉触觉传感器采样延迟约 33ms30fps 帧间隔力传感器信号采集约 1ms预处理图像裁剪缩放、力信号窗口聚合约 2ms模型推理在 NVIDIA Jetson Orin 上约 8ms量化后 5ms后处理约 1ms控制指令下发给夹爪约 5ms。合计大概 48~50ms。听起来已经挺快了但真实场景中还有一个隐藏延迟来源视觉触觉图像帧的缓冲排队延迟。如果采集线程和推理线程没有做流式处理图像数据会在内存里积压端到端延迟可能凭空增加 30ms 以上。我在部署时强制把采集线程和推理线程做成流水线图像一到立即送推理不做帧率对齐等待。从滑移物理过程来看60ms 以内的检测延迟是基本要求最好做到 30ms 以内。我们实测的 50ms 端到端延迟在夹持速度较快的场景下已经能控制住大部分物体。如果要做高速抓取或者精细操作可以考虑把视觉触觉帧率提到 60fps部分硬件支持或者把视觉触觉传感器的曝光时间缩短、改为 ROI 局部读取进一步压低延迟。5.2 归零协议与迟滞控制降低误报的最后一公里一个模型训练出来可能各项指标都很好但一旦接上真实机器人各种途中从未出现的问题就会冒出来。我在 SlipSense 上线后踩过一个特别典型的坑模型在离线测试集上的误报率不到 1%但装到机械臂上运行时误报率高得离谱——机械臂启停瞬间的惯性冲击、关节电机的振动、周围人员的走路震动都会把模型从未滑动误判成滑移。这个问题从模型本身很难完全解决我的处理方式是加了一个输出后处理逻辑模型输出的滑移概率不直接作为触发信号而是先经过一个迟滞比较器。只有当滑移概率超过 0.7 持续 3 帧才确认触发滑移警报一旦确认触发只有当滑移概率降到 0.3 以下持续 5 帧才解除警报。这个迟滞机制相当于给检测输出加了一个惯性有效过滤掉瞬时噪声。模型置信度比较平缓的滑动过程不会受影响但短促的振动尖峰和偶发的误预测都能被压下去。另外一个重要的回归测试方法是在固定的回归抓取场景上反复跑同一组动作。我准备了一组标准动作抓取、匀速提起、空中停留、放下。每次改动模型或后处理参数都跑这组动作统计误触发次数。实测下来这个方法能快速发现离线指标一切正常实机一跑就翻车的模型强烈建议你也搞一套固定的回归测试脚本。运行环境越接近真实部署环境越好测试物体不要变这样才能保证对比的公平性。5.3 评估指标怎么选把模型精度和延迟做权衡时必须有一套评估指标能真实反映系统实际表现。滑移检测项目里我常用的指标和选择理由如下。延迟指标和精度指标要分开看。延迟不只看平均推理时间还要看P95 延迟——因为峰值延迟才是导致实物滑落的真凶平均延迟低但峰值高照样会掉东西。精度方面除了整体准确率要单独看召回率Recall因为漏检一个滑移可能就意味着一次抓取失败。你可以在混淆矩阵中重点看把未滑移判断成滑移误报和把滑移判断成未滑移漏检的比例。评估时还要做分层评估。按物体材质、滑动速度、接触角度分别计算各项指标。我见过不少项目整体指标优秀但把所有结果摊开看低速滑动场景的召回率只有 30%。如果不做分层评估这类问题会被整体数据掩盖直到部署时所有低速抓取全部失败才暴露。6. 通用性与后续延伸从滑移检测到触觉智能SlipSense 这套多模态触觉学习架构不只是用来做滑移检测的。把输出头换掉它可以迁移到很多相关的触觉感知任务。比如抓取稳定性评估。滑移检测关注的是是否正在滑而稳定性评估关注的是这次抓取稳不稳或在什么力范围内能保持稳定。这类任务对模型能力的要求完全不同——它是一个回归任务需要模型从触觉信号中提取出接触安全裕度的信息。在 SlipSense 的编码器后面加一个回归头用标注了最大握持力或打滑的临界力的数据集做训练迁移得非常顺利。核心原因在于多模态编码器已经学习到了丰富的接触状态表征不需要从头学起。再比如物体材质分类。触觉信号对表面材质信息非常敏感视觉触觉传感器的形变图里包含了表面微观几何特征力传感器记录了接触力学响应。在 SlipSense 的特征编码器后面加一个轻量的分类头就能实现材质分类。我拿模型在织布、皮革、塑料、金属上的测试结果看平均准确率能达到 85% 以上。这其实是意料之中的因为预训练阶段触觉编码器就已经学过了大量不同材质接触下的通用表征。如果你打算做更进一步的表面纹理识别或物体身份识别SlipSense 的多模态编码器同样可以作为骨干特征提取网络。这给我一个很深的感受一个用大量触觉数据预训练出来的多模态感知模型本身就是一套可复用的触觉特征库后续扩展新功能时不必每次都从零训练一套新模型。这里说的是扩展功能时的路径并不是说我在每一个项目里都能直接复用到原封不动的模型。最稳妥的做法是保留编码器权重在目标任务数据上进行充分的微调只重塑输出层。我发现即使换到差异很大的物体集上只微调最后的融合层和输出头其余层完全冻结效果也说得过去如果数据量足够放开全模型微调效果上限会更高。这样的迁移操作基本已经成为我做触觉感知类项目的标准做法了。7. 实测经验总结与复现建议做了一整套 SlipSense 项目之后有几条经验值得单独记下来都是踩过坑后才真正想明白的。第一多模态系统从第一天就要考虑时间同步架构。别想着先分着采后面再对齐。数据采集时的时间戳同步设计决定了后面所有训练数据的质量是系统性的问题后面补还不如前面规划好。一套数据采集系统买回来第一件事不是开始采数据而是测不同传感器的时间戳误差。第二模型结构与推理运行时的匹配要提前考虑。如果模型训练完才发现部署平台上跑不了返工成本巨大。建议在训练前就选定部署框架把目标硬件支持的操作符、支持的量化方式梳理一遍再定模型结构。SlipSense 模型最初用了一些自定义算子导出到 TensorRT 时费了不少周折后来专门把算子替换成标准的卷积和全连接才能顺利转换。建议你从一开始就只使用部署框架支持的标准算子。第三数据采集的自动化程度直接决定数据规模。我花了将近两周时间搭建自动化采集装置虽然前期投入不小但比起纯手动操作数据采集效率提高了至少一个数量级。如果你的项目要长期做触觉研究这套自动化采集装置是最值得投资的环节。第四关于离线评估强烈建议在训练集之外单独保留一个从未见过物体集合的测试集。这个测试集的物体不能只是与训练集不同的个体最好是完全不同的材质、形状、表面状态才能真正检验模型的泛化能力。我见过不少模型在常规测试集上指标良好一接触真空里的新物体就露馅这个测试设计应该尽早跟随项目建立。第五关于整个系统延迟优化要全局看。个别环节再快如果管线瓶颈没打通端到端延迟照样下不来。我在 Jetson 平台上做过一次优化专项把单个模块的推理时间从 12ms 降到 7ms但端到端延迟几乎没变化——分析下来发现瓶颈在图像采集和传输环节的缓冲延迟上。后来用流水线模式改造采集和推理线程延迟才真正降下来。这种系统层面的优化比压榨单个算子更有意义。如果你准备复现 SlipSense 这套思路我建议的最小配置是一个视觉触觉传感器经济方案可以自己用 GelSight 的开源图纸做一个、一台带力传感的夹爪或机械臂、一块支持 FP16 推理的 NVIDIA 嵌入式平台再加上时间同步处理模块总成本大概在两三万人民币量级。比起整套直接买厂商的多模态触觉方案这个自研路径贵在前期投入但灵活性大很多模型结构和数据处理都能完全自主控制。最后想说的一点是触觉感知的技术底线不在于模型有多复杂而在于系统有没有真正理解和尊重物理世界中接触这件事本身。把接触力、微滑移、摩擦这些物理机制吃透再谈网络结构才是有地基的楼。SlipSense 这套方案不是最优解但它验证了一条行之有效的路径多模态传感 时序建模 数据工程配合完全能把滑移检测做到实用可部署的程度。