当前位置:   article > 正文

一文了解四足机器人的步态设计!

四足蜘蛛机器人步态规划

点击上方“3D视觉工坊”,选择“星标”

干货第一时间送达

f005ea2d61da6724b093f1279f966d79.jpeg

编辑丨古月居

点击进入—>3D视觉工坊学习交流群

0、步态规划

四足机器人控制当中,步态是至关重要的一项。我们可以简单理解成四足机器人运动过程中各腿的状态,在这套设计方案中,我们对步态的规划主要分成两大主要部分,即接触状态和周期函数。而步态规划的目的,就是创建一个关于的足端接触状态的周期函数。

1、接触状态

四足机器人行进过程中,根据足端与地面是否发生接触,我们可以规定各条腿的两种接触状态,即接触(contact)与摆动(swing)

总控制器会根据步态规划给出的状态,移交至对应的控制器去处理,即摆动腿控制器(swing leg controll),接触腿控制器(contact leg control)。

对于这两种状态,可以简单地用一个布尔类型的值s来定义,即

dee6d2c4889e97c4e8be8b1a4aba2e27.png

对于周期性的步态规划,我们可以用下标Φ来进行区分,可以写成:

d5fc620bc11f03fa488af77e5ae7fb30.png

2、步态周期

四足机器人的运动归根到底都是周期运动,我们无须量化机器人运动的整个过程,因此如何量化定义一个完整的步态周期显得极为重要,在此我们使用基于时间的周期函数,定义一个基准相位值,公式如下:

efc8b2b967e6ca5d9f3fb6f9b13e8ae4.png

其中,

  • t:当前运行时间

  • t0:当前周期开始时间

  • T:一个步态周期

同样我们可以利用取余的方法来简化上述周期函数,两者并无实质的区别:

44d10332095efbd9a4fae633366e28f4.png

其中

  • %为取余运算

  • t为当前运行时间

对于相同类型的周期信号,我们可以利用相位差来表征周期函数之间的差别,因此有了基准相位函数之后,我们就可以利用其来定义各条腿的相位,如下式:

c5c4dcf0ee9cd264f66aa88a4ff1bf67.png

其中,Φi,offset为第条腿与基准相位的相位差。

3、周期函数效果演示

这里简单利用一个线性函数进行演示

1687ade12ac2202db30394b884f955ee.png

取a=1,b=1,其图像随时间变化如下:

e706af54196f7ec3a04b8f0f52e4e3b1.png

利用周期函数对时间进行调整,可以使其变成周期函数,设定周期为2s,时长为10s,其图像如下:

0493d51af0e782b22ba683e5274df1d6.png

从图像可以看出,刚好为5个周期,一个周期为一个尖角。接下来,为更好的观察各曲线相位,我们设定该直线函数的3个周期,其相位差(offset)分别为[0,1,3,4],图像如下:

6c99d5ea82decdd71f8ee4d75d0af095.png

从上图可以看出,我们的“尖角”会根据相位差,向前或向后平移。此方法对所有函数均适用,以下为利用sin函数进行的测试效果:

801198ac7f78aa2de69f0143e56f2b6d.png

测试用代码:

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. T = 2*np.pi
  4. t = np.linspace(0, 10, 100)
  5. offset = [0, 0.5*np.pi, np.pi, 1.5*np.pi]
  6. # offset = [0]*4
  7. phi_offset = []
  8. def linear_fun(x):
  9.    return x+1
  10. def linear_draw():
  11.    plt.title('linear_function')
  12.    plt.plot(t, linear_fun(t))
  13. def single_period():
  14.    plt.title('period_linear_function')
  15.    plt.plot(t, linear_fun(t % T))
  16. def period_draw():
  17.    plt.title('period_ot')
  18.    for i in range(len(offset)):
  19.        phi_offset.append(np.sin((t+offset[i]) % T))
  20.        plt.plot(t, phi_offset[i], label='%f' % offset[i])
  21. period_draw()
  22. plt.legend()
  23. plt.show()

4、步态规划

因为我们的四足机器人足端,是在不停地与地面接触,悬空(摆动),所以这里说的步态规划,其实指的的一个连续(离散)时间上的接触序列。

我们以一条腿为例,本质上,可以看作是一个周期性的,用于生成各腿接触状态的阶跃函数。其输入值为时间,输出值为0或1,函数可以表示成如下:

152fe5d3579a8bc6e0d2da6945738d0d.png

其中t=t%T为时间的周期函数,其图像如下所示。

67a33f5d2cdcf15b19cacce004a2ddc7.png

可以看出,步态规划器给出的是一段由0-1组成的接触序列。接下来加上相位关系。以tort步态为例,其相位为[0, 0.5, 0.5, 0],步态规划随时间的图像如下所示:

