3. 力/力矩传感器原理:应变片原理、六维力传感器结构、数据采集与滤波、标定方法
力控拖动示教,说白了就是让机器人「有手感」。那这个手感从哪来?核心就是力/力矩传感器。我最早接触这玩意儿是在一个精密装配项目上,机器人一用力就把零件压碎了,后来才意识到——没有力反馈,机器人就是个瞎子。
这一节,咱们把传感器从里到外拆开看。从最基础的应变片,到六维力传感器的结构,再到数据怎么采、怎么滤、怎么标定。嗯,都是硬核干货。
3.1 应变片原理:力传感器的「皮肤」
力传感器能感知力,靠的是应变片。你可以把它想象成贴在金属上的「神经末梢」。
工作原理:金属丝被拉伸时变细变长,电阻变大;被压缩时变粗变短,电阻变小。这个现象叫应变效应。
公式很简单:
ΔR / R = K * ε
- ΔR / R:电阻变化率
- K:应变片灵敏系数(一般2.0左右)
- ε:应变(微应变,1με = 10⁻⁶)
实际结构:应变片通常做成栅格状,贴在弹性体表面。弹性体受力变形,应变片跟着变形,电阻就变了。
3.2 六维力传感器结构:让机器人「摸」到三维空间
单轴力传感器只能测一个方向。但机器人需要感知三个力(Fx, Fy, Fz)和三个力矩(Mx, My, Mz),这就是六维力传感器。
它的核心是弹性体结构。常见的结构有:
- 十字梁式:四个梁呈十字形,每个梁上贴应变片。结构简单,但耦合较大。
- 三梁式:三个梁呈120°分布。我比较喜欢这种,解耦容易。
- 筒式:一个空心圆柱,内外壁贴片。适合大负载场景。
每个梁上贴4个应变片,组成全桥电路。全桥的好处是:温度补偿好,灵敏度高。
3.3 数据采集与滤波:把模拟信号变成干净的数字
应变片输出的信号有多微弱?我测过,满量程也就几毫伏。所以必须经过放大→AD转换→滤波三步。
采集流程:
- 仪表放大器:把mV级信号放大到V级。我常用AD620或INA128,共模抑制比高。
- 低通滤波:硬件上先滤掉高频噪声。截止频率一般设100Hz~500Hz。
- AD转换:至少16位精度。24位的ADS1256是经典选择。
- 数字滤波:软件再滤一遍。我习惯用滑动平均滤波或卡尔曼滤波。
给你看一段我常用的滑动平均滤波代码:
// 滑动平均滤波,窗口大小N
#define N 10
float buffer[N];
int index = 0;
float sum = 0;
float moving_average(float new_value) {
sum -= buffer[index];
buffer[index] = new_value;
sum += buffer[index];
index = (index + 1) % N;
return sum / N;
}
3.4 标定方法:让传感器「说真话」
传感器出厂时有个理论输出,但实际装到机器人上,因为安装应力、温度、耦合等因素,必须重新标定。
标定分两步:
- 静态标定:施加已知力/力矩,记录输出。建立「输入-输出」映射。
- 动态标定:施加变化的力,测试响应速度和精度。
标定矩阵:六维力传感器的输出是6个通道,每个通道受6个维度影响。所以需要一个6×6的耦合矩阵:
[F] = [C] * [V]
其中:
[F]:真实力/力矩向量(6×1)
[C]:耦合矩阵(6×6)
[V]:传感器输出电压向量(6×1)
标定就是求这个矩阵[C]。方法是用最小二乘法拟合。
我分享一个简化版的标定流程:
- 零位标定:无负载时记录输出,作为零点偏移。
- 单轴加载:分别沿X、Y、Z方向施加已知力,记录6个通道输出。
- 力矩加载:用砝码加力臂,产生已知力矩。
- 解耦计算:用最小二乘法算出耦合矩阵。
- 验证:随机加载几个点,看误差是否在1%以内。
3.5 知识体系总览
下面这张图,把力传感器从原理到应用串起来了。我画了好几个版本,这个最清晰:
你看,从应变片原理出发,到六维力结构,再到数据采集和标定,每一步都离不开前面打下的基础。我当年学的时候,就是按这个顺序一步步啃下来的。
最后说一句:力传感器这东西,理论是一回事,上手调又是另一回事。建议你找个实物,拿万用表测测应变片电阻,再连上示波器看看信号波形。亲手摸一遍,比看十遍书都管用。
公众号:蓝海资料掘金营,微信deep3321