☰
双编码器关节力矩感知:从硬件选型到标定补偿的工程实践
2026/9/28 1:31:26 网站建设 项目流程

1. 为什么单编码器在关节力矩感知中总差一口气

做过机器人关节控制的人多半有过这种体验:明明电流环调得很稳,位置环也没问题,可一旦让关节去接触一个刚性表面,力控就开始发飘,要么冲过头,要么软绵绵使不上劲。很多人第一反应是控制算法不行,PID参数没调好,或者力传感器精度不够。但真正把问题拆开看,根子往往不在算法,而在你根本不知道关节输出端到底转了多少。

传统关节方案里,编码器一般只装在电机端。电机转了多少圈、什么角度,编码器一清二楚。可电机和关节输出之间还夹着减速器——谐波减速器也好,行星减速器也好,RV减速器也好——这个环节才是麻烦的来源。减速器不是理想刚体,它有柔性、有回差、有摩擦、有温漂。电机端编码器读到的位置,乘以减速比之后,和关节实际输出位置之间,存在一个随负载变化的偏差。这个偏差在位置控制模式下可能还能忍,因为位置环会把它当扰动压下去;但在力矩感知场景里,这个偏差直接决定了你算出来的力矩对不对。

我举个具体数字。假设一个谐波减速器减速比100:1,电机端编码器分辨率是19位,也就是单圈524288个脉冲。理论上关节输出端的分辨率是524288×100,看起来高得离谱。但实际上,谐波减速器的传动误差在空载时可能就有几十角秒,带载之后柔轮变形会让这个误差进一步放大。你拿电机端位置反推输出端位置,再结合电流估算力矩,误差可能到额定力矩的5%甚至10%。对于需要精细力控的场景,比如装配、打磨、医疗康复,这个精度根本不够用。

所以问题就变成了:怎么在不拆减速器的前提下,直接测到关节输出端的真实角度。答案就是双编码器方案——电机端一个,关节输出端再装一个。两个编码器同时读数,它们之间的差值就包含了减速器的弹性变形、回差、摩擦等全部信息。这个差值乘以减速器的刚度模型,就能反推出关节实际承受的力矩。这就是双编码器做力矩感知的核心逻辑。

这个思路听起来简单,但真正落地的时候,坑非常多。编码器选型、安装方式、信号同步、标定流程、温度补偿,每一步都有讲究。下面我按实际做项目的顺序,把整个链路拆开讲。

2. 双编码器的硬件选型与安装:别让第一个坑绊住你

2.1 电机端和输出端编码器的选型差异

电机端编码器通常跟着伺服电机原厂走,增量式或绝对值式都有,分辨率一般够用。但输出端编码器是你要自己加的,选型逻辑完全不同。

输出端编码器的第一约束是尺寸。关节输出端往往空间极其有限,尤其是协作机器人关节,直径可能只有几十毫米。这时候磁编码器比光电编码器有优势,因为磁编码器的芯片可以很小,磁铁可以做得很薄。像AS5047P这类磁编码器芯片,14位分辨率,SPI接口,外围电路简单,很多关节方案都在用。但磁编码器有个问题:对磁场干扰敏感。关节里电机线、刹车线、电源线一大堆,如果磁铁和芯片的间隙没控制好,或者附近有铁磁材料,读数就会跳。

光电编码器精度更高,但体积大,而且对灰尘和油污敏感。如果你的关节是密封的,光电编码器可以用;如果是开放式或者半密封,磁编码器更稳妥。

第二约束是接口类型。输出端编码器离主控板可能有一段距离,增量式编码器的ABZ信号在长线传输时容易受干扰,尤其是Z信号,一旦丢脉冲,绝对位置就没了。所以输出端编码器优先选绝对值式,SSI、BiSS-C、SPI都可以。绝对值编码器上电就知道位置,不需要寻相,这对关节初始化非常友好。

第三约束是分辨率匹配。输出端编码器的分辨率不需要和电机端一样高,因为减速比已经放大了。但也不能太低,否则力矩感知的分辨率不够。一般来说,输出端编码器有效位数在12到16位之间比较合适。太低的话,减速器柔性变形引起的角度变化可能只有几个LSB,根本分辨不出来。

2.2 安装偏心与轴向间隙:两个最容易被忽视的误差源

