3. 传感器与数据采集:关节编码器、力矩传感器、IMU的数据特性与噪声分析

做机器人关节标定,说白了就是跟传感器打交道。你算法写得再漂亮,传感器数据不准,后面全是白搭。我这些年调过的机器人,十有八九的问题都出在“没读懂传感器”上。

这一章咱们就聊聊三种核心传感器:关节编码器、力矩传感器、IMU。不扯理论推导,只讲实际项目中你一定会碰到的数据特性和噪声坑。

3.1 关节编码器:位置与速度的“眼睛”

编码器是机器人关节里最基础的传感器。它告诉你电机转了多少度,或者转得多快。但同样是编码器,类型不同,脾气完全不同。

3.1.1 增量式 vs 式

特性 增量式编码器 式编码器
上电位置 未知,需要回零 立即知道
分辨率 高(可做电子细分) 受限于码盘位数
抗干扰 脉冲易受电磁干扰 数字通信,抗干扰强
成本 低 高
典型应用 轮式机器人、轻载关节 协作臂、精密转台

我个人习惯:只要预算允许,式编码器是首选。尤其是协作机器人,上电就知道姿态,省去回零流程,安全性高一大截。增量式虽然便宜,但脉冲丢失的问题很头疼——我在一个AGV项目里遇到过,电机振动导致编码器丢了几十个脉冲,定位直接偏了半厘米。

3.1.2 编码器噪声来源

编码器的噪声,不是白噪声,而是有规律的。常见的有这么几类:

  • 量化噪声:分辨率有限导致的阶梯误差。比如12位编码器,每圈4096个脉冲,角度分辨率约0.088°。这个误差是固定的,无法消除。
  • 安装偏心:码盘中心与旋转轴中心不重合。表现为位置误差随角度呈正弦变化。我见过一个案例,偏心0.1mm,在半径50mm的码盘上,最大角度误差达到0.11°。
  • 电磁干扰:电机PWM切换时,高频噪声耦合到编码器信号线上。增量式编码器的A/B相脉冲会多出毛刺,导致计数错误。
  • 温度漂移:光学编码器的LED发光效率随温度变化,信号幅值波动,严重时会导致丢码。
避坑指南:我曾经在一个项目中,编码器读数在电机高速旋转时频繁跳变。排查了三天,最后发现是编码器线缆和电机动力线绑在一起走线,没有屏蔽。分开走线并加磁环后,问题消失。编码器信号线必须独立屏蔽,且屏蔽层单端接地。

3.1.3 速度计算:直接差分 vs 测频法

从编码器位置算速度,最直接的方法是差分:v = (p2 - p1) / Δt。但这个方法对噪声极其敏感。你想想看,位置量化误差0.01°,如果采样周期1ms,速度误差就是10°/s。这噪声太大了。

实际工程中,我常用两种方法:

  • M法(测频法):固定时间窗口内计数脉冲数。适合高速场景。
  • T法(测周法):测量两个脉冲之间的时间间隔。适合低速场景。
  • M/T法:结合两者,宽速域适用。
// M/T法速度计算示例(伪代码)
uint32_t pulse_count;      // 时间窗口内的脉冲数
uint32_t time_interval_us; // 时间窗口长度(微秒)
float speed_deg_per_s;

// 假设编码器每圈脉冲数 PPR = 4096
speed_deg_per_s = (float)pulse_count / 4096.0f * 360.0f / (time_interval_us / 1e6f);

// 注意:当 pulse_count 很小时(低速),误差会急剧增大
// 此时应切换到 T 法:测量单个脉冲的宽度
经验值:对于大多数机器人关节,速度环的采样周期在1ms~4ms之间。编码器分辨率建议不低于17位(每圈131072脉冲),否则低速时的速度波动会很明显。

3.2 力矩传感器:力控的“手感”

力矩传感器让机器人有了“触觉”。没有它,力控就是盲人摸象。但力矩传感器的噪声特性,比编码器复杂得多。

3.2.1 应变式 vs 磁弹性式

特性 应变式力矩传感器 磁弹性式力矩传感器
原理 应变片电桥 磁致伸缩效应
刚度 高(变形小) 较低
带宽 可达5kHz 1~2kHz
温漂 明显(需补偿) 较小
抗过载 弱(易损坏) 强

我个人更偏爱应变式,虽然温漂麻烦,但刚度和带宽是实打实的优势。磁弹性式在重载场景有优势,但响应慢,不适合精细力控。

3.2.2 力矩传感器的噪声模型

力矩传感器的噪声,可以分解为:

  • 白噪声:电子热噪声、ADC量化噪声。功率谱密度平坦,通常用RMS值描述。
  • 1/f噪声:低频段功率谱密度与频率成反比。表现为零点缓慢漂移。
  • 振动噪声:机器人运动时,关节振动通过机械结构耦合到传感器。频率通常在几十Hz到几百Hz。
  • 温度漂移:应变片电阻随温度变化,导致零点偏移。典型值0.1%~0.5% FS/10°C。
关键点:力矩传感器的零点漂移是力控最大的敌人。你校准好了,开机半小时后零点偏了0.5Nm,对于精密装配来说,这个力已经足以压坏零件了。

3.2.3 滤波策略

对付力矩噪声,不能一刀切地低通滤波。滤波太狠,力控带宽不够,机器人反应迟钝;滤波太轻,噪声直接进控制器,系统会抖。