7c4a78e330d4671b24a9ad0d1454ff34.png

测试代码:

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. T = 1
  4. t = np.linspace(0, 5, 100)
  5. states = []
  6. FR = []
  7. FL = []
  8. BR = []
  9. BL = []
  10. phi_offset = [FR, FL, BR, BL]
  11. offset = [0, 0.5, 0.5, 0]
  12. def step(t):
  13.    if t < 0.5*T:
  14.        state = 0
  15.    else:
  16.        state = 1
  17.    return state
  18. def draw():
  19.    for time in t:
  20.        for i in range(len(offset)):
  21.            phi_offset[i].append(step((time+offset[i]) % T))
  22.    plt.subplot(411)
  23.    plt.ylabel('FR')
  24.    plt.plot(t, phi_offset[0])
  25.    plt.subplot(412)
  26.    plt.ylabel('FL')
  27.    plt.plot(t, phi_offset[1])
  28.    plt.subplot(413)
  29.    plt.ylabel('BR')
  30.    plt.plot(t, phi_offset[2])
  31.    plt.subplot(414)
  32.    plt.ylabel('BL')
  33.    plt.plot(t, phi_offset[3])
  34. fig = plt.figure()
  35. draw()
  36. fig.tight_layout()
  37. plt.show()

5、总结

综上,我们利用阶跃函数得到一串由0和1组成的序列,来表示四足机器人足端与地面的接触状态。根据不同的接触状态,再交由其他运动控制器进行控制,如接触状态,就由mpc模型计算出所需要的反作用力;而摆动状态,就交由摆动控制模块计算足端的摆动轨迹

最后根据需要的不同的行走姿态,确定个条腿之间的相位差,实现各腿的协同运动。至此我们完成了对四足机器人步态的数学建模,更多内容可以点击主页查看,点点关注,后续会有更多相关内容。

本文仅做学术分享,如有侵权,请联系删文。

点击进入—>3D视觉工坊学习交流群

干货下载与学习

后台回复:巴塞罗自治大学课件,即可下载国外大学沉淀数年3D Vison精品课件

后台回复:计算机视觉书籍,即可下载3D视觉领域经典书籍pdf

后台回复:3D视觉课程,即可学习3D视觉领域精品课程

3D视觉工坊精品课程官网:3dcver.com

1.面向自动驾驶领域的3D点云目标检测全栈学习路线!(单模态+多模态/数据+代码)
2.彻底搞透视觉三维重建:原理剖析、代码讲解、及优化改进
3.国内首个面向工业级实战的点云处理课程
4.激光-视觉-IMU-GPS融合SLAM算法梳理和代码讲解
5.彻底搞懂视觉-惯性SLAM:基于VINS-Fusion正式开课啦
6.彻底搞懂基于LOAM框架的3D激光SLAM: 源码剖析到算法优化
7.彻底剖析室内、室外激光SLAM关键算法原理、代码和实战(cartographer+LOAM +LIO-SAM)

8.从零搭建一套结构光3D重建系统[理论+源码+实践]

9.单目深度估计方法:算法梳理与代码实现

10.自动驾驶中的深度学习模型部署实战

11.相机模型与标定(单目+双目+鱼眼)

12.重磅!四旋翼飞行器:算法与实战

13.ROS2从入门到精通:理论与实战

14.国内首个3D缺陷检测教程:理论、源码与实战

15.基于Open3D的点云处理入门与实战教程

16.透彻理解视觉ORB-SLAM3:理论基础+代码解析+算法改进

17.机械臂抓取从入门到实战

重磅!粉丝学习交流群已成立

交流群主要有3D视觉、CV&深度学习、SLAM、三维重建、点云后处理、自动驾驶、多传感器融合、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、ORB-SLAM系列源码交流、深度估计、TOF、求职交流等方向。

扫描以下二维码,添加小助理微信(dddvisiona),一定要备注:研究方向+学校/公司+昵称,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,可快速被通过且邀请进群。原创投稿也请联系。

6efa731189962c0c5aeddcf723773a3e.jpeg

▲长按加微信群或投稿,微信号:dddvisiona

3D视觉从入门到精通知识星球:针对3D视觉领域的视频课(三维重建系列、三维点云系列、结构光系列、手眼标定、相机标定、激光/视觉SLAM、自动驾驶等)源码分享、知识点汇总、入门进阶学习路线、最新paper分享、疑问解答等进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,6000+星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看,3天内无条件退款

6d92271b94f2e09311062ced35a528b1.jpeg

高质量教程资料、答疑解惑、助你高效解决问题

觉得有用,麻烦给个赞和在看~  

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/488006
推荐阅读
相关标签
  

闽ICP备14008679号