编码器装上去,不是拧紧螺丝就完事了。安装偏心是输出端编码器最大的误差来源之一。假设编码器码盘半径10毫米,安装偏心0.05毫米,看起来很小,但引起的角度误差是0.05/10弧度,约0.29度,也就是大约17角分。这个误差是周期性的,每转一圈出现一次,直接叠加在力矩感知结果上。

磁编码器对偏心更敏感。磁铁和芯片之间的间隙变化会直接影响磁场强度,进而影响读数。所以磁编码器的安装结构必须保证磁铁和芯片的同轴度,通常要求偏心小于0.1毫米,间隙控制在1到3毫米之间,具体看芯片手册。

轴向间隙是另一个坑。如果编码器码盘或者磁铁在轴向有窜动,读数也会变。光电编码器的码盘轴向窜动会导致光强变化,磁编码器的磁铁轴向窜动会导致磁场分布变化。解决办法是在结构设计时用轴承或者定位台阶把轴向位置锁死,不要靠垫片或者胶水来定位。

提示:输出端编码器的安装结构最好做成可微调的,比如用偏心套或者顶丝结构,方便在装配时用千分表打表调整同轴度。一次性压装到位很难保证精度。

2.3 线缆布线与屏蔽:信号完整性决定下限

输出端编码器的线缆通常要和电机动力线一起走线,如果屏蔽没做好,编码器信号会被PWM噪声干扰。我见过最典型的故障是:电机一使能,编码器读数就开始跳,电机不转的时候一切正常。这就是动力线对编码器线的容性耦合。

解决办法有几个。第一,编码器线用双绞屏蔽线,屏蔽层单端接地,接在控制器侧。第二,编码器线和动力线尽量分开走,如果必须并行,保持至少5厘米以上的间距。第三,编码器电源和电机电源分开供电,或者至少在编码器电源入口加LC滤波。第四,如果用的是SPI或者SSI这种数字接口,降低时钟频率也能减少干扰敏感度。

这些措施看起来琐碎,但实际项目里,信号完整性问题导致的调试时间往往比算法调试还长。

3. 从两路角度到力矩:解算链路的核心环节

3.1 减速器模型:为什么不能简单用线性刚度

拿到电机端角度θ_m和输出端角度θ_o之后,最直观的想法是:差值Δθ = θ_m / N - θ_o,其中N是减速比。然后力矩τ = K × Δθ,K是减速器刚度。这个公式在负载变化不大、温度稳定的情况下勉强能用,但稍微认真一点就会发现不够。

谐波减速器的刚度曲线是非线性的。空载附近有一段低刚度区,因为柔轮和刚轮的齿啮合还没完全贴紧;负载增大后刚度上升,接近线性;再大负载又会出现刚度下降,因为柔轮开始屈服。所以用一个常数K去算力矩,在小力矩和大力矩两端都会偏。

更合理的做法是建立分段刚度模型或者多项式刚度模型。分段模型就是把力矩范围分成几段,每段用不同的K。多项式模型是用一个三次或五次多项式拟合Δθ和τ的关系。标定的时候,用测力计或者标准砝码给关节加载,记录不同负载下的Δθ,然后拟合出刚度曲线。

回差是另一个必须考虑的因素。减速器正转和反转时,同样的Δθ对应的力矩可能不一样,因为齿隙和摩擦方向变了。处理回差有两种思路:一种是做方向判断,正转和反转用不同的刚度曲线;另一种是在控制上避免频繁换向,或者换向时做补偿。

3.2 温度漂移:一个绕不开的慢变量

减速器工作一段时间后温度会上升,谐波减速器的柔轮和刚轮热膨胀系数不同,导致刚度变化。同时,编码器本身的温漂也会引入误差。磁编码器的温漂通常在几十ppm每摄氏度,看起来不大,但关节温度从25度升到60度,35度的温差乘以100ppm就是0.35%的误差。对于高精度力控,这个量级不能忽略。

工程上的做法是:在关节里埋一个温度传感器,比如NTC或者PT100,贴在减速器壳体上。标定的时候,在不同温度下分别测刚度曲线,然后做温度补偿。如果不想做全温度标定,至少测两个温度点,用线性插值。更简单的做法是在控制算法里加一个温度相关的修正系数,根据实测温度调整K值。

我个人的经验是,如果关节连续工作不超过半小时,温度漂移可以暂时不管;但如果要长时间运行,温度补偿必须做,否则力控精度会慢慢漂走。

3.3 编码器同步采样:时间对齐比分辨率更重要

