[灯哥开源—四足机器人]程序算法讲解与STM32移植——PA_TROT和PA_WALK讲解和trot步态,walk步态,步态规划

[灯哥开源—四足机器人]程序算法讲解与STM32移植——PA_TROT和PA_WALK讲解和trot步态,walk步态,步态规划目录步态基础概念介绍TROT步态原理TROT代码实现步态基础概念介绍步态:指机器人各腿依序进行抬腿、着地以及后蹬动作的一种行走方式

 

关键词:trot步态,walk步态,步态规划

目录

步态基础概念介绍

TROT步态原理

TROT代码实现

WALK步态原理

WALK代码实现

引用文献:


写在前面

这篇文章介绍的是,这篇文章[灯哥开源—四足机器人]程序算法讲解与STM32移植——PA_TROT和PA_WALK讲解和trot步态,walk步态,步态规划中如红框所示的部分

[灯哥开源—四足机器人]程序算法讲解与STM32移植——PA_TROT和PA_WALK讲解和trot步态,walk步态,步态规划

 

步态基础概念介绍

步态:指机器人各腿依序进行抬腿、着地以及后蹬动作的一种行走方式。为了确保机器人在未受外界扰动的情况下能够稳定步行,需要进行步态规划。

摆动相:腿部抬起处于腾空的状态。

支撑相:腿部着地的状态。

周期:腿部完成抬腿迈步以及着地后蹬动作的时间。

步态频率:单位时间内完成的步态周期数。

步长:一个周期内,足端从抬腿到着地过程中走过的距离。

占空比:单腿处于支撑相的时间占整个周期的比值。

步幅:一个周期内,机身前进的距离。

单独看这些名词不好理解,我们就利用一个trot步态的例子进行讲解

[灯哥开源—四足机器人]程序算法讲解与STM32移植——PA_TROT和PA_WALK讲解和trot步态,walk步态,步态规划

如图2-7(a)所示:起始时对角腿 1

4
抬起并向前摆动,另外一组对角腿
2
和 3 支撑整个机身并确保机器人重心在其支撑对角线上。此时对角腿 1
和 4为摆动相,对角腿
2
和 3 为支撑相。
 
如图
2-7(b)
所示:支撑腿 2

3
驱动机器人机身向前移 动,而对角腿 1

4 仍处于飞行相中。摆动相,
支撑相同上。
 
如图
2-7(c)
所示:
当机体平移了半个步长即 s
/ 2
距 离时,摆动腿 1

4
着地,处于支撑状态,而原来处于支撑状态的对角腿
2 和 3 抬起处于摆动状态。此时对角腿 2 
和 3 为摆动相,对角腿 1
 
和 4 为支撑相。
 
如图
2-7(d)
所示:
处于支撑相的对角腿 1

4
驱动机器人机身向前移动, 对角腿 2

3
处于飞行状态
摆动相,
支撑相同上。
 
如图
2-7(e)
所示:
当机身平移了剩下的 s
/ 2
距离时,对角 腿 2

3
着地,而对角腿
1

4
开始抬腿并摆动,从而完成了一个完整周期的动作。机身移动的长度为S,即步幅和步长都为S。
 
以上,我们就明白了什么是
摆动相,支撑相,步幅和步长。又因为我们选择的trot步态,这就决定了我们的占空比为0.5。周期由我们的实际需要和机器人狗的物理参数决定,步态频率由周期换算即可。
 
而不同步态就是在一个周期内,每个脚的
摆动相,
支撑相经过不同的组合而成,常见的步态如下,可看见不同步态的占空比分别是怎样的。

[灯哥开源—四足机器人]程序算法讲解与STM32移植——PA_TROT和PA_WALK讲解和trot步态,walk步态,步态规划

 

TROT步态原理

经过上述的举例,我们已经明白了狗狗一条腿的摆腿顺序,和摆腿时间。但腿具体是怎样摆的,在空间划过怎样的曲线我们还不得而知,这个曲线可能有很多种,以下是我列的几种:

