代码解释及MATLAB复现--灯哥四足机器人步态规划部分

 目录

一、 规划方案:

1、x轴规划

2、z轴规划

二、灯哥源代码

三、MATLAB复现


        笔者在看灯哥较新版的四足机器人控制程序中,观察到他没有向往常一样使用的传统的摆线轨迹,而是采用分段多项式进行足端轨迹规划。其中引入了摆动相抬腿速度作为轨迹规划的一个影响因素,提高了其自适应能力,这跟笔者之前写到的足端轨迹规划文章中的三次多项式规划方式有相同的思想。

一、 规划方案:

        考虑到灯哥的py-apple为八自由度四足机器人,因此我们只考虑机器人前进方向和竖直方向,将前进方向定为x轴,竖直方向定为z轴。

        并定义下列参数含义:

  • t:    当前时间
  • Tf:  摆动相时间
  • xt:  摆动相在x轴方向上的目标位置
  • zh: 摆动相在z轴方向上的抬腿高度
  • x0: 摆动腿在x轴上初始位置
  • z0: 摆动相在z轴上初始位置
  • xv0:摆动相抬腿前腿的瞬时速度

1、x轴规划

        (1) 当t>0 并且 t<\frac{T_{f}}{4}时:

                                                x_{f}=(\frac{-4*xv0}{T_{f}})t^{2}+xv0*t+x_{0}

        (2) 当t\geqslant \frac{T_{f}}{4}并且t<\frac{3T_{f}}{4}时:

      x_{f}=\frac{(-4T_{f}*xv0-16x_{t}+16x_{0})*t^{3}}{T_{f}^{3}}+\frac{(7T_{f}*xv0+24x_{t}-24x_{0})*t^{2}}{T_{f}^{2}}+\frac{(-15T_{f}*xv0-36x_{t}+36x_{0})*t}{4T_{f}})+\frac{(9*T_{f}*xv0+16x_{t})}{16}

        (3)当t\geqslant \frac{3T_{f}}{4}时:

x_{f}=x_{t}

2、z轴规划

         (1)  当t\geqslant 0 并且 t<\frac{T_{f}}{2}时:

z_{f}=\frac{(16z_{0}-16z_{h})*t^{3}}{T_{f}^{2}}+\frac{(12z_{h}-12z_{0})*t^{2}}{T_{f}^{2}}+z_{0}

        (2)当t\geqslant \frac{T_{f}}{2}时:

z_{f}=\frac{(4z_{0}-4z_{h})*t^{2}}{T_{f}^{2}}-\frac{(4z_{0}-4z_{h})*t}{T_{f}}+z_{0}

  二、灯哥源代码:

def swing_curve_generate(t,Tf,xt,zh,x0,z0,xv0):
  # X Generator
  if t>=0 and t<Tf/4:
    xf=(-4*xv0/Tf)*t*t+xv0*t+x0
    
  if t>=Tf/4 and t<(3*Tf)/4:
    xf=((-4*Tf*xv0-16*xt+16*x0)*t*t*t)/(Tf*Tf*Tf)+((7*Tf*xv0+24*xt-24*x0)*t*t)/(Tf*Tf)+((-15*Tf*xv0-36*xt+36*x0)*t)/(4*Tf)+(9*Tf*xv0+16*xt)/(16)
    
  if t>(3*Tf)/4:
    xf=xt
  # Z Generator
  if t>=0 and t<Tf/2:
    zf=(16*z0-16*zh)*t*t*t/(Tf*Tf*Tf)+(12*zh-12*z0)*t*t/(Tf*Tf)+z0
  
  if t>=Tf/2:
    zf=(4*z0-4*zh)*t*t/(Tf*Tf)-(4*z0-4*zh)*t/(Tf)+z0
      
  #Record touch down position
  x_past=xf
  t_past=t
  
  # # Avoid zf to go zero
  if zf<=0:
    zf=0
  #x,z position,x_axis stop point,t_stop point;depend on when the leg stop
  
  return xf,zf,x_past,t_past

三、MATLAB复现

考虑到在该程序中,无法实时监测摆动腿速度,因此我们将xv0设置为定值,其他参数也任意初始化。

MATLAB源程序:

Tf = 0.5;
xv0 =1;
xt = 8;
zh = 4;
x0 = 0;
z0 = 0;
xf = zeros(1,length([0:0.01:Tf]));
zf = zeros(1,length([0:0.01:Tf]));
i=1;
k=1;
for t = 0:0.001:Tf
    if(t>=0&&t<Tf/4)
        xf(i) = (-4*xv0/Tf)*t*t+xv0*t+x0;
        i=i+1;
    elseif(t>=Tf/4&&t<(3*Tf)/4)
        xf(i) = ((-4*Tf*xv0-16*xt+16*x0)*t*t*t)/(Tf*Tf*Tf)+((7*Tf*xv0+24*xt-24*x0)*t*t)/(Tf*Tf)+((-15*Tf*xv0-36*xt+36*x0)*t)/(4*Tf)+(9*Tf*xv0+16*xt)/(16);
        i=i+1;
    elseif(t>=(3*Tf)/4)
        xf(i) =xt;
        i=i+1;
    end
    
    if(t>=0&&t<Tf/2)
        zf(k) = (16*z0-16*zh)*t*t*t/(Tf*Tf*Tf)+(12*zh-12*z0)*t*t/(Tf*Tf)+z0;
        if(zf(k)<0)
            zf(k)=0;
        end
        k=k+1;
    elseif(t>=Tf/2)
        zf(k) = (4*z0-4*zh)*t*t/(Tf*Tf)-(4*z0-4*zh)*t/(Tf)+z0;
        if(zf(k)<0)
            zf(k)=0;
        end
        k=k+1;
    end
