MIT miniCheetah mpc的简单matlab仿真

介绍:使用 Dynamic Locomotion in the MIT Cheetah 3 Through Convex Model-Predictive Control一文中介绍的凸模型进行mpc控制的简单仿真。物理参数和权重等基本和miniCheetah 相同;

框架如图;由于是单刚体仿真可以省略掉状态估计和腿部控制器;参考轨迹由人工通过速度指令累加生成,或将生成好的路径分段提供给CMPC控制器中进行轨迹跟踪;

代码较为简单,基本照搬MIT开源代码进行部分语言适配即可;MIT开源代码可以看我之前的贴子。原理讲解CSDN上也有很多人进行了分析,可以参考盒子君的文章

MIT miniCheetah mpc的简单matlab仿真_第1张图片

MIT miniCheetah mpc的简单matlab仿真_第2张图片MIT miniCheetah mpc的简单matlab仿真_第3张图片

腿序号如图所示,左前腿为1号腿 ;坐标系参考如图

下面是四腿支撑时进行质心轨迹控制的效果:

MIT miniCheetah mpc的简单matlab仿真_第4张图片

后续工作:

仿照MIT开源项目的步态时间规划,为mpc提供接触信息;

将提前触地检测加入到mpc计算中,

演示设置为右前腿在摆动相相位0.7时触地,参考位姿设置高度0.28,其他均为0;

命令行中的为输入到仿真的力,可以证明其为对角步态,其稳定运行16秒的位姿如图所示;

MIT miniCheetah mpc的简单matlab仿真_第5张图片

 MIT miniCheetah mpc的简单matlab仿真_第6张图片

后续工作2:

加入步态时间表和落足点调整:

MIT miniCheetah mpc的简单matlab仿真_第7张图片

后续工作3:

修正了bug,重写了绘制函数,加入了一个通过pid的路径跟踪代码:

next_des=max(min(nextPoint+1,length(linex)),1);
temp=[linex(next_des);liney(next_des)]-[linex(nextPoint);liney(nextPoint)];
des_yaw=atan2(temp(2),temp(1));
desyaw_plot=[desyaw_plot;des_yaw];
yaw_err=X_out(3,iter)-des_yaw;
yaw_turn_rate=-4*yaw_err;
kp=diag([0.03,0.03,0]);
kd=diag([0.003,0.003,0]);
err=[X_out(4:5,iter);0]-[linex(nextPoint);liney(nextPoint);0];
div=err-lasterr;
v_des_world=-(kp*err+kd*div);
lasterr=err;
v_des_world=v_des_world/norm(v_des_world)*1;

后续工作4:

更改路径跟踪方式为直接将路径提供给CMPC控制器中进行路径跟踪,如果参考路径经过插值处理使得更加合理后,跟踪效果应该效果不错;

轨迹跟踪效果如图:紫色为参考轨迹

MIT miniCheetah mpc的简单matlab仿真_第8张图片

%查找当前最近的路径点
for i=1:length(linex)
                if norm([X_out(4:5,iter)]-[linex(i);liney(i)])

你可能感兴趣的:(四足机器人,仿真,四足机器人,matlab,模型预测控制,仿真器)