我常用的策略是分层滤波:

  1. 硬件低通滤波:在ADC前端加RC滤波器,截止频率设为力控带宽的5~10倍。比如力控带宽50Hz,RC截止频率设在250~500Hz。
  2. 软件均值滤波:对ADC采样值做滑动平均,窗口长度根据采样率调整。比如1kHz采样率,窗口取4~8个点。
  3. 自适应陷波滤波器:针对特定频率的振动(比如关节的机械共振频率),用陷波滤波器消除。这个频率可以通过扫频实验获得。
// 滑动均值滤波示例
#define FILTER_WINDOW 8
float torque_buffer[FILTER_WINDOW] = {0};
int buffer_index = 0;
float torque_filtered = 0;

float filter_torque(float raw_torque) {
    torque_buffer[buffer_index] = raw_torque;
    buffer_index = (buffer_index + 1) % FILTER_WINDOW;
    
    float sum = 0;
    for (int i = 0; i < FILTER_WINDOW; i++) {
        sum += torque_buffer[i];
    }
    torque_filtered = sum / FILTER_WINDOW;
    return torque_filtered;
}
注意:滑动均值滤波会引入相位延迟。窗口长度N,延迟约为N/2个采样周期。对于1kHz采样率、窗口8,延迟4ms。如果力控环要求高带宽,这个延迟可能无法接受。此时可以考虑卡尔曼滤波或互补滤波。

3.3 IMU:姿态感知的“小雷达”

IMU(惯性测量单元)包含加速度计和陀螺仪。在机器人上,IMU通常安装在基座或末端,用于感知姿态和振动。但IMU的数据,是所有传感器里最“脏”的。

3.3.1 加速度计 vs 陀螺仪

特性 加速度计 陀螺仪
测量量 比力(加速度 + 重力) 角速度
静态特性 可测重力方向(倾角) 零偏不稳定
动态特性 对振动敏感 高频响应好
主要误差 零偏、比例因子、噪声 零偏、角度随机游走

为什么说IMU数据脏? 加速度计测的是“比力”,不是纯加速度。机器人运动时,关节振动、电机电磁力都会叠加在信号上。陀螺仪更麻烦,它的零偏会随时间缓慢变化,积分出来的角度会漂移。

3.3.2 IMU噪声参数

IMU的噪声,通常用两个指标描述:

  • 角度随机游走(ARW):陀螺仪白噪声积分后,角度误差随时间以√t增长。单位:°/√h。
  • 速度随机游走(VRW):加速度计白噪声积分后,速度误差随时间以√t增长。单位:m/s/√h。

举个例子:一个陀螺仪的ARW为0.01°/√h。这意味着积分1小时后,角度误差约0.01°;积分10小时后,误差约0.032°。看起来不大?但如果你做纯积分姿态估计,10分钟误差就可能达到0.1°以上。

经验之谈:IMU的零偏稳定性比白噪声更致命。我见过一款MEMS陀螺仪,白噪声很小,但零偏随温度变化达到0.1°/s。开机时校准好了,运行半小时后温度升高10°C,零偏漂了0.05°/s,积分10分钟角度误差30°。这种IMU只能用于短时姿态估计,必须配合其他传感器做融合。

3.3.3 传感器融合:互补滤波 vs 卡尔曼滤波

单独用加速度计或陀螺仪都不靠谱。加速度计低频准、高频噪;陀螺仪高频准、低频漂。互补滤波就是利用这个特性:

// 互补滤波姿态估计(简化版)
float angle = 0;          // 估计角度
float gyro_rate;          // 陀螺仪角速度
float acc_angle;          // 加速度计计算的角度
float dt;                 // 采样周期
float alpha = 0.98;       // 互补系数

// 每次采样执行
angle = alpha * (angle + gyro_rate * dt) + (1 - alpha) * acc_angle;

alpha取0.98,意味着98%信任陀螺仪的积分,2%信任加速度计。这个系数决定了融合的截止频率。alpha越大,截止频率越低,对加速度计噪声的抑制越强,但动态响应越慢。

卡尔曼滤波更优,但调参麻烦。你需要知道过程噪声协方差Q和测量噪声协方差R。Q越大,越信任测量值;R越大,越信任模型预测。我一般先通过Allan方差分析确定IMU的噪声参数,再据此设定Q和R的初值。

核心思路:传感器融合不是“选最好的”,而是“取长补短”。编码器提供精确位置但无法测力,力矩传感器提供力信息但噪声大,IMU提供姿态但会漂移。把它们融合起来,才能得到稳定可靠的关节状态估计。

3.4 本章知识体系

下面这张图总结了三种传感器的数据特性、噪声来源和应对策略。你可以把它当作选型和调试的快速参考。

传感器数据特性与噪声分析框架 关节编码器 噪声来源 • 量化噪声(分辨率限制) • 安装偏心(正弦误差) • 电磁干扰(脉冲毛刺) 应对策略 • 屏蔽线缆 + 差分信号 • M/T法速度计算 力矩传感器 噪声来源 • 白噪声 + 1/f噪声 • 振动耦合(机械共振) • 温度漂移(零点偏移) 应对策略 • 分层滤波(硬件+软件) • 自适应陷波滤波器 IMU 噪声来源 • 加速度计:振动敏感 • 陀螺仪:零偏漂移 • 角度/速度随机游走 应对策略 • 互补滤波 / 卡尔曼滤波 • Allan方差分析定参 传感器融合:取长补短 稳定可靠的关节状态估计 核心原则 理解每种传感器的“脾气” → 针对性滤波 → 融合互补 → 得到可信数据