MIT miniCheetah mpc的简单matlab仿真

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

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

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

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

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

0395386570314c68ab8808e2c6745fb0.gif

后续工作:

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

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

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

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

5f6334ac062e4f3081005ce7192de88d.gif

 35260a82f0a04a0fbcf8edc2ff1cc758.png

后续工作2:

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

5e6415e36500402481b77f8c44be73b2.gif

后续工作3:

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

f856ca5366d4469c947f9256aba608a2.gif

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控制器中进行路径跟踪,如果参考路径经过插值处理使得更加合理后,跟踪效果应该效果不错;

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

%查找当前最近的路径点
for i=1:length(linex)
                if norm([X_out(4:5,iter)]-[linex(i);liney(i)])<last_norm
                    last_norm=norm([X_out(4:5,iter)]-[linex(i);liney(i)]);
                    lasti=i;
                    if last_norm<0.05 %提前结束查询
                        break;
                    end
                end
            end

%% 处理轨迹信息 根据自身情况进行更改
%%
%将生成的轨迹信息填入MPC参考
 for i =1:future_period
                X_ref_mpc((i-1)*13+1:(i-1)*13+13)=zeros(13,1);
                X_ref_mpc((i-1)*13+4)=xtr(i);
                X_ref_mpc((i-1)*13+5)=ytr(i);
                X_ref_mpc((i-1)*13+6)=0.28;

                X_ref_mpc((i-1)*13+3)=yaw_d(i);
                
                X_ref_mpc((i-1)*13+9)=dotyaw(i);
                X_ref_mpc((i-1)*13+10)=dotx(i);
                X_ref_mpc((i-1)*13+11)=doty(i);
            end

NMPC版本地址:非常不完善的版本,期望有大佬能优化一下

NaCl-1374/RPC_cheetah: Policy Regularized Model Predictive Control simulated by matlab (github.com)

  • 10
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值