1. 简介
参考本文的主要内容Kajita等待2003年的论文,Biped Walking Pattern Generation by using Preview control of Zero-Moment Point 以及《仿人机器人》一书,算法代码已开源,详见文末链接。
把双足机器人简化为一个桌子小车(Cart-Table)处理模型会更方便ZMP问题。该算法提出了一种混合物ZMP伺服跟踪可采用倒立摆模型的预观控制算法ZMP轨迹。基于预观控制算法,即使我们的模拟模型是简单的倒立摆模型,也能解决双足机器人更复杂的动力控制问题。

2. 双脚机器人动力学模型
2.1 三维线性倒立摆模型
如图所示,三维线性倒立摆模型考虑在三维笛卡尔空间中移动(3D-LIPM),该模型绕其支点 旋转,纹理可以在虚拟约束平面运动中移动。 平面为水平地面, 轴垂直向上,垂直于地面,我们指定 正方向是机器人前进的方向。
平面的法向量可用于约束平面 ,并且 轴与该平面的交点为 ,约束平面:
如果约束平面是水平的, ,此时,由以下运动方程表示,倒立摆模型的纹理在约束平面内的运动过程:
其中, 表示质地的质量, 表示重力加速度常数, 分别表示倒立摆模型绕轴和轴旋转的扭矩。即使在限制平面非水平()的坡道行走过程中,也可以为扭矩增加额外的限制,使动力学过程成立:
对于限制平面水平的情况,零力矩点(ZMP)计算方法如下:
其中, 表示ZMP位置。上述公式可以用前面的运动方程代替:
2.2 ZMP方程和桌子-小车模型
在前一章中,我们将ZMP用为三维线性倒立的输入,用于计算纹理的运动轨迹。从本节开始,控制ZMP我们需要将其作为控制系统的输出,因此将上一章的最后一个公式重写为:
以上方程将在后面的文章中多次提到,以后使用ZMP这个方程指的是方程。
如下图所示:
水平地面上的桌子表面有一辆沿桌面移动的汽车。虽然桌脚的面积很小,但桌子呈现出来这种情况很容易倾倒。但我们可以控制汽车在桌面上做加速运动,产生相应的加速度来获得桌子的瞬时平衡,此时此刻ZMP它在桌子支撑脚的范围内。图为沿线 在三维环境中,我们还需要一个方向运动的桌子车模型 方向运动的桌子模型,情况相似,因此,这里我们以方向桌车为例进行分析。
因为我们要求绕道ZMP因此:
该公式表示车辆产生的加速度等效ZMP点的扭矩作用应能抵消汽车的质量。收到重力后ZMP点产生的扭矩可以保证桌子的平衡。而且,我们可以发现这个公式与前面的公式相匹配ZMP等价方程。
3. 基于ZMP产生步行模式
我们的总体目标是设定ZMP为了解决纹理的运动过程,前面ZMP方程已经给出ZMP点与质心运动的关系可以通过快速傅里叶转换来解决这个微分方程(FFT)在频域内解决,然后使用FFT的逆变换得到质心的轨迹。这里我们将介绍另一种更加简单的方法。
首先,我们将质地水平加速度的微分定义为 :
把 当做ZMP我们可以输入方程ZMP方程写作如下的:
对于 我们可以定义方向 获得类似的结果。
利用上述公式,我们将步态模式生成器构ZMP如下图所示:
该系统可生成COM同时,运动轨迹ZMP可跟踪预定义的参考位置。
此外,我们还需要考虑另一个问题,如下图所示:
图中显示了理想情况下双脚向前机器人迈出步长的一步ZMP和COM运动轨迹。在第1.5秒切换支撑腿,切换时间前后ZMP参考轨迹保持不变,切换时支撑腿由一条腿改为另一条腿。支撑腿切换时,ZMP位置上有突变,COM在此之前始的运动,如图所示Output箭头所指的位置。从之前的控制框图可以看出,我们必须引入未来的信息来影响当前的状态。这是什么意思?也就是说,我们应该提前做好计划预测,从长远来看,不仅要依靠当前的信息反馈来判断。这里需要介绍我们的算法:预观控制算法。
让我们先定义一下前面的定义ZMP系统状态方程离散,采样时间为 :
我们称上述方程为,其中,
以及
给定ZMP的参考位置 ,为了使系统的输出尽可能准确地跟踪目标ZMP在位置上,我们将评估函数定义为损失函数,从而构建优化问题。评估函数为:
其中, 表示伺服误差, 表示一个 半正定对称矩阵。 表示状态向量的增量, 表示输入增量。在任何时候,满意度最小化的解决方案都是我们想要的最佳解决方案。
如果能提前知道每个采样时间ZMP评估指标最小化的最佳控制器为:
其中,和 表示基于权重 以及计算离散系统方程系统参数获得的好处。因此,预观控制过程由跟踪误差的积分动作、状态反馈和使用未来参考三部分组成。
采用预动作后的收入如下图所示:
由于预收益,控制器不需要太长的未来信息 在未来 秒已经变得很小了。
下图是采用秒预观时间周期时的步态模式产生的结果,包括三步前进COM和ZMP轨迹:
其中,上面的子图是沿轴向矢量平面的运动过程,下面的子图是沿轴向侧平面的运动过程。我们可以看到,COM轨迹非常平滑,实际ZMP轨迹也可以完全跟踪参考资料ZMP轨迹。整个步行过程可分为多个步行周期,也可分为单腿支撑相和双腿支撑相。在单腿支撑的步相中,ZMP参考轨迹应始终落在支撑脚区域,切换支撑腿后应从旧支撑脚区域转移到新支撑脚区域。为了获得平滑ZMP我们使用了轨迹Cubic Spline轨迹插值。
下图显示了更短的预观时间(0.8秒)的COM轨迹预测和ZMP跟踪结果:
从图中可以看出,ZMP的跟踪轨迹不如前面采用更长预观时间的算法结果,这里不能很好地跟踪ZMP参考轨迹。尽管如此,由于状态反馈作为系统的输入,整个系统仍然稳定。
以上为Kajit等人在2003年论文中提出ZMP读者还可以参考《仿人机器人》一书中的第四部分来预测控制算法的基本内容.4章节。
4.参考文献
基础版ZMP预观控制算法:Biped Walking Pattern Generation by using Preview control of Zero-Moment Point
改进版ZMP预观控制算法:General ZMP Preview Control for Bipedal Walking
仿人机器人【HR】获取下载链接。
5. 代码实现
代码使用Python语言编写有三种ZMP预观控制算法包括最基本的模型ZMP预测控制,考虑当前时刻ZMP考虑历史ZMP预观控制误差之和可以根据给定的每一步生成纹理和ZMP运动轨迹。其中,基本款ZMP因为没有考虑预观控制算法ZMP在实际使用中,误差反馈会随着前进距离的增加而积累,这可能与计划相匹配ZMP如下图所示:
考虑当前时刻ZMP虽然误差预观控制算法有所改进,但改进很小,如下图所示:
改进版的ZMP考虑历史积累的预观控制算法ZMP因此,误差的控制效果最好,可以完全跟踪参考ZMP轨迹:
该算法生成COM和ZMP双脚机器人步行控制过程可采用参考轨迹:
代码开源在Github地址为:https://github.com/chauby/ZMP_preview_control.git