2. 基础概念:ZMP(零力矩点)与CoM(质心)的关系与计算
好,咱们进入正题。ZMP和CoM这两个概念,说白了就是人形机器人稳定性的“命根子”。你调参调来调去,最后都是在跟这两个家伙打交道。
我记得刚入行那会儿,带我的老工程师跟我说过一句话:“搞不懂ZMP和CoM,你就别碰人形机器人。”当时觉得夸张,后来踩了坑才明白——这话一点不假。
2.1 什么是CoM?
CoM,全称Center of Mass,质心。你可以把它想象成机器人所有质量“浓缩”成的一个点。这个点在哪,机器人的整体平衡就在哪。
对于人形机器人这种多刚体系统,CoM的计算其实不复杂:
// 质心位置计算(简化版)
// 假设机器人有N个连杆,每个连杆质量为m_i,质心位置为p_i
CoM = (Σ m_i * p_i) / (Σ m_i)
嗯,就是加权平均。每个部件的质量乘以它的位置,加起来,再除以总质量。
我在项目里遇到过一个问题:有个同事把电池的质量算错了,结果CoM位置偏了5厘米。机器人一走路就往一边倒,调了三天参数都没用。最后发现是质量参数写错了。所以啊,基础数据一定要核对清楚。
2.2 什么是ZMP?
ZMP,Zero Moment Point,零力矩点。这个概念比CoM稍微绕一点。
简单说,ZMP是脚底板上一个特殊的点。在这个点上,地面反作用力产生的水平力矩为零。说白了,就是机器人脚底“受力最均衡”的那个位置。
你想想看,人站着的时候,脚底板受力不是均匀的。前脚掌压力大,还是后脚跟压力大?ZMP就是那个让前后力矩刚好抵消的点。
2.3 ZMP与CoM的关系
这两个点啥关系?我画个图你就明白了。
静态站立的时候,CoM在地面的投影和ZMP是重合的。但一旦机器人开始走路、转身、或者被推了一把,这两个点就分开了。
为什么会这样?因为动态运动会产生惯性力。CoM反映的是重力作用,ZMP反映的是重力+惯性力的综合效果。
2.4 ZMP的计算方法
实际工程中,ZMP的计算有两种主流方法。我两种都用过,给你说说区别。
| 方法 | 原理 | 适用场景 |
|---|---|---|
| 基于动力学模型 | 通过机器人各连杆的加速度、角速度、惯性张量计算 | 仿真环境、离线规划 |
| 基于力传感器 | 通过脚底的六维力传感器直接测量 | 实物机器人、实时控制 |
我个人更推荐第二种方法。为啥?因为模型总有误差,传感器数据才是真实世界的反馈。
力传感器算ZMP的公式长这样:
// 基于脚底力传感器的ZMP计算
// Fz: 垂直方向总力
// Mx, My: 绕x轴和y轴的力矩
// 假设传感器安装在脚底中心
ZMP_x = -My / Fz
ZMP_y = Mx / Fz
简单吧?但坑也在这里。
2.5 稳定性判据
有了ZMP,怎么判断机器人稳不稳?标准很简单:
- ZMP在支撑多边形内部 → 稳定
- ZMP在支撑多边形边界上 → 临界稳定
- ZMP在支撑多边形外部 → 不稳定,要倒了
但这里有个细节:支撑多边形不是一成不变的。单脚支撑时,就是那只脚的轮廓。双脚支撑时,是两只脚围成的凸多边形。
我见过有人把支撑多边形画成矩形,其实不对。脚底板的形状是不规则的,尤其是脚尖和脚跟的弧度。严谨的做法是用凸包算法算一下。
2.6 稳定性裕度
光说“在内部”还不够。你得知道离边界有多远。这个距离就叫稳定性裕度。
// 稳定性裕度计算
// 找到ZMP到支撑多边形各边的最短距离
// 取最小值作为裕度
稳定性裕度 = min( distance(ZMP, edge_1),
distance(ZMP, edge_2),
... )
裕度越大,机器人抗干扰能力越强。我一般会留个5-10厘米的裕度。太小了,一阵风就吹倒了。太大了,走路姿态会变得很僵硬,像机器人穿了高跟鞋。
2.7 实际应用中的注意事项
最后说几个实战中容易忽略的点:
- 传感器噪声:力传感器的数据一定要滤波。我习惯用截止频率20Hz的低通滤波器。
- 延迟问题:从传感器采集到ZMP计算,再到控制器响应,有延迟。这个延迟会导致ZMP“滞后”于实际运动。
- 地面不平:实验室地板是平的,但实际场景不是。ZMP计算时要考虑地面倾斜。
- 鞋底变形:橡胶鞋底会变形,影响支撑多边形的实际形状。硬底鞋更准。
嗯,基础概念就讲这么多。ZMP和CoM的关系,说白了就是“静态平衡”和“动态平衡”的区别。搞懂了这个,后面调参你才能知道自己在调什么。
可可精品资料库