ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

机器人足底感知:多模态传感器阵列融合技术解析

机器人足底感知:多模态传感器阵列融合技术解析 1. 项目概述与设计思路1.1 为什么机器人需要一双“有感觉”的脚最近一直在做机器人足底感知方向的项目项目名里的 Multi-modal Sensor Array Fusion 翻译过来就是“多模态传感器阵列融合技术”。一开始接这个项目的时候我最大的疑问其实是机器人不是有编码器、有IMU、有视觉吗为什么还要专门在脚底装传感器后来真正上手才发现编码器反馈的是关节角度IMU反馈的是躯干姿态视觉看到的是环境但“脚底和地面之间到底发生了什么”这件事整个系统基本是盲区。尤其是双足机器人走在未知地形上视觉看不到的凸起、松软地面、积水、油污全部要靠足底感知来兜底。四足机器人也一样脚尖支撑相时只有一个小接触面打滑、下陷、支撑点漂移这些现象只在足底信号里能第一时间体现出来。所以这个项目要解决的核心问题可以概括成一句话让机器人“知道自己的脚在踩什么、踩得稳不稳、下一步该怎么踩”。做到这一点就需要在脚底集成多种传感器再把它们的数据在时间、空间上对齐融合最终输出对上层控制器有价值的状态信息。1.2 系统整体架构与设计目标整套系统的架构我分成三层来看。最底层是感知层包括足底压力传感器阵列、足端IMU、关节编码器/电流采集单元、可选的温度传感器中间层是融合层负责信号调理、标定补偿、滤波、特征提取和数据融合上层是应用层包含步态相位判断、打滑检测、地形分类、零力矩点计算等。当时定核心设计指标时我和团队主要卡在三个数字上。第一是采样率足式机器人动态行走时步频一般不低单脚支撑相可能只有几百毫秒甚至更短压力分布变化很快压力阵列的采样率至少要达到 200Hz 以上越高越好但也要考虑总线带宽和处理负担。第二是端到端延迟从足底受力到上层控制器拿到融合结果我定的极限是 5ms 以内因为控制周期一般只有 1kHz 或者更低迟滞太大整个反馈环路就不稳定了。第三是安装空间机器人踝关节以下的空间非常有限传感器层不能超过 8mm 厚度否则会明显改变机器人的落脚高度和动力学模型。系统架构定了之后接下来就是最让人头疼的硬件选型和阵列布局。这一步直接决定了后面算法的上线空间走了不少弯路我把最有价值的经验拆在下面。2. 硬件选型与阵列布局解析2.1 压力阵列压阻式与电容式的取舍足底压力阵列是整个系统里最核心的硬件没有之一。市面上的方案大致分两类压阻式薄膜阵列和电容式阵列。刚接触这个项目的人第一反应通常都是“压力传感器还不简单”但一旦开始选型就会发现这里面水很深。压阻式薄膜阵列的原理是利用导电浆料在受压后电阻变化来反映压力。好处是厚度非常薄通常能做到 0.2mm 左右贴在脚底几乎不占空间而且价格相对便宜适合多通道密集布点。缺点是迟滞比较大同一个压力值加载过程测到的和卸载过程测到的可能差出 10% 以上另外温漂也明显导电浆料本身对温度敏感后续必须做温度补偿。电容式阵列的精度和稳定性更好迟滞小、重复性好但是传感器一般更厚柔性电路板加上介质层之后至少 1mm 以上而且驱动电路复杂通道多了之后成本上涨非常快。对比项压阻式薄膜阵列电容式阵列厚度约0.2mm易集成1mm结构更厚迟滞5%~15%明显较小通常在3%以内温漂高需补偿相对低成本低适合多通道高驱动电路复杂动态响应中等较好适合场景足底压力分布、步态相位高精度力测量、长时间监测考虑到机器人足底空间极其有限而且我需要上百个测点才能看出压力分布的整体形态最终选了压阻式薄膜阵列。但选了它不代表万事大吉后面在标定和温漂处理上付出的工作量比选电容式多得多。这个取舍逻辑写在这里大家根据自己的项目需求来判断不需要照搬。2.2 足底传感器布局不是均布而是有主次传感器布局看起来像是简单几何问题实际上是一个力学问题。人体行走时足底压力分布不是均匀的重量主要集中在脚跟、第一跖骨头大脚趾根部和第五跖骨头这三个区域。机器人虽然结构和人体不同但在行走过程中着地瞬间、支撑中期、蹬地离地阶段压力分布的重点区域是明显变化的。我在设计阵列时没有采用均匀网格而是把测点密度分成三个等级脚跟区域和前掌区域加密密度做到每平方厘米 4 个测点以上足弓区域稀疏布置每平方厘米 1 个测点左右足尖再放一排高灵敏度测点专门捕捉蹬地阶段的压力峰值。这样做的直接收益是在通道数不变的情况下关键区域的压力梯度分辨率大幅提升。另外还有一点容易被忽略传感器不能铺满整个脚底边缘。边缘区域在装配时最容易受到剪切力和局部应力集中干扰贴到边缘会导致传感器提前损坏。我当时给边缘留了至少 5mm 的空白区域看起来浪费了一点有效面积但传感器的寿命明显延长了。2.3 多模态传感器组合与同步手段“多模态”这三个字是项目的关键光有压力阵列做不出稳定的感知。我在足端集成了多类传感器压力阵列感知足底压力分布、接触状态、压力中心位置足端IMU6轴感知脚部角速度和线加速度辅助判断摆动相与支撑相关节编码器和电流采集从驱动器侧获取踝关节/髋关节的力矩和位置信息用于交叉验证温度传感器贴在压力阵列与电池/驱动板附近为温漂补偿提供参考。多模态带来的好处是冗余和互补。比如压力阵列在快速冲击时会饱和但IMU的加速度峰值不受影响又比如打滑时压力分布图上接触点移动特征不明显但足端IMU的微振动特征非常突出。但是多模态数据上了系统最棘手的问题是时间同步。压力阵列走SPI采集IMU走I2C编码器数据来自上层总线三路数据如果时间基准不统一后续融合全白搭。我最后用了硬件同步方案让 MCU 的定时器同时触发压力阵列采样、IMU采样和编码器数据锁存所有数据在同一个时间戳上打包上传。实测下来同步误差能控制在 0.1ms 以内这才保证了后面算法有意义。3. 数据融合与感知系统核心实现3.1 从单点信号到足底压力热力图传感器阵列拿到的是几十个通道的原始电阻/电压值直接给上层控制器看没有任何意义。第一步是把这些值映射成物理量生成一张可视化的足底压力热力图。每个测点都有自己的标定曲线理想情况下是一条直线实际上有明显的非线性。我采用了分段线性插值的方法在硬件和算法之间做一张查表将ADC值和压力值的对应关系分段线性化比直接拟合多项式更稳也更方便在量产时针对每一只脚单独标定。查表法虽然看起来很“土”但在嵌入式环境下执行效率高调试的时候也能很直观地看到某个通道卡在哪个区间出现了问题。得到每个测点的压力值之后可以进一步计算压力中心Center of PressureCoP。CoP 的计算公式本质上是一个加权平均[ CoP_x \frac{\sum p_i \cdot x_i}{\sum p_i}, \quad CoP_y \frac{\sum p_i \cdot y_i}{\sum p_i} ]其中 ( p_i ) 是第 i 个测点的压力值( x_i ) 和 ( y_i ) 是该测点在脚底坐标系下的坐标。CoP 是整个系统中最重要的中间量之一它直接反映支撑点的位置变化也是后面计算零力矩点的基础。我在实现的时候遇到一个坑如果只用单项压力值做加权平均CoP 在接近脚底边缘时会出现明显的跳变原因是边缘测点密度不够。后来我加了一个置信度权重压力值太小的测点不计入计算跳变问题才缓解。3.2 传感器标定与温度补偿压阻式传感器如果不做标定测出来的数据基本只能“看趋势”不能拿来闭环控制。我的标定流程分三步走第一步是静态标定。用一个施力装置最简单是砝码加载从零负荷开始逐步加载到最大量程记录每个测点的ADC值生成初始标定曲线。这一步需要保证加载面平整、受力均匀不然同一个测点在不同压力下的响应会乱掉。第二步是温漂补偿。方法是在恒温箱里做定标测量从 10°C 到 50°C 范围内每个测点的零位漂移和灵敏度漂移拟合出一个以温度为自变量的补偿系数。实际运行时温度传感器读到的温度会实时修正压力值。这套补偿做完之后实测在 20°C 温差下零位漂移从原来的满量程 8% 降到了 2% 以内。第三步是动态标定。用落锤或者脚步模拟装置给传感器一个瞬态冲击调整算法里的滤波参数确保动态响应不过冲、不拖尾。这一步很容易被跳过但如果跳过机器人快速落地的时候测到的峰值会失真严重的话上层控制会误判。3.3 多模态融合算法从卡尔曼到学习式方法多模态数据到了融合层我试过的方案有好几种各有优劣。最基础的是互补滤波。IMU的角速度在动态过程中响应快但有漂移压力阵列的CoP稳态可靠但有噪声把两者的优点互补一下可以得到相对平滑的CoP估计。这个方案计算量极小适合MCU直接跑但只在工况变化不大的场景下效果可控。更系统的做法是卡尔曼滤波。我以足端三维力、CoP位置和脚底角速度为状态量以压力阵列输出为观测方程之一以IMU输出为运动学约束构造了一个融合估计器。卡尔曼的好处是能显式地建模噪声协方差调好参数之后融合结果平滑而且有置信度指标。缺点是调参比较玄学Q矩阵和R矩阵的选取很大程度上依赖工程经验我花了大量时间在不同路面上录数据、看残差、调权重。最近项目里还试了轻量化的学习方法。把压力阵列热力图、IMU时序数据和关节力矩叠加成多通道输入用一个小型卷积网络或MLP直接输出步态相位、滑移概率、地形类别等高层信息。优点是省去了大量手工特征工程缺点是需要大量带标签的数据而且模型部署到嵌入式端要经过压缩和量化。我在这个项目里的结论是能用手工特征规则解决的地方不要上来就上神经网络先用卡尔曼和状态机把管线跑通再考虑往特定模块里加入学习式方法不然调试成本会吞掉整个项目周期。3.4 特征提取与状态机步态相位、打滑、地形分类融合后的数据最终要转化成上层控制能用的状态。我最关心的三件事是步态相位、打滑、地形。步态相位判断我用的是压力IMU混合判据。支撑相的开始以压力值超过阈值为准支撑相结束以压力值低于阈值且足端加速度出现上升沿为准。摆动相则反过来用IMU的角速度积分判断抬脚动作。相位状态机本身很简单难点在阈值自适应。不同地形上足底压力分布差异很大同一个阈值在硬地面上好使在沙地上就会误判。后来我把阈值改成了动态阈值根据最近 N 步的压力峰值来调整当前步的判断阈值。效果比固定阈值好很多。打滑检测我分成两类处理。足底相对于地面打滑时CoP 会突然向滑动方向快速移动同时足端IMU会出现高频微振动。我提取了 CoP 位移速度的函数以及IMU在高频段100Hz~500Hz的能量谱特征当两个特征同时超过阈值时就判定打滑。为了验证我在光滑瓷砖上洒水、铺细沙、放油膜分别做测试系统能够稳定在打滑发生后30ms内给出报警给上层控制器争取到了宝贵的反应时间。地形分类则依赖压力分布的形态特征。硬地面上的压力热力图通常有清晰的区域聚簇和明显的峰值松软地面压力分布更均匀、峰值更低碎石地面压力图会有多个分散的小峰值点。把这些形态特征输入到分级分类器里可以很好地区分硬地面、泥地、沙地、碎石地面等常见地形。分类结果回传给步态规划器机器人就能在落脚前调整步高和步幅。4. 从调试到落地实操步骤与参数详解4.1 数据采集链路MCU选型、通信与实时性整个感知系统的“心脏”是数据采集板。我选用的主控MCU是一颗Cortex-M7内核、主频480MHz的芯片因为需要同时扫几十路压力阵列通道、接收IMU数据、打包上传对GPIO速度、DMA能力和浮点运算都有要求。压力阵列的扫描方式是这样设计的所有测点接成行列矩阵MCU依次给每一行施加激励然后同步采集一整列的ADC值。采用这种方式40个测点的完整扫描时间大约是1ms也就是理论采样率能做到1000Hz但考虑到快速变化场景下信号本身噪声较大实际我用的是500Hz采样再软件降采样到250Hz。通信我用的是CAN总线CAN的数据帧短、实时性强很适合机器人的分布式架构。每条CAN帧最多传8字节数据我设计了分帧打包一帧放时间戳和CoP坐标另一帧放压力阵列热力图的压缩值逐帧发。实测整个链路里从传感器采到数据到上层控制板拿到融合结果的端到端延迟稳定在3ms左右满足控制需求。4.2 现场调试流程与关键参数设置调试流程这块我自己总结了一套顺序新手特别容易跳过标定直接跑算法这是大忌。第一步是单点验证。拿一个已知压力的物体按压脚底各测点确认每个测点都有响应、响应方向和幅值大致合理。这一步经常能抓到接反线、短路、贴装空鼓这类低级错误。第二步是静态重复性测试。在同一块硬地面上让机器人站在上面连续记录30秒压力数据和CoP坐标观察数据的稳定性。正常情况下CoP的抖动应该在几个毫米以内如果抖动过大先检查机械固定再检查滤波参数。第三步是动态单步测试。先扶着机器人或者用吊架保护做单步踏出动作记录压力阵列在着地瞬间的变化波形重点看有没有出现过冲、饱和以及压力瞬间丢失现象。着地瞬间的冲击峰值通常能达到正常支撑时的2~3倍如果传感器的量程余量不够这一步就会暴露出来。第四步是连续行走测试。跑各种地形记录完整步态周期数据用来校准步态相位状态机和打滑检测阈值。关键参数上我给出一个可参考的初始范围实际还是要结合自己的传感器量程和机械结构来调参数名初始参考值说明压力阵列采样率500Hz扫描后软件降采样到250Hz支撑相压力阈值满量程的3%~5%根据地形动态调整CoP低通滤波截止频率20Hz过高会引入噪声过低则延迟太大IMU加速度低通截止频率50Hz用于提取微振动特征打滑能量阈值归一化后2.0~3.5需要现场标定4.3 与上层控制器的联动零力矩点与力控足底感知做完之后上层控制怎么用决定了这个项目的价值。我做的第一个应用是零力矩点ZMP反馈。零力矩点的物理意义是足底压力合成的等效作用点在双足支撑时理想情况应该落在支撑多边形内部。把足底压力阵列计算出的CoP作为ZMP的实测值与规划值做差送入踝关节和髋关节的力控回路可以显著提升行走稳定性。实测在平坦地面上加入CoP反馈后机器人对小幅扰动比如侧面推开的抗扰动能力提升非常明显。第二个应用是足底力控。简单来说就是控制机器人落地时对地面的冲击力不过大。做法是将压力阵列测量出的总压力作为力反馈信号在触地瞬间让踝关节采用力柔顺控制而不是位置控制。这个模式的实现完全依赖于可靠的足底压力数据。数据噪声大的话力控回路会剧烈振荡我在实验里踩过好几次坑最后才把滤波和融合参数调整到让力控能稳定收敛的状态。第三个应用是步态规划的前馈信息。足底传感器识别出前方几米的地形类型后步态规划器可以提前调整步高、步幅和足端轨迹。比如检测到沙地就提高步高、降低落地速度避免脚尖陷进去检测到碎石地就采用更保守的步态逐步试探落脚点。5. 常见问题与排查技巧实录5.1 信号漂移与温漂问题传感器用了一段时间之后零位漂移是最常见的故障。一开始我以为只是温度引起的后来排查发现有一部分是传感器粘贴层的老化变形导致预紧力改变。解决办法是在机械结构上给传感器预留一个微调压片定期做一次在线零点校准。校准方法很简单让机器人双脚悬空采集一段没有受力状态下的压力值刷新零点偏移量。我写了一个开机自检流程每次上电自动执行一次零点校准很大程度上缓解了长期漂移问题。温漂更隐蔽。机器人跑一段时间后驱动器和电池发热会传导到脚底传感器温度升高几十度压力读数会明显偏大。如果没有温度补偿上层控制会误以为机器人受力突然增大甚至触发保护停机。我的经验是温度传感器不要只放在集合板上最好在压力阵列的几个关键区域也埋小尺寸的温度探头做分区补偿效果比单一温度点好很多。5.2 串扰、电磁干扰与线缆布置足底传感器工作在高频的电机驱动器旁边电磁干扰特别严重。第一次联调时电机一转压力数据就开始抖抖幅甚至能超过真值信号的 20%。排查下来主要有两个干扰来源一个是电机驱动器产生的高频开关噪声通过线束耦合进传感器的模拟信号另一个是传感器阵列的扫描信号与驱动器的 PWM 频率发生拍频干扰。解决方案分三步一是所有传感器线缆换成屏蔽双绞线屏蔽层单端接地二是压力阵列的模拟信号在进入 MCU 之前加一级 RC 低通滤波截止频率选在 500Hz 左右既能保留有效信号又能滤掉高频噪声三是在软件里做中值滤波滑动窗口不要太大3~5 个点即可太大会损失真实的冲击信息。这些措施落地之后电机全功率运行时压力数据的信噪比提升了不止一个量级。5.3 传感器寿命与量产一致性足底压力传感器是消耗品这一点做项目前要有心理准备。压阻薄膜虽然本身有柔性但在反复的冲击和弯曲应力作用下疲劳开裂是迟早的事。我实测下来普通的压阻薄膜在连续动态实验条件下大约几十万次冲击后灵敏度就开始衰减如果脚底安装时弯折半径太小寿命还会进一步缩短。为了应对量产一致性问题我建立了一个“通道级校准矩阵”方案每个传感器出厂后单独标定结果存进各自的EEPROM里。这样即使不同批次的传感器个体差异很大换上一只新脚之后系统也能通过读取校准数据自动适配不用重新写算法。这个方法虽然增加了产线工作量但省去了现场调试的大量时间长期看非常划算。5.4 问题速查表现象可能原因解决办法某个通道一直无数据线路断开或接触不良检查接插件用万用表逐段排查压力值缓慢偏移温漂或粘贴层老化做在线零点校准检查温度补偿数据跳变毛刺严重电磁干扰加屏蔽线和RC滤波检查单端接地压力值饱和不回落传感器过载或柔性基底损坏检查过去是否受过剧烈冲击更换传感器CoP位置跳动大边缘测点失效或融合权重不当检查边缘测点置信度权重重新标定多个通道同时乱跳共用电源噪声检查电源纹波加去耦电容必要时数字地与模拟地分开6. 项目后续可以扩展的方向项目做到这一步基础的功能已经跑通后面可以继续深挖的方向其实还有很多。一个方向是全足三维力感知。目前我只测了垂直压力也就是足底与地面之间的法向力但实际上足底还会受到水平方向上的摩擦力这个信息对打滑检测和步态控制同样重要。要测水平力可以考虑在足底集成小型的柔性三维力传感器或者通过压力分布的梯度变化推算摩擦力方向后者难度更大但不需要额外硬件。另一个方向是柔性电子皮肤。当前用的传感器阵列毕竟是硬质PCB上贴薄膜弯折能力有限。新一代的柔性传感器可以直接与机器人脚底的曲面贴合甚至做成类似人体的“皮肤”包含压力、温度、振动等多种感知功能。这类传感器如果稳定性做上去了会彻底改变机器人足底感知的形态。还有一个方向是边缘端的自主学习。机器人换了一个新的工作环境之后脚底感知系统的特征参数可能需要重新调整。如果感知算法能具备在线学习能力在运行过程中自动适应新路面和新工况整个系统的适用范围会大幅扩展。做这个项目最大的感受是传感器选型只是起点真正决定系统上限的是标定流程、融合算法、与上层控制的联动这些工程细节。机器人足底感知是一场典型的“战术后仰”式工程——看起来只是给机器人加了几十个压力测点实际上背后牵涉到机械设计、嵌入式采集、信号处理、控制理论等多个方向的协同。如果有人想在这个方向上入坑我建议先别追求算法多花哨老老实实把一只脚的数据采干净、标定准后面的一切才有意义。
返回列表