第四节:关节零点标定(二)——基于电流反馈的自动找零与力矩模式下的零点搜索算法
上一节我们聊了手动找零的方法,说白了就是拿千分表、激光对准仪这些工具,人工把关节转到物理零点。但说实话,这种方法在批量生产或者现场维护时,效率太低了。你想想看,一个六轴机器人,六个关节一个个手动对,光调试就得半天。
所以这一节,我们来点自动化的方案。我个人习惯把这类方法分成两大类:电流反馈法和力矩模式搜索法。两者思路不同,但目标一致——让机器人自己找到零点。
一、电流反馈法:让电机“说话”
先讲电流反馈法。这个方法的原理其实很简单:当关节运动到机械限位时,电流会突然飙升。
为什么会这样?因为电机堵转了。电机堵转时,反电动势消失,绕组阻抗变得很小,电流自然就上去了。我们利用这个特性,让机器人慢慢往一个方向转,直到撞上硬限位,记录下当前位置,然后反方向再撞一次,取中间值,就是零点。
我在项目中遇到过一个问题:有些关节的减速比很大,比如RV减速器,电机转几十圈关节才动一度。这种情况下,电流反馈的响应会有点滞后。嗯,这里要注意,搜索速度不能太快,否则电流还没反应过来,关节已经撞坏了。
二、电流反馈法的实现步骤
具体怎么做?我一般分四步走:
- 设定安全电流阈值——通常取额定电流的1.5~2倍。太小容易误触发,太大可能损坏机构。
- 正向搜索——以低速(比如0.5°/s)向正方向运动,实时监测电流。当电流超过阈值时,记录当前位置
Pos_A,并立即停止。 - 反向搜索——同样速度向负方向运动,撞上另一侧限位后记录
Pos_B。 - 计算零点——零点位置 = (Pos_A + Pos_B) / 2。
代码实现大概长这样:
// 伪代码:电流反馈自动找零
float searchZeroByCurrent() {
float posA, posB;
float currentThreshold = 2.0; // 额定电流的2倍
// 正向搜索
setVelocity(0.5); // 0.5°/s
while(getCurrent() < currentThreshold) {
movePositive();
}
posA = getPosition();
stop();
// 反向搜索
setVelocity(-0.5);
while(getCurrent() < currentThreshold) {
moveNegative();
}
posB = getPosition();
stop();
return (posA + posB) / 2.0;
}
三、力矩模式下的零点搜索
电流反馈法有个局限:它依赖硬限位。如果机器人没有硬限位,或者限位在减速器内部(比如谐波减速器的柔性轴承),那就没法用了。
这时候,力矩模式搜索就派上用场了。
力矩模式,说白了就是让电机输出一个恒定的力矩,而不是控制位置。你给关节一个很小的力矩,比如额定力矩的5%,然后让关节自由运动。如果关节在零点附近,重力矩和摩擦力会把它“拉”到一个平衡位置。
我记得有一次调试一个协作机器人,它的关节没有硬限位,只有软限位。用电流反馈法根本找不到零点,因为软限位不会导致电流突变。后来换成力矩模式,让关节在零点附近来回摆动,像钟摆一样,最后停在平衡点——那就是零点。
四、力矩模式搜索的算法流程
这个方法的核心是重力补偿。你得先知道关节的重力矩模型,然后施加一个反向力矩来抵消重力,剩下的就是摩擦力。当摩擦力矩和施加的力矩平衡时,关节就停在了零点。
具体步骤:
- 建立重力模型——根据关节角度和负载,计算当前重力矩。
- 施加补偿力矩——让电机输出一个与重力矩大小相等、方向相反的力矩。
- 叠加搜索力矩——在补偿的基础上,叠加一个很小的搜索力矩(比如0.1Nm),让关节缓慢转动。
- 检测平衡点——当关节速度趋近于0,且位置不再变化时,记录当前位置。
五、两种方法的对比
| 对比项 | 电流反馈法 | 力矩模式搜索法 |
|---|---|---|
| 依赖硬件 | 需要硬限位 | 不需要硬限位 |
| 精度 | 中等(受限位精度影响) | 较高(可达0.01°以内) |
| 速度 | 快(几秒钟完成) | 慢(可能需要几十秒) |
| 适用场景 | 工业机器人、有硬限位的关节 | 协作机器人、无硬限位关节 |
| 实现难度 | 低 | 高(需要重力模型) |
六、避坑指南
做零点标定这么多年,我踩过的坑不少。挑几个典型的说说:
- 电流阈值设得太低——有一次我把阈值设成了1.2倍额定电流,结果电机刚启动时的浪涌电流就触发了,导致误判。后来改成2倍,问题解决。
- 忽略温度影响——电机运行一段时间后,绕组温度升高,电阻变大,同样的电压下电流会变小。所以冷机和热机状态下的电流阈值应该不同。我一般会在算法里加一个温度补偿系数。
- 力矩模式下的积分饱和——如果你用PID控制力矩,积分项可能会饱和,导致关节在零点附近来回震荡。我的做法是:检测到速度低于某个阈值后,直接冻结积分项。
七、知识体系图
下面这张图展示了本章节的核心逻辑,从输入到输出,一目了然:
这张图把整个流程串起来了。你从“关节状态”出发,先判断有没有硬限位,然后选择对应的方法,最后得到零点位置。实际项目中,我建议两种方法都实现,根据现场情况灵活切换。
好了,这一节的内容就到这里。电流反馈和力矩模式搜索,两种方法各有千秋,关键是要理解它们的原理和适用场景。下一节我们会聊标定后的验证方法,到时候见。