MIT Cheetah3 虚拟支撑多边形

 如图所示,中心的蓝色*号是虚拟支撑多边形计算出的期望质心位置;根据仿真,此方法的效果不明显;参考文献为【MIT Cheetah 3: Design and Control of a Robust, Dynamic Quadruped Robot】;

部分代码如下,提供给算法足端位置,各个脚的接触状态和摆动状态的相位,即可得出虚拟支撑多边形

    %虚拟支持多边形会偏离了接近接触阶段结束的腿朝向即将着陆的腿。
        sigma=ones(4,1)*0.2;
    KcC=zeros(4,1);
    KcS=zeros(4,1);
    Fai=zeros(4,1);
    legnum=[2,3;4,1;1,4;3,2];
    for leg=1:4
        sq=2^0.5;
%         if abs(contactstate(leg))<0.001
        KcS(leg)=0.5*(2+erf(-swingstate(leg)/(sigma(3)*sq) ) + erf( ( swingstate(leg)-1 ) /( sigma(4)*sq ) ) );
%         else
        KcC(leg)=0.5*(  erf(  contactstate(leg) / (sigma(1)*sq) ) + erf(  ( 1-contactstate(leg) )/(sigma(2)*sq )) );
%         end
        Fai(leg)=ceil(contactstate(leg))*KcC(leg)+ceil(swingstate(leg))*KcS(leg);
    end
    E=zeros(6,4);
    Ee=zeros(3,4);
    for leg=1:4
        p=[foot_pos(:,leg),foot_pos(:,legnum(leg,1));foot_pos(:,leg),foot_pos(:,legnum(leg,2))];
        E(:,leg)=p*[Fai(leg);1-Fai(leg)];
        Ee(:,leg)= foot_pos(:,leg)*Fai(leg)+ Fai(legnum(leg,1))*E(1:3,leg)+Fai(legnum(leg,2))*E(4:6,leg);
        Ee(:,leg)=Ee(:,leg)/(Fai(leg)+Fai(legnum(leg,1))+Fai(legnum(leg,2)));
    end
    off=sum(Ee')/4;
clf;
center=sum(foot_pos')/4;
plotx=[E(1:2,1),E(4:5,2),E(1:2,2),E(4:5,4),E(1:2,4),E(4:5,3),E(1:2,3),E(4:5,1),E(1:2,1)];
plot(plotx(1,:),plotx(2,:))
hold on;
plot(Ee(1,:),Ee(2,:),'o'); %虚拟接触多边形顶点
plot(off(1),off(2),'*'); %期望质心位置
plot(foot_pos(1,:),foot_pos(2,:),'.'); %足点
plot(center(1),center(2),'o'); %足点的中心

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值