1. 先把这方向讲明白:电子皮肤到底卡在哪
这几年做机器人触觉的人应该都有一个共同感受:摄像头和激光雷达那边卷疯了,算法一个接一个往外冒,但触觉这块始终像块硬骨头,材料、电路、算法各干各的,很难串成一条完整的链路。你让机械臂夹个鸡蛋不难,让它闭着眼摸出鸡蛋和石头的区别,再在0.1秒内调整抓取力,传统方案就有点吃力了。所以我每次看到神经形态电子皮肤这种标题,都会多看一眼。这次某课题组把相关工作发在PNAS上,本质上就是冲着这个痛点去的:让机器人皮肤自己具备低功耗、低延迟的触觉感知处理能力,而不是把一大堆原始信号全部丢回中央处理器。
先说“电子皮肤”这个词。它不是说要做一块能打电话的仿生皮肤,而是指覆盖在机器人表面、能感知压力、振动、温度、滑移等物理量的柔性传感器阵列。核心要求是“像皮肤一样贴在异形表面”,所以材料要柔性、可拉伸,阵列要能覆盖大面积,信号要能稳定传出来。这个领域过去十几年一直在进步,但真正卡住量产和实用化的,不是传感器灵敏度不够,而是“感知后端配不上前端”:传感器阵列动辄成百上千个单元,每个单元都在产生连续波形,传统方案只能靠高速采样把数据全部攒下来再统一计算。于是功耗高、延迟大、线缆多,机械臂稍微动一下,数据量就爆炸。
这里就要引入“神经形态”这个概念了。没接触过的朋友可以把它理解成另一套计算范式:传统处理器是“拍照片”,一帧一帧地采样、存储、计算;神经形态芯片是“看变化”,只在事件发生的瞬间产生脉冲,处理器平时基本在待机。这套逻辑模仿的是生物神经系统,所以叫神经形态。用在触觉上会出现一个很有意思的化学反应:触觉本身就是低频的交互事件,不是连续的高清视频流。你摸一下、捏一下、滑一下,真正有信息量的是“变化”本身,而不是每一毫秒的压力绝对值。因此,用事件驱动的方式去做触觉识别,理论上可以在功耗、延迟、数据量上同时实现数量级的改善。这也是PNAS这篇工作真正值得拆开看的地方。
2. 神经形态触觉的整体思路
2.1 对比传统方案:你不是在换传感器,是在换处理哲学
传统触觉感知链路一般是这样的:柔性压力传感器阵列,每个单元输出一个模拟电压或电容变化,通过ADC(模数转换器)以固定频率采样,打包成帧数据,经过总线传输给主控,主控跑一个卷积神经网络或者阈值逻辑,最后得出“这物体是软的还是硬的”“有没有在滑动”之类的结论。这套链路的问题不是某一个环节坏掉了,而是每个环节都在浪费资源:
第一,采样冗余。传感器一分钟可能只出现几次有效动作,但ADC一直在以几百赫兹采样,大量样本没有信息量,白白消耗功耗。
第二,传输瓶颈。阵列一扩大,数据量随单元数量线性上涨,线束和带宽很快就撑不住。曾有做压力鞋垫的人跟我说,32个采样点、100Hz采样、16位精度,裸数据就接近每秒64KB,看起来不大,但机器人全身如果铺几千个点,这个数据量会彻底失控。
第三,延迟叠加。从采样到传到主控再到推理,每一跳都有毫秒级延迟,叠加起来往往就是几十毫秒。而人类触觉的闭环反馈是远快于这个量级的,你手指碰到热锅盖,几乎瞬间就缩回来了。机器人如果每次都要等主控算完再动,很多精巧的抓取操作根本做不了。
神经形态路线的核心就是砍掉这三层开销。传感器不连续输出波形,而是把“压力变化的瞬间”编码成脉冲事件;处理端也不是对着密密麻麻的采样点做卷积,而是接收稀疏的事件流,直接由尖峰神经网络(SNN)在线计算。这套思路带来的变化是结构性的:省掉了大量ADC和传输带宽,主控无事可做的时候处理器几乎不进功耗,整个感知闭环从“采样—传输—计算”变成了“事件触发—即时响应”。
2.2 为什么是SNN而不是CNN/Transformer
如果你已经习惯了深度学习那一套,可能会问:神经网络做触觉识别我懂,但为什么非要换成尖峰神经网络(SNN)?直接拿CNN跑脉冲数据行不行?答案是能,但效率完全不同。
我在之前的文章里聊过CNN在事件相机上的局限,核心矛盾是一样的:CNN是为密集张量设计的,而事件流是稀疏的、异步的、有时间戳的。你要用CNN处理事件流,要么把事件累积成帧,这会丢掉时间精度;要么用图神经网络处理事件图,复杂度又太高。SNN天然匹配这个数据形态:每个神经元维护一个膜电位,输入脉冲到达时电位累加,超过阈值就输出一个脉冲。没有输入脉冲的时候,神经元不计算、不产出、不耗能。这种方式不仅在处理逻辑上更贴近生物触觉,而且在硬件部署上可以做到“事件驱动推理”,同样一次识别任务,神经元被真正激活的数量远少于深度学习网络的参数规模。
另外,触觉信号有个跟视觉不同的特点:它几乎完全是时序相关的。你摸一个物体,判断它是粗糙还是光滑,靠的不是某一点的瞬时压力,而是指尖划过表面时产生的振动序列。你的大脑要分析的是“这个振动模式是规律的还是混沌的”“幅度是大的还是小的”“频率是高的还是低的”。这类问题恰恰是时域脉冲编码的优势区。SNN中的时序依赖可塑性(STDP)机制可以对脉冲序列的时序关系做无监督学习,不需要大量标注样本,这在触觉数据难以采集的现实条件下很重要。
2.3 系统级设计:传感器不再只是传感器
做这类工作最忌讳的是“焊一个传感器接到示波器上”就宣布成功。真正让它能够走向应用的,是整个系统从材料到计算的一体化设计。我拆解一下这类系统的典型架构,你会发现每一层都被重新定义过:
感知层——柔性传感器阵列不仅负责“感知压力”,还需要具备把模拟量转换成脉冲序列的能力。有些团队直接在传感器里集成了振荡电路或阈值比较器,压力超过设定阈值就输出一个电压尖峰;有些则先输出模拟信号,再交给紧邻的神经形态芯片完成编码。这个“编码位置”很关键,决定了大面积传感器能否摆脱密集线缆。
处理层——紧贴传感器阵列的是一块低功耗神经形态处理器芯片,内部的积分发放神经元模型接收脉冲输入,完成特征提取和分类。它的特点是本地化处理:传感器产生的脉冲直接进芯片,芯片输出的就是分类结果,不需要把原始数据搬回主控。
执行层——主控芯片只接收“触摸事件类别”和“紧要程度”这样的高层语义信息。比如机器人需要知道的是“现在物体正在滑动”这个结论,而不是“第17号传感器压力增加了5kPa”这种原始数据。这个抽象层次的变化,直接改变了机器人触觉闭环的响应速度。
这套架构放在一起看,你会发现它不再是一块“传感器”,而是一块“触觉感知处理单元”。这才是神经形态电子皮肤区别于传统传感器设计的根本特征。PNAS这篇工作报道的成果,恰恰是把这个体系统一验证了一遍,证明了从材料、电路到算法可以协同工作,而不是三个领域各自为政。
3. 核心环节实现:从触觉脉冲到物体识别
3.1 触觉信息怎么做编码
在神经形态系统里,传感器输出的不是“压力数值”,而是一串脉冲。最常见的编码方式有两种,理解这两种方式对后续调试很有帮助。
第一种是频率编码,也叫速率编码。压力越大,单位时间内脉冲数越多。这种编码方式简单直接,跟传统采样信号有点类似,容易理解,缺点是很费脉冲——持续高压环境会让神经元一直高频发放,功耗优势被削弱。
第二种是时间编码,脉冲只表示事件的发生时刻。比如压力变化超过阈值时产生一个脉冲,脉冲的时间戳代表了事件发生的精确时刻,脉冲本身不携带幅度信息。这种方式信息效率最高,但后续算法必须处理“稀疏事件流”,对时间分辨率要求比较高。
实际做系统时往往采用混合思路:不同压力等级触发不同的神经元发放,既保留了幅度信息,又不至于让每个事件都变成一串等高脉冲。从我接触过的项目看,这种做法在小面积阵列上调试起来最稳,因为它给后续SNN提供的信息更加丰富,SPIRIT也容易调出来。
还有一个不得不提的细节:触觉“变化”包含两类,一类是静态接触(比如轻轻按压),一类是动态事件(比如滑动、振动、滑移)。纯压力阈值编码对静态接触有效,但动态事件需要额外的振动敏感单元来感知,比如压电式传感器。好的电子皮肤设计会把静态和动态两类传感器混合排布,这个设计选择对后续识别成功率的影响极大。只做纯压力阵列的话,抓手一滑你根本感知不到。
3.2 尖峰神经网络跑起来是什么样
SNN的结构可以很简洁。输入层接收来自传感器阵元的脉冲序列,中间层通过带权重的突触连接汇集脉冲,输出层对应不同的触觉类别。每个神经元就是一个积分发放模型,膜电位V随时间变化,收到输入脉冲就累加,当V超过阈值Vth时发放输出脉冲,然后V重置。
我在本项目拆解的时候会重点看三个参数。第一个是膜电位的时间常数,它决定了神经元对过去输入的“记忆长度”。时间常数大,神经元会把几百毫秒内的输入脉冲都积累起来,适合识别慢变压力模式;时间常数小,神经元只对快速变化的瞬态敏感,适合识别振动特征。第二个是发放阈值,阈值过低会导致神经元动不动就放电,事件流变得稠密,计算量上去了;阈值过高又会漏掉重要事件,识别灵敏度和准确率都会掉下来。第三个是突触权重的学习规则,目前常用的是STDP或ANN-to-SNN转换得到的预训练权重。
用SNN跑触觉识别任务,我建议你考虑一个优势:它可以利用脉冲到达的相对时序来区分不同的触觉模式。举个具体例子,手指轻轻搭在物体表面时,压力传感器阵列的脉冲到达顺序是“接触中心先响应、四周后响应”;但发生滑移时,脉冲到达顺序完全反过来,并且伴随高频振动脉冲。这种时序模式上的差异,在CNN中是很难直接利用的,SNN却能天然捕捉。这是它在这个场景下最有趣的地方。
3.3 识别与闭环评估
评估一个神经形态触觉系统,只看准确率是不够的。我在帮别人审这类方案的时候会列一个评估维度表,至少要看四个指标:识别准确率(分类任务)、端到端延迟(从触觉发生到机器人完成响应)、功耗(整个感算链路的总体功耗)、鲁棒性(不同按压力度、不同接触角度下的稳定性)。
系统实现部分可以参考这样一个简化流程。先用机械臂带动传感器阵列接触一组标准物体,物体表面材质从光滑玻璃到粗糙织物不等,每个物体重复多次接触并记录脉冲序列;然后把采集到的事件流分成训练集和测试集。训练阶段,如果使用STDP做无监督学习,网络会自动形成对高频振动特征和低频压力特征有选择性响应的神经元;如果要识别固定类别,则加入一层线性分类器读取神经元群体的发放状态。测试阶段不需要把全部事件流输进处理器,而是让芯片实时接收事件、实时推理,记录每次识别从事件发生到输出结果的时间差。实测下来这类系统的延迟通常能压到几毫秒到十几毫秒量级,而传统方案在同样任务上往往是50毫秒起步。
功耗方面要特别注意“峰值功耗”和“平均功耗”两个口径。神经形态芯片的平均功耗可以很低,因为事件稀疏、神经元大部分时间在休息;但爆发性事件(比如猛拍一下)会瞬间激活大量神经元,峰值功耗会高出不少。做嵌入式集成时一定要按峰值功耗去选电源和热设计,否则板子会出莫名其妙的问题。
3.4 通信与系统集成细节
很多人在实验室里用分立器件搭出了不错的识别效果,但一上机器人就崩,问题多半出在通信环节。神经形态芯片输出的脉冲流如果还是按传统串口或SPI一帧帧传,脉冲的时间精度很容易丢失。我一般建议采用事件驱动的总线协议,比如并行AER(Address-Event Representation)或者高速串行事件接口,确保每个脉冲的时间戳精度在微秒级。另一个常用的集成方式是让神经形态芯片与主控共享内存映射区域,芯片直接写事件描述符,主控通过中断感知事件到达,避免软件轮询。这些细节在论文里往往不会细讲,但实际做系统集成时踩的坑都在这里。
此外,阵列供电和信号完整性也是容易翻车的地方。柔性传感器阵列的走线长、密、容易引入串扰和电磁噪声,脉冲信号一旦被干扰,SNN识别准确率马上崩。我见过一个项目,传感器阵列没问题、芯片算法没问题,就是柔性排线离电机驱动线太近,每次机械臂一动作,识别分类就乱套。后来在排线中间加了屏蔽层、调低了脉冲线阻抗,问题才解决。做这类系统的时候,建议一开始就把屏蔽和隔离的预算和空间预留出来。
4. 避坑与调试实操心得
4.1 神经形态芯片选型这些坑先避开
如果你打算复现类似系统,选型是第一步,也是最容易懵的一步。市面上的神经形态处理方案大致分三类,适合的场景不一样。
第一类是通用事件处理器,可直接处理AER脉冲流,灵活性好,能跑各种SNN算法,但是功耗和面积相对大,适合做研究验证。第二类是嵌入式低功耗芯片,专门面向端侧事件推理,典型指标在毫瓦级甚至微瓦级,适合做机器人集成,但编程自由度不如通用方案。第三类是FPGA实现,自己写神经元模型和网络结构,灵活度最高但开发成本也高。
我的建议是:第一版系统先用通用事件处理器或FPGA把算法跑通,验证传感器阵列和编码方案的匹配性;确认识别效果没问题后,再移植到低功耗嵌入式芯片上做产品化。如果一开始就上低功耗芯片,调试工具少、信号可视化麻烦,你会非常痛苦。
选型时还要注意一个很少有人提的坑:神经元参数的硬件实现范围。不同芯片对膜电位时间常数的支持范围差别很大,有的芯片只能支持毫秒量级的时间常数,如果你的触觉特征需要几百毫秒级别的积分窗口才能区分,这颗芯片就不适合。所以在选型前,一定要先拿自己的触觉数据做几分钟的仿真,确认关键的SNN超参在目标芯片上能映射实现。
4.2 传感器阵列与编码电路联调的关键
传感器阵列和神经形态芯片之间的接口电路是整个系统最容易出问题的环节。传感器物理信号到脉冲序列的转换,精度直接影响后续一切。我曾经调试过一块压阻式阵列,材料本身没问题,但接口电路用了单阈值比较器,导致压力刚超过阈值时的脉冲抖动非常严重。后来换了带回差特性的施密特触发器做阈值判断,抖动问题基本消除。建议你在Encoder比较器后级一定加滞回电路,并保留一个可调的阈值电压引脚,方便在线调整。
另一个常见问题是动态范围不匹配。部分传感器在大压力下信号饱和,编码电路会连续输出高频脉冲,直接冲爆下游SNN。解决思路有两种:一是提高阈值电压,让大压力不触发过密脉冲;二是对传感器输出做对数压缩,再进入比较器。我推荐后者,因为对数压缩在保持动态范围的同时不牺牲小信号的灵敏度,也更贴近生物感受器的响应特性。
温度漂移也是电子皮肤容易忽略的问题。柔性基板的热胀冷缩会改变传感器的零位输出,导致同样接触压力下,早上和下午的脉冲率明显不同。我在项目里习惯加一路空闲通道传感器,专门测量环境温度相关漂移,然后在算法里做基线校正。这个做法简单有效,强烈建议采用。
4.3 SNN训练与调参技巧
虽然SNN适合事件驱动,但直接训练时往往遇到推理结果不稳定、准确率不如同等规模CNN的情况。我的调试经验是把训练分成两阶段。第一阶段用ANN-to-SNN转换:先训练一个普通卷积网络,然后把权重转换到SNN中,把ReLU换成积分发放神经元。这个阶段解决特征提取能力问题,因为CNN的反向传播训练非常成熟稳定,转换后的SNN识别准确率不会差太多。第二阶段再用少量真实触觉事件流的时序信息做STDP微调,让网络学会利用时序模式。这种两阶段策略比纯STDP训练好上手得多,也是目前工程落地的主流做法。
调参的时候,膜电位时间常数建议从几毫秒往上调,每次翻倍,直到验证集准确率不再提升。发放阈值建议以“触发脉冲率不超过事件流总脉冲数的5%”为标准去设定,这样可以避免网络因为脉冲过密而进入冗余发放状态。还有个容易被忽略的参数是突触延迟,不同传感器位置距离芯片的走线长度不同,到达时间天然有差异;直接在SNN模型里给不同阵元设置不同的突触延迟,往往能抵消除布线不等长带来的时序误差。
5. 踩坑实录:从论文级到机器人真机的一地鸡毛
我在某次实际项目里接触过神经形态电子皮肤的移植。实验室验证时,传感器阵列贴在平面上,识别各种材质没大问题。等真正装到机械臂末端,问题先出在机械应力上:机械臂高速运动时产生的惯性力会让传感器阵列产生大量虚假触发脉冲。这其实是神经形态触觉系统在机器人应用上最容易被低估的一个问题。传统传感器有采样率,你可以通过滤波把高频运动伪迹滤掉;事件驱动的传感器没有“帧”概念,运动伪迹直接混进事件流,算法很难区分“这个振动是接触产生的还是运动产生的”。
后来我试过两个方向来缓解:一个是在算法层面对运动状态做门控,读取机械臂自身的IMU信号,当末端加速度超过一定阈值时暂时抑制触摸事件上报;另一个是在传感器结构上做隔振,在阵列和机械臂法兰之间加柔性缓冲层。两个方向结合之后,误触发才降到可接受范围。如果你打算把电子皮肤搬上真机,这块一定提前考虑,别等动了机械臂再排查。
第二个大坑是高密度阵列的标定和一致性。阵列每个单元的初始接触状态和灵敏度都不一样,哪怕是同一批次同工艺的传感器,单元之间灵敏度和零点都可能偏差20%以上。但SNN要求输入脉冲的“含义”一致,否则同样的压力模式在不同单元上产生不同脉冲模式。我在调试时花了大量时间逐单元标定和归一化。建议做两块标定板:一块标准软质材料,一块标准硬质材料,在固定力下对阵列每个单元做两点标定,然后算出每个单元的增益和偏移,在编码阶段做补偿。这个步骤耗时,但直接决定了系统能不能跨设备复现,是“实验室能跑”和“产品能用”的分水岭。
第三个坑来自事件流数据集的稀缺。为什么很多人宁可把传感器输出抓帧保存、用CNN处理,也不愿意直接处理脉冲?因为事件流数据的采集和标注比帧数据麻烦很多,现有工具链几乎为零。我的建议是先不要追求完整的事件流数据集,而是在编码端并行输出两类数据:一类是传统帧数据用于离线训练卷积网络,一类是事件流用于SNN推理。训练的时候先用帧数据把语义标签跑通,再把模型转换成SNN,让事件流在推理阶段直接复用。这条“帧事件并行+训练转换”的路线,能让项目启动速度快很多,很多神经形态团队也是这么落地的。
6. 这活儿后续还能往哪儿延伸
如果你看完上面这些觉得方向有意思,我可以讲几个我觉得后续最有潜力的延伸点。
一个是高密度可扩展。这套架构最值钱的资产,其实是“事件驱动降低数据量”带来的可扩展性。当一个系统使用SNN处理事件流时,新增几百个传感器节点,不需要同步扩大带宽,因为新增节点带来的是“更多潜在事件”,而不是“更多持续数据”。这意味着电子皮肤从实验板的几十个像素扩展到机器人全身的几千个像素,架构上具备可行性。很多团队现在在做的事,就是让“大面积覆盖+低功耗无线+边缘推理”成为可能,这个前景比单点识别大得多。
一个是假肢和可穿戴方向的闭环应用。神经形态电子皮肤的低功耗和低延迟特性,对电池供电的假肢和可穿戴都很友好。指端的触觉信息如果能以事件形式直接传回刺激器,并让用户感受到“接触变化”,就实现了真正意义上的双向仿生感知闭环。虽然现在还停留在研究与临床前验证阶段,但它是我认为最有人文价值的应用方向。
另一个是人形机器人的全身感知。人形机器人表面的触觉覆盖基本还非常粗糙,很多机器人手掌上只有几个压力点,远达不到灵巧操作的要求。神经形态电子皮肤提供了一个现实的等待路径:大面积阵列不炸数据,事件驱动不炸功耗,时域感知不炸延迟。如果未来人形机器人要像人一样完成精细操作,它的皮肤大概率是神经形态的。现在做的每一个传感器阵元、每一个SNN分类器,都在往那个方向填砖。
从工程角度看,还有一个好玩的点:把电子皮肤和边缘AI芯片做进同一个模组。当前的主流做法还是传感器阵列和芯片分开布置,中间靠排线连接,但柔性混合电子技术已经可以把低功耗处理芯片直接嵌到柔性电路板上,做到真正意义上的“柔性感算一体”。如果这一层打通,电子皮肤的形态自由度会大幅提升,甚至可以弯折、揉捏、贴到任意曲面,而不担心线路断裂和信号串扰。
我个人在实际操作中的体会是:神经形态电子皮肤最难的从来不是某个单一环节。传感器灵敏度可以买,芯片性能可以选,算法可以调,真正的挑战是把材料、电路、算法、机械集成拧成一股绳。PNAS这篇工作最大的价值,不是某一个参数刷新了记录,而是它在系统和交叉层面验证了这条路能走通,让后来的人在做技术选型时更有底气。如果你正准备做类似的东西,我建议不要急着买最贵的芯片、做最大规模的阵列,先拿一块小阵列,配合一个现成的神经形态开发板,把“传感器编码到SNN推理”这个最小闭环跑通,你就会对整套系统的手感有直接认识。接下来每一步加阵列、加功能、加真机测试,都会顺很多。
最后分享一个调试小技巧:给SNN加上脉冲率可视化面板,让实验过程中的每一路事件脉冲都在时间轴上实时显示。我踩过很多次坑后才发现,触觉时序特征是否清晰、脉冲是否混乱,其实一眼就能从脉冲图上看出来,比闷头去调参数高效得多。神经形态系统最大的特点是“事件可见”,利用好这个特点,调试效率会翻倍。