[灯哥开源—四足机器人]程序算法讲解与STM32移植——PA_TROT和PA_WALK讲解和trot步态,walk步态,步态规划

是的是的,前面 3 个是我夸张处理了,第四个和我们需要的但较为接近。

步态函数是一个以时间 t 为自变量,函数坐标 x 和 z 为因变量的函数,

 

Z = Z(t)    X = X(t)

 

它的物理意义就是在一个平面内,每个时间打一个点,打出的点可以大致连成一条曲线。

这条曲线的推导也并非是凭空捏造出来的,它的推导需要满足一定的条件,例如

对摆动相来说,为了减少对身体的冲击,需要保证轨迹方程在起始和结束时刻,X方向速度和加速度为零;在尽量降低起始的加速度的同时,速度不能过慢,故速度曲线应该是一段快速上升到平稳的曲线。

基于这样的一些要求,我们便可以使用待定系数法去求解一个,符合要求的曲线,首先设

  [灯哥开源—四足机器人]程序算法讲解与STM32移植——PA_TROT和PA_WALK讲解和trot步态,walk步态,步态规划其中 t 为时间,T 为周期。对式子进行积分,得[灯哥开源—四足机器人]程序算法讲解与STM32移植——PA_TROT和PA_WALK讲解和trot步态,walk步态,步态规划紧接着带入我们可以确定的值,如起始和结束时刻速度为 0 便可求得式子的参数。对求出的式子再积分一次,得出最终的步态曲线函数。

PA_TROT中采用的的是下图这个步态曲线函数,详细的介绍可以观看这个视频https://www.bilibili.com/video/BV1KQ4y1K7aV?from=search&seid=17567602001381485484)这个步态曲线函数是应该是从某个大佬的经过验证的论文中得来,大家直接拿来用就可以。

[灯哥开源—四足机器人]程序算法讲解与STM32移植——PA_TROT和PA_WALK讲解和trot步态,walk步态,步态规划

综上,我们知道了腿的摆腿顺序,摆腿时间和运动的轨迹,trot步态的基本原理就明白了,接下来就是程序实现。

 

TROT代码实现

首先,从原理到代码实现,应用前面章节的知识,我们应该明确输入量和输出量分别是什么?最基础的,我们应该知道当前的时间,抬腿的高度以及起始足端坐标和终点足端坐标,输出的值为足端坐标。

再按照上述理论的推导,一个周期内一组对角的腿一起迈出,然后另外一组对角的腿迈出。所以我们可以把周期设为一,占空比设为0.5。0~0.5个周期时,输出第1组坐标,0.5~1个周期输出第2组坐标。 因此我们首先用一个大的if为判断,看现在时间是属于哪个周期。当进入这个周期时,利用步态曲线函数计算出坐标,分别赋给对应的腿。

faai=0.5
Ts=1

#函数功能:使用trot步态,生成足端坐标
#变量作用:
#t为当前时间
#xs为起始足端坐标
#xf为终点足端坐标
#h为抬腿高度
#r1,r2,r3,r4取值可以为1或者-1,代表曲线生成的正逆,用于控制转弯
#返回值:足端坐标
def cal_t(t,xs,xf,h,r1,r4,r2,r3):    #小跑步态执行函数
    if t<=Ts*faai:
        sigma=2*pi*t/(faai*Ts)
        zep=h*(1-cos(sigma))/2
        xep_b=(xf-xs)*((sigma-sin(sigma))/(2*pi))+xs
        xep_z=(xs-xf)*((sigma-sin(sigma))/(2*pi))+xf
        #输出y
        y1=zep y2=0 y3=zep y4=0
        #输出x
        x1=-xep_z*r1 x2=-xep_b*r2 x3=-xep_z*r3 x4=-xep_b*r4
        return x1,x2,x3,x4,y1,y2,y3,y4

    elif t>Ts*faai and t<=Ts:
        sigma=2*pi*(t-Ts*faai)/(faai*Ts)
        zep=h*(1-cos(sigma))/2;
        xep_b=(xf-xs)*((sigma-sin(sigma))/(2*pi))+xs
        xep_z=(xs-xf)*((sigma-sin(sigma))/(2*pi))+xf
        #输出y
        y1=0 y2=zep y3=0 y4=zep
        #输出x
        x1=-xep_b*r1 x2=-xep_z*r2 x3=-xep_b*r3 x4=-xep_z*r4
        return x1,x2,x3,x4,y1,y2,y3,y4