双编码器方案里,电机端和输出端编码器的采样时刻必须对齐。如果电机端编码器是1kHz采样,输出端编码器是100Hz采样,那在电机快速运动时,两个角度对应的根本不是同一时刻,算出来的Δθ会包含动态误差。

理想情况下,两个编码器用同一个触发信号同步采样,或者用同一颗MCU的两个接口同时读取。如果做不到硬件同步,至少要在软件里做时间戳对齐,用插值把两个角度归算到同一时刻。插值会引入额外误差,所以能硬件同步就硬件同步。

另外,编码器读数的延迟也要考虑。SPI接口的磁编码器,一次读取可能需要几十微秒,如果MCU轮询多个编码器,最后一个读到的数据可能已经滞后了几百微秒。在低速场合问题不大,但在高速或者高动态力控场合,这个延迟会导致相位滞后,影响控制稳定性。

4. 标定流程:把理论公式变成能用的参数

4.1 静态标定:用砝码和测力计建立力矩-角度映射

静态标定是基础。把关节固定在一个刚性支架上,输出端装一个力臂,力臂末端挂砝码或者用测力计拉。每加一个负载,等系统稳定后记录电机端角度、输出端角度和实际力矩。负载从零加到额定,再从额定减到零,正反两个方向都做,这样能同时得到刚度曲线和回差。

标定的时候要注意几点。第一,每个负载点要等足够长时间,让减速器弹性变形完全稳定,通常需要几秒到几十秒。第二,环境温度要记录,最好在恒温环境下做。第三,负载点要足够密,尤其是小力矩段,因为非线性最明显。第四,重复加载三次以上,取平均,剔除异常点。

标定数据的处理,我一般用Python做。先把Δθ和τ画出来,看曲线形状,然后决定用几阶多项式拟合。拟合完之后,把残差画出来,如果残差有周期性,说明安装偏心没调好;如果残差有迟滞环,说明回差没补偿。

4.2 动态标定:辨识刚度和阻尼

静态标定只给了刚度,但关节在运动时还有阻尼和惯性。如果要做高动态力控,比如碰撞检测或者柔顺控制,动态参数也得辨识。

动态标定的方法是用系统辨识。给关节一个扫频激励或者阶跃激励,记录输入力矩和输出角度,然后用最小二乘法或者子空间法辨识出二阶模型参数。这个模型可以写成:

τ = K × Δθ + D × d(Δθ)/dt + J × d²θ_o/dt²

其中K是刚度,D是阻尼,J是等效惯量。辨识出这三个参数之后,力控算法就能做前馈补偿,响应会快很多。

动态标定比静态标定麻烦,需要能施加动态激励的设备,比如电磁激振器或者液压缸。如果条件有限,至少做一个阶跃响应,看看超调量和上升时间,粗略估计阻尼比。

4.3 标定数据的存储与调用

标定出来的参数不能只存在电脑里,要写进控制器的非易失存储器。通常我会把刚度曲线做成查找表,按Δθ分区间存K值,运行时根据Δθ查表插值。温度补偿系数也一起存。如果控制器资源够,直接把多项式系数存进去,运行时算多项式。

标定参数最好带版本号和日期,因为减速器拆装之后标定会变。每次拆装或者更换减速器,都要重新标定。我见过有人换了减速器没重新标定,结果力控直接失控,差点把末端工具撞坏。

5. 实测中那些文档不会告诉你的坑

5.1 编码器寻相与初始位置对齐

绝对值编码器上电就有位置,但电机端编码器和输出端编码器的零位不一定对齐。如果零位偏差没标定,Δθ的绝对值就是错的,算出来的力矩会有一个恒定偏置。

对齐零位的方法:在空载状态下,让关节缓慢正转和反转,记录Δθ的平均值,把这个平均值作为零偏补偿掉。更严格的做法是用机械限位或者工装把关节固定在一个已知角度,然后同时读两个编码器,算出零位偏差。

磁编码器的零位还和磁铁安装角度有关。如果磁铁装歪了,零位偏差会随角度变化,不是常数。这时候需要做偏心补偿,把零位偏差拟合成角度的正弦函数,运行时实时补偿。

5.2 减速器刚度随磨损变化

减速器用久了会磨损,刚度会下降,回差会增大。如果标定参数一直不更新,力控精度会慢慢变差。工程上的做法是定期做在线辨识,比如在关节空闲时做小幅度往复运动,根据角度和电流估算当前刚度,和标定值对比,偏差超过阈值就报警或者自动更新。

