printf效率_cheetah software:提高MPC计算效率

cheetah mini一步的周期约0.3s,这在稍大型的机器人上是不合理的。为了增加迈步周期,需要增加步态循环中MPC计算的次数。这样,预测时域就无法cover整个迈步周期,因此需要增加预测时域。

MPC求解中,运算量随着预测时域n增大成指数上升.在ConvexMPCLocomotion.cpp文件中解除注释:
printf("MPC Solve time %f msn", t2.getMs());
可以实时打印MPC计算时间,在我的笔记本上(Intel(R) Core(TM) i5-8500 CPU @ 3.00GHz),使用源代码默认的预测时域为10,测试发现mpc计算时间约0.35ms:

522b337e70156b16a592799fa5d7ef00.png

当调整预测时域至18时,MPC计算时间嗖的就增加到5.5ms了:

b58ca3ed8a24587f71f29273cc506260.png

据手里有upboard板子的小伙伴介绍,预测时域在18时,upboard上计算时间能到接近30ms,因此有必要对原算法做一些调整来提高运算效率。

一、在eigen中使用静态矩阵

在SolveMPC.cpp中,使用eigen定义了一些动态矩阵:

  Matrix<fpt,Dynamic,13> A_qp;
  Matrix<fpt,Dynamic,Dynamic> B_qp;
  Matrix<fpt,13,12> Bdt;
  Matrix<fpt,13,13> Adt;
  Matrix<fpt,25,25> ABc,expmm;
  Matrix<fpt,Dynamic,Dynamic> S;
  Matrix<fpt,Dynamic,1> X_d;
  Matrix<fpt,Dynamic,1> U_b;
  Matrix<fpt,Dynamic,Dynamic> fmat;
  Matrix<fpt,Dynamic,Dynamic> qH;
  Matrix<fpt,Dynamic,1> qg;
  Matrix<fpt,Dynamic,Dynamic> eye_12h;

这些矩阵之所以是动态的,是因为其大小取决于预测时域。而预测时域在机器人运行过程中是不会变的,因此完全可以将这些矩阵设置成静态的:

  Matrix<fpt,13*HORIZON_LENGTH,13> A_qp;  
  Matrix<fpt,13*HORIZON_LENGTH,12*HORIZON_LENGTH> B_qp;
  Matrix<fpt,13,12> Bdt;
  Matrix<fpt,13,13> Adt;
  Matrix<fpt,25,25> ABc,expmm;
  Matrix<fpt,13*HORIZON_LENGTH,13*HORIZON_LENGTH> S;
  Matrix<fpt,13*HORIZON_LENGTH,1> X_d;
  Matrix<fpt,20*HORIZON_LENGTH,1> U_b;
  Matrix<fpt,20*HORIZON_LENGTH,12*HORIZON_LENGTH> fmat;
  Matrix<fpt,12*HORIZON_LENGTH,12*HORIZON_LENGTH> qH;
  Matrix<fpt,12*HORIZON_LENGTH,1> qg;
  Matrix<fpt,12*HORIZON_LENGTH,12*HORIZON_LENGTH> eye_12h;

注意

    <
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值