其中狗腿对应表如下

——头——
1————2
4————3

我们还注意到,传入的参数的参数中,r1,r4,r2,r3会与 x 坐标相乘,这个是起什么作用呢?这是困惑了许久的问题。

我们翻阅整份程序,可以在web_c中找到这个值的源头,它是遥控器传入的值

[灯哥开源—四足机器人]程序算法讲解与STM32移植——PA_TROT和PA_WALK讲解和trot步态,walk步态,步态规划

大概意思是这样的 当value = left 时  L=-1;R=1 ;value = right 时  L=1;R=-1

当 L=-1;R=1时,r1 = r4 = L = -1;r2 = r3 = R = -1;x1,x4与原来的轨迹相反,x2,x3与原来的轨迹相同。

它意味着,机器人坐标左边的足端都会产生一条向后的轨迹,而机器人坐标右边的足端都会产生一条向前的轨迹,使机器人左边脚往后,右边脚往前,完成旋转的动作。

 

WALK步态原理

有了上述的原理基础,我们学习walk步态原理时就变得容易了。我们知道一个步态是由足端轨迹和步态对应的占空比构成。walk步态足端轨迹与trot相同,我就不再介绍。而walk步态的摆动相,支撑相,占空比如图所示

[灯哥开源—四足机器人]程序算法讲解与STM32移植——PA_TROT和PA_WALK讲解和trot步态,walk步态,步态规划

walk步态任何时候都有三条腿着地,四条腿分别依次迈,他们的抬腿顺序为:左前——右前——右后——左后,每个摆动相分别的占空比0.25。

此外,当三条腿支撑时,涉及到一个找零力矩点的问题。这个问题有点复杂,我简单说一下,希望大家能看得。由于三脚着地,与四脚着地或者两脚着地情况都不一样,重心不是在对角线上,而是在三脚着地点形成的三角形中。因此找到零力矩点后,我们便调整身体姿态,实现让重心向前移动,进而让机体向前移动。详细的原理可以看这篇文章《基于零力矩点的四足机器人非平坦地形下步态规划与控制》

WALK代码实现

walk步态代码实现的总体框架与trot步态差不多,输入量当前时间和抬腿高度是必不可少的,但还是存在其他的一些差异。

首先walk步态是 4 条腿分开抬,因此一个周期会被划分为四个分别计算四条腿的足端轨迹。其次因为需要调整重心,也需要传入身体姿态的值。

[灯哥开源—四足机器人]程序算法讲解与STM32移植——PA_TROT和PA_WALK讲解和trot步态,walk步态,步态规划

值得注意的是,由于程序中walk步态与trot步态的迈腿速度不一样,所以进循环的速度也不一样,trot步态的计时是在主循环中,而walk步态是写在了PA_WALK文件中的cal_w函数里。

[灯哥开源—四足机器人]程序算法讲解与STM32移植——PA_TROT和PA_WALK讲解和trot步态,walk步态,步态规划

以此类推,依次算出四条腿的值,即可。

 

 

 

 

 

 

 

引用文献:

四足仿生机器人控制系统的研究与设计 华中科技大学 程品

液压四足机器人驱动控制与步态规划研究 北京理工大学 王立鹏

电驱四足机器人步态规划及运动控制系统设计 安徽工业大学 崔越                 

 

今天的文章[灯哥开源—四足机器人]程序算法讲解与STM32移植——PA_TROT和PA_WALK讲解和trot步态,walk步态,步态规划分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/65691.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注