end

subplot(3,1,1);
plot(xf,zf,'m-','LineWidth',2);
xlim([-1 max(xf)+1]);
ylim([0  max(zf)+1]);
xlabel('x');
ylabel('z');

subplot(3,1,2);
t = 0:0.001:Tf;
plot(t,xf,'b--','LineWidth',2);
xlabel('t');
ylabel('x');
ylim([0  max(xf)+1]);

subplot(3,1,3);
plot(t,zf,'g-','LineWidth',2);
xlabel('t');
ylabel('z');
ylim([0  max(zf)+1]);

 想知道其他轨迹规划方法的友友可以看我的这一篇文章:
四足机器人学习笔记(足端轨迹规划)_某只旺仔的博客-CSDN博客_足端轨迹

  • 3
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Q-learning算法是一种基于强化学习的路径规划方法,它可以在机器人的环境中根据奖励来确定下一步的动作,进而最终到达目标位置。在MATLAB中,我们可以使用Q-learning算法来实现机器人的路径规划。 首先,我们需要建立机器人的环境模型,包括机器人的起始位置和目标位置、障碍物的位置等信息。然后定义状态空间和动作空间,状态空间是机器人当前所在的位置,动作空间是机器人可以采取的移动方式。同时,需要设定奖励函数,即对机器人采取不同的动作在不同的状态下所获得的奖励。 接着,我们可以使用Q-learning算法,这个算法主要是根据机器人当前的状态和奖励来更新Q值,从而得到最优的路径规划结果。在MATLAB中,我们可以使用相关的函数和工具箱来实现Q-learning算法,如qlearn函数和repmat函数等。 最后,我们可以通过可视化工具来展示机器人的路径规划结果,例如绘制机器人在环境中的运动轨迹。这样,我们就可以通过MATLAB实现Q-learning算法在环境中移动机器人的路径规划。 ### 回答2: 机器学习中的Q-Learning算法是一种基于试错方法的无模型学习算法,能够让机器在与外界交互的过程中逐步学习到最优策略。在路径规划问题中,Q-Learning算法可以帮助机器人通过与环境的交互,找到最优的路径规划策略。 实现Q-learning算法在Matlab中移动机器人的路径规划,需要分为以下几个步骤: 1. 确定机器人的状态空间、动作空间和奖励函数: 机器人的状态空间可以通过环境中的传感器获取,可以是机器人所在的位置、姿态等;动作空间指的是机器人可以采取的行动,如向前、向后等;奖励函数用于评估机器人当前状态所采取的行动的优劣,可以是到达目标点的奖励或者碰到障碍物的惩罚。 2. 初始化Q-table: Q-table是Q-Learning算法中保存每个状态下采取不同动作的价值的表格,需要先进行初始化。可以将Q-table的初始值设置为0,也可以随机生成一个初值。 3. 选择动作: 机器人在每个状态下选择采取的动作时,需要考虑到当前状态下每个动作的价值,根据贪心算法选择价值最大的动作或者随机选择一个动作。 4. 更新Q-table: 机器人采取一次动作后,需要更新Q-table中当前状态下采取该动作的价值。这里采用Q-Learning算法的公式:Q(state, action) = Q(state, action) + learning_rate * (reward + gamma * max(Q(next_state, all_actions)) - Q(state, action)),其中learning_rate是学习率,gamma是折扣因子,reward是奖励函数的值。 5. 重复步骤3和4: 机器人不断选择动作和更新Q-table,直到达到目标点或者碰到障碍物。 通过以上步骤,机器人可以逐渐通过与环境的交互,找到最优的路径规划策略。在实现过程中,需要注意学习率和折扣因子的选择,以及如何设计合适的奖励函数,从而达到更好的路径规划效果。 ### 回答3: Q-learning算法是一种基于强化学习的决策方法,可以用来解决机器人路径规划问题。而在matlab中实现Q-learning算法的过程,主要分为三个步骤:建模、训练和使用。 首先,我们需要建立一个机器人和环境的模型。在该模型中,机器人可以感知到环境中的状态,并且可以采取某些行动来变其所处的状态。同时,我们需要定义一个奖励函数,来指导机器人在不同状态下选择行动的好坏。这个奖励函数可以根据具体的应用需求来设计。 在有了模型之后,我们就可以开始使用Q-learning算法进行训练了。训练的过程主要是机器人在不断地与环境进行交互,并利用之前学习到的经验来更新其策略。具体来说,我们需要在每个状态下记录该状态的Q值,并在机器人选择行动后,计算出新的Q值并进行更新。Q值的更新可以采用如下公式: Q(S,A) = Q(S,A) + α[R + γmaxQ(S',a) - Q(S,A)] 其中,Q(S,A)是状态S下采取行动A的当前估计值,α是学习率,R是在状态S下采取行动A所获得的即时奖励,γ是折扣因子,表示在未来时间步的奖励的重要程度,maxQ(S',a)是在状态S'下采取所有可能的行动a所获得的最大Q值。通过不断地迭代更新Q值,机器人就可以逐渐学习到最优的策略。 最后,要使用机器人完成路径规划任务,我们只需要根据训练得到的Q值表,选择在当前状态下可以带来最大Q值的行动,即可完成机器人的路径规划。 综上所述,matlab实现Q-learning算法在环境中移动机器人的路径规划,需要先建立机器人和环境的模型,然后利用Q-learning算法进行训练,最后根据训练得到的Q值表来指导机器人完成路径规划任务。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值