3、高精度重力补偿:连杆质量参数辨识、质心位置标定、负载动态辨识
重力补偿这件事,说白了就是让机器人感觉不到自己胳膊有多重。
你想想看,一台协作机器人拖着示教时,如果重力补偿没做好,操作者会明显感觉到一个向下的拉力。轻的还好,重的负载拖起来就像在拽一头死牛。我刚开始做拖动示教时,就吃过这个亏——明明算法看起来没问题,但拖起来就是别扭。
后来我才明白,重力补偿的核心就三个字:识得准。你得让机器人知道自己的胳膊有多重、重心在哪、手里拿了多重的东西。
3.1 连杆质量参数辨识
每个关节、每根连杆都有质量。这些参数厂家通常会提供,但实际装配后会有偏差。我个人的习惯是:永远不要相信标称值。
为什么?因为机器人出厂后,用户可能加装了夹具、传感器,甚至换了末端执行器。这些都会改变连杆的质量分布。
辨识方法其实不复杂。我们让机器人做一组特定的运动,记录关节力矩和加速度,然后用最小二乘法反推质量参数。
核心公式:
τ = M(q)q̈ + C(q,q̇)q̇ + G(q) + τ_friction
其中 G(q) 就是重力项,包含连杆质量 m_i 和质心位置 r_i。
实际操作时,我建议分两步走:
- 静态辨识:让机器人停在多个不同姿态,记录关节力矩。这时候速度、加速度都为零,方程简化为 τ = G(q)。
- 动态辨识:做低速运动,加入摩擦项。我一般用正弦轨迹,频率 0.1-0.5 Hz,幅值 30-60 度。
我的经验:静态辨识至少取 20 个以上姿态点。姿态要覆盖整个工作空间,别只在一个小区域里测。我曾经只测了 10 个点,结果补偿效果很差,后来加到 30 个点才稳定。
3.2 质心位置标定
质量参数搞定了,接下来是质心位置。这个更关键——质心偏一点,重力矩的计算就会差很多。
我记得有一次,一个客户反映机器人拖起来一边轻一边重。排查了半天,发现是末端法兰上装了一个偏置的摄像头,质心偏移了 5 厘米。标定前和标定后的手感,完全是两台机器。
质心标定常用的方法是力矩平衡法:
// 伪代码示例
for each 关节 i:
记录关节力矩 τ_i
记录关节角度 q_i
构建方程: τ_i = m * g * (r_x * sin(q_i) + r_y * cos(q_i))
用最小二乘法求解 r_x, r_y
这里要注意一个坑:质心位置是相对于连杆坐标系的。你标定出来的结果,一定要转换到正确的坐标系下。我见过有人直接把传感器坐标系下的结果拿来用,结果补偿方向全反了。
避坑指南:我曾经在标定六轴机器人的第三连杆时,忘记考虑前两个关节的耦合效应。结果标出来的质心位置偏差了 30%。后来我改用完整的动力学模型,把所有关节的耦合项都加进去,才得到准确结果。
3.3 负载动态辨识
负载辨识,就是让机器人知道它手里拿了多重的东西。这个在拖动示教里特别重要——你想想,空载和抓着一个 5 kg 的工件,拖起来的感觉能一样吗?
负载辨识分两种情况:
- 已知负载:比如你事先知道工件重量,直接输入参数就行。但实际中很少这么理想。
- 未知负载:需要在线辨识。我常用的方法是让机器人做一个小幅度的摆动运动,根据力矩变化反推负载。
具体做法是这样的:
- 让机器人末端沿垂直方向做小幅正弦运动(幅值 5-10 cm,频率 1-2 Hz)
- 记录关节力矩和末端加速度
- 用递推最小二乘法(RLS)实时估计负载质量
关键点:负载辨识的精度,很大程度上取决于之前连杆参数和质心位置的标定精度。如果前面两步没做好,负载辨识就是空中楼阁。
我个人习惯在拖动示教开始前,先让机器人做一个快速自检运动。整个过程不到 2 秒,就能把当前负载辨识出来。这样用户拖起来,手感始终是轻飘飘的,不会因为负载变化而变沉。
3.4 整体流程与注意事项
把这三步串起来,就是一套完整的高精度重力补偿流程:
Step 1: 连杆质量参数辨识(离线,一次完成)
Step 2: 质心位置标定(离线,一次完成)
Step 3: 负载动态辨识(在线,每次上电或换负载时执行)
Step 4: 实时重力补偿计算(在线,每个控制周期执行)
我的建议:如果你用的是协作机器人,最好在出厂前就把 Step 1 和 Step 2 做好。这样用户只需要关心 Step 3 的负载辨识。我见过一些厂家把这三步都丢给用户做,结果用户根本搞不定,最后抱怨机器人不好用。
还有一个容易被忽略的点:温度影响。机器人运行一段时间后,关节温度升高,润滑油粘度变化,摩擦力会改变。这会影响重力补偿的精度。我一般会在控制程序中加入温度补偿项,或者定期重新标定。
最后提醒:重力补偿不是一劳永逸的。机器人使用一段时间后,机械结构会有磨损,连杆参数会漂移。我建议每半年重新做一次完整的参数辨识。别等到用户投诉了才想起来。
嗯,以上就是高精度重力补偿的核心内容。说白了就是三步走:先让机器人知道自己多重,再知道重心在哪,最后知道手里拿了多重。每一步都有坑,但踩过去之后,你会发现拖动示教的手感完全不一样了。