在线辨识的难点是区分负载变化和刚度变化。如果关节上挂着工具,负载变了,Δθ也会变,但这不是刚度变了。所以在线辨识最好在已知负载或者空载条件下做。

5.3 电磁干扰导致的编码器跳变

前面提过屏蔽,但实际现场干扰源很多。我遇到过一种情况:编码器读数偶尔跳变几个LSB,频率不高,但足以让力控出现尖峰。查了很久,最后发现是编码器线缆的屏蔽层在接头处没压好,形成了一段天线。

处理这类问题,除了做好屏蔽,还可以在软件里加滤波。但滤波会引入延迟,所以要用自适应滤波或者限幅滤波,只在检测到跳变时生效,正常时不滤波。限幅滤波的逻辑很简单:如果当前读数和上一次读数的差值超过阈值,就认为跳变,用上一次的值加上一个最大变化量代替。

5.4 双编码器方案的性价比权衡

双编码器方案精度高,但成本也高。多一个编码器、多一套线缆、多一路接口,还要做标定和补偿。如果关节本身精度要求不高,或者力控只是辅助功能,单编码器加电流估算可能就够了。

我的建议是:如果力控精度要求在额定力矩的2%以内,或者需要做碰撞检测和柔顺控制,双编码器值得上。如果只是做简单的力矩限制或者过载保护,单编码器加电流环够用。选方案之前先明确需求,不要为了技术而技术。

6. 从关节到整机:双编码器方案的扩展思考

单个关节的双编码器方案跑通之后,整机应用还有几个问题要处理。

第一个是多关节同步。一台六轴机器人有六个关节,每个关节都有双编码器,总共十二路编码器数据。如果每个关节独立采样,整机的力控协调会很困难。通常的做法是用EtherCAT或者CAN FD总线把编码器数据汇总到主控,用分布式时钟同步。EtherCAT的分布式时钟精度可以到纳秒级,足够用。

第二个是重力补偿。关节力矩感知到的不仅是外力,还有自身重力和工具重力。做力控之前要把重力项补偿掉。重力补偿需要知道每个关节的角度和连杆质量、质心位置。这些参数可以通过辨识得到,也可以用CAD模型算。补偿的精度直接影响外力感知的精度。

第三个是碰撞检测与安全。双编码器方案的一个天然优势是能快速检测碰撞。因为输出端编码器直接测关节角度,一旦发生碰撞,输出端角度会突变,而电机端角度因为减速器柔性和电机惯量,变化会滞后。两个角度的差值突变就可以作为碰撞信号。这个信号比电流突变更早、更可靠。很多协作机器人的碰撞检测就是基于这个原理。

第四个是与视觉和力传感器的融合。双编码器提供的是关节级力矩信息,视觉提供的是全局位置信息,力传感器提供的是末端力信息。三者融合可以做更复杂的操作,比如轴孔装配、表面跟踪。融合的算法可以用卡尔曼滤波或者因子图优化,这里不展开。

7. 一些实操层面的经验碎片

编码器线缆的接头尽量用带锁紧的,比如JST或者Molex的带卡扣系列。关节运动时线缆会动,普通插头容易松。松了之后读数跳变,排查起来很费时间。

标定工装的设计要方便重复拆装。如果每次标定都要重新对零位,效率太低。我一般会做一个带定位销的工装,装上去就自动对齐,省去对零步骤。

磁编码器的磁铁要用非磁性材料做支架,比如铝或者塑料。如果用钢做支架,磁路会变,读数会偏。磁铁本身用钕铁硼,但要注意温度退磁,工作温度不要超过磁铁牌号允许的上限。

SPI读取磁编码器的时候,注意时序。有些芯片要求CS拉低之后等几个微秒再发时钟,有些芯片要求时钟空闲电平为高。看手册,别想当然。

如果关节里同时有电机编码器和输出编码器,电源要分开滤波。电机编码器通常由伺服驱动器供电,输出编码器由主控供电,两者地线要单点连接,避免地环路。

温度传感器贴的位置要尽量靠近减速器柔轮,因为柔轮是主要热源。贴在壳体外面会有热阻,响应慢。如果条件允许,在壳体上打一个小孔,把传感器塞进去用导热胶固定。

最后,双编码器方案的调试顺序建议是:先单独调通两个编码器的读数,确认各自准确;再做零位对齐;再做静态标定;再做动态标定;最后上力控算法。不要跳步,跳步之后出了问题很难定位是哪个环节的错。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询