MIT的机器狗包括MIT Cheetah 3和MIT Mini Cheetah使用了一种叫做Convex Model-Predictive的控制器,需要结合已经发表的文章去看才更容易理解该算法的代码(标题为:Dynamic Locomotion in the MIT Cheetah 3 Through Convex Model-Predictive Control),本篇解析重要的控制器实现的文件ConvexMPCLocomotion.cpp。该文件也是实现各种功能的入口,跑仿真的时候使用的主要也是这个文件。对应的ConvexMPCLocomotion.h的文件中的类有很多变量的定义,涉及到一些地形自适应或者质心规划的变量需要结合这篇文章才能看懂(标题为:MIT Cheetah 3: Design and Control of a Robust, Dynamic Quadruped Robot)
horizonLength表示MPC控制器的预测步数,此处设为10步。
下面进入ConvexMPCLocomotion::ConvexMPCLocomotion函数
iterationsBetweenMPC(_iterations_between_mpc),//控制频率用。
dtMPC = dt * iterationsBetweenMPC;//mpc计算用时 在状态空间方程离散化时用 iterationsBetweenMPC MPC迭代次数。
trotting这些代码定义了步态,使用向量来进行标识,向量按照{FL, FR, BL, BR} 的顺序进行索引,表示时间占比,这里好像没有将步态周期进行归一化,代码中预定义了多种步态。
比如trot步态可以表示成下图
trotting(horizonLength*1.6, Vec4(0,8,8,0), Vec4(11,11,11,11),"Trotting"),
bounding(horizonLength, Vec4(5,5,0,0),Vec4(5,5,5,5),"Bounding"),
jumping(horizonLength, Vec4(0,0,0,0), Vec4(2,2,2,2), "Jumping"),
standing(horizonLength, Vec4(0,0,0,0),Vec4(10,10,10,10),"Standing"),
walking(int(horizonLength*1.6), Vec4(0,8,4,12), Vec4(12,12,12,12), "Walking"),
_SetupCommand中加载了一些配置指令,机器人型号为MINI_CHEETAH,机身高度0.3等。rc是radio control,指的是遥控器。filter是一个变量,用于防止速度指令的突变。
剩下的主要内容就在ConvexMPCLocomotion::run函数中,就可以理解在仿真操作中的一系列操作的设定。