
一个六维力传感器,不是一整块铁。它内部有一个通过精密加工形成的弹性体,弹性体上贴着应变片。我们可以把它想象成一个小型的“测力弹簧”。
物理结构上,它明确分为两部分:
[上安装面] <-- 弹性体上端 || (传感器内部是悬空的弹性梁,贴有应变片)[下安装面] <-- 弹性体下端
上安装面:固定在机械臂手腕上。
下安装面:固定在你的工具上(清洁模组)。
传感器只能测量施加在下安装面上的力, 原理是:外部负载会拉扯下安装面,导致内部弹性梁发生形变,应变片测量这个形变。上安装面以上的部件(机械臂手腕、机械臂本体)的重力,直接作用在弹性梁的“上端”,被整个机械臂的金属结构刚性支撑住了,并不会让弹性梁产生新的、可被感知的形变。
因此,连接手腕和传感器的法兰,处于传感器的测量盲区。
正确的分界线,就是六维力传感器自身的下安装面。这个面是传感器的测量基准点,也是工具侧负载的“开始”。
m 内的部分:m 内的部分:m?不可能把传感器拆开,只称它下半部分的重量。因此,几何测绘和CAD计算都不够精确,最好的方法是进行整体负载辨识标定。
这个方法会自动找出对传感器“有效”的负载参数,无需关心物理分界线到底在哪。
步骤如下:
m 和质心坐标 r_com。这个辨识出来的 m,就是进行重力补偿时应该使用的准确数值,代表了对传感器弹性体产生拉/压力的“真实有效负载”的总质量,是“六维力传感器安装面以外、所有承载的部件”的总质量。
想象机械臂是一串由关节连接的连杆,最终的“手腕”法兰盘上装着六维力传感器,传感器再连着清洁模组。传感器测量的是安装面之外所有东西对它的作用力(包括重力、惯性力、接触力)。
传感器“后面”的负载 m 包括:
结论:m 就是“工具侧”总质量,这是可以通过高精度电子秤直接称重得到的。例如,将整个清洁模组(含传感器)拆下,放在秤上,得到 m=1.35kg。这个直接测量值,可以作为后续标定的重要参考,甚至可以将其作为已知固定参数,去标定更复杂的质心。

除了质量m还需要计算质心,质心 r_com=[xc,yc,zc]T 是在传感器坐标系原点下,整个工具组合质量的加权中心,不只是一个几何形状中心,而是一个物理属性。绝对不要尝试用尺子去量,因为:
标准做法是:通过算法进行“负载辨识”标定, 这是力控应用前的标准工序。核心原理是:在不同姿态下,重力在传感器坐标系中的分量不同,通过多组测量,反向解出质量和质心。
0. 准备工作
1. 数据采集 操作机器人,让工具末端摆出至少 3 个以上(推荐 6~8 个)不同姿态。姿态选择原则:
2. 列出方程 工具重力在基座标系下始终为 G_base=[0,0,−mg]T。在某个姿态 i 下,重力在传感器坐标系下的分量 F_g,i为:

由于重力不过传感器原点,会产生力矩 M_g,i:

实际采集到的读数就是重力的贡献(无接触力):

目标是找到 m 和 rcom=[x_c,y_c,z_c]T,使得这 4 个未知数,在所有采集姿态下的方程残差最小。
3. 求解方法(最小二乘) 可以先将力矩方程展开为线性形式:

把质量 m 和质心 rcom 写成一个向量 p=m[1,x_c,y_c,z_c]T(一阶矩),则可以直接构造出形如 Ax=b 的线性方程组,将所有姿态的方程堆叠,用最小二乘法求解 p,再解出 m 和 rcom。
更工程化的方法: 很多机器人厂商(如 KUKA、UR、Franka)都提供了内置的负载辨识功能。只需运行一个例程,它会自动规划一系列动作,读取传感器,然后在后台完成上述计算,直接返回 m 和 rcom。如果系统是开放的,可以用 MATLAB 或 Python 的 scipy.optimize.least_squares 完成。