赞
踩
点击上方“3D视觉工坊”,选择“星标”
干货第一时间送达
编辑丨古月居
点击进入—>3D视觉工坊学习交流群
0、步态规划
四足机器人控制当中,步态是至关重要的一项。我们可以简单理解成四足机器人运动过程中各腿的状态,在这套设计方案中,我们对步态的规划主要分成两大主要部分,即接触状态和周期函数。而步态规划的目的,就是创建一个关于的足端接触状态的周期函数。
1、接触状态
四足机器人行进过程中,根据足端与地面是否发生接触,我们可以规定各条腿的两种接触状态,即接触(contact)与摆动(swing)
总控制器会根据步态规划给出的状态,移交至对应的控制器去处理,即摆动腿控制器(swing leg controll),接触腿控制器(contact leg control)。
对于这两种状态,可以简单地用一个布尔类型的值s来定义,即
对于周期性的步态规划,我们可以用下标Φ来进行区分,可以写成:
2、步态周期
四足机器人的运动归根到底都是周期运动,我们无须量化机器人运动的整个过程,因此如何量化定义一个完整的步态周期显得极为重要,在此我们使用基于时间的周期函数,定义一个基准相位值,公式如下:
其中,
t:当前运行时间
t0:当前周期开始时间
T:一个步态周期
同样我们可以利用取余的方法来简化上述周期函数,两者并无实质的区别:
其中
%为取余运算
t为当前运行时间
对于相同类型的周期信号,我们可以利用相位差来表征周期函数之间的差别,因此有了基准相位函数之后,我们就可以利用其来定义各条腿的相位,如下式:
其中,Φi,offset为第条腿与基准相位的相位差。
3、周期函数效果演示
这里简单利用一个线性函数进行演示
取a=1,b=1,其图像随时间变化如下:
利用周期函数对时间进行调整,可以使其变成周期函数,设定周期为2s,时长为10s,其图像如下:
从图像可以看出,刚好为5个周期,一个周期为一个尖角。接下来,为更好的观察各曲线相位,我们设定该直线函数的3个周期,其相位差(offset)分别为[0,1,3,4],图像如下:
从上图可以看出,我们的“尖角”会根据相位差,向前或向后平移。此方法对所有函数均适用,以下为利用sin函数进行的测试效果:
测试用代码:
- import numpy as np
- import matplotlib.pyplot as plt
-
-
-
-
- T = 2*np.pi
- t = np.linspace(0, 10, 100)
- offset = [0, 0.5*np.pi, np.pi, 1.5*np.pi]
- # offset = [0]*4
- phi_offset = []
-
-
-
-
- def linear_fun(x):
- return x+1
-
-
-
-
- def linear_draw():
- plt.title('linear_function')
- plt.plot(t, linear_fun(t))
-
-
-
-
- def single_period():
- plt.title('period_linear_function')
- plt.plot(t, linear_fun(t % T))
-
-
-
-
- def period_draw():
- plt.title('period_ot')
- for i in range(len(offset)):
- phi_offset.append(np.sin((t+offset[i]) % T))
- plt.plot(t, phi_offset[i], label='%f' % offset[i])
-
-
-
-
- period_draw()
- plt.legend()
- plt.show()
4、步态规划
因为我们的四足机器人足端,是在不停地与地面接触,悬空(摆动),所以这里说的步态规划,其实指的的一个连续(离散)时间上的接触序列。
我们以一条腿为例,本质上,可以看作是一个周期性的,用于生成各腿接触状态的阶跃函数。其输入值为时间,输出值为0或1,函数可以表示成如下:
其中t=t%T为时间的周期函数,其图像如下所示。
可以看出,步态规划器给出的是一段由0-1组成的接触序列。接下来加上相位关系。以tort步态为例,其相位为[0, 0.5, 0.5, 0],步态规划随时间的图像如下所示:
测试代码:
- import numpy as np
- import matplotlib.pyplot as plt
-
-
- T = 1
- t = np.linspace(0, 5, 100)
- states = []
- FR = []
- FL = []
- BR = []
- BL = []
-
-
- phi_offset = [FR, FL, BR, BL]
- offset = [0, 0.5, 0.5, 0]
-
-
-
-
- def step(t):
- if t < 0.5*T:
- state = 0
- else:
- state = 1
- return state
-
-
-
-
- def draw():
- for time in t:
- for i in range(len(offset)):
- phi_offset[i].append(step((time+offset[i]) % T))
-
-
- plt.subplot(411)
- plt.ylabel('FR')
- plt.plot(t, phi_offset[0])
-
-
- plt.subplot(412)
- plt.ylabel('FL')
- plt.plot(t, phi_offset[1])
-
-
- plt.subplot(413)
- plt.ylabel('BR')
- plt.plot(t, phi_offset[2])
-
-
- plt.subplot(414)
- plt.ylabel('BL')
- plt.plot(t, phi_offset[3])
-
-
-
-
- fig = plt.figure()
- draw()
- fig.tight_layout()
- 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)
16.透彻理解视觉ORB-SLAM3:理论基础+代码解析+算法改进
重磅!粉丝学习交流群已成立
交流群主要有3D视觉、CV&深度学习、SLAM、三维重建、点云后处理、自动驾驶、多传感器融合、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、ORB-SLAM系列源码交流、深度估计、TOF、求职交流等方向。
扫描以下二维码,添加小助理微信(dddvisiona),一定要备注:研究方向+学校/公司+昵称,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,可快速被通过且邀请进群。原创投稿也请联系。
▲长按加微信群或投稿,微信号:dddvisiona
3D视觉从入门到精通知识星球:针对3D视觉领域的视频课程(三维重建系列、三维点云系列、结构光系列、手眼标定、相机标定、激光/视觉SLAM、自动驾驶等)、源码分享、知识点汇总、入门进阶学习路线、最新paper分享、疑问解答等进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,6000+星球成员为创造更好的AI世界共同进步,知识星球入口:
学习3D视觉核心技术,扫描查看,3天内无条件退款
高质量教程资料、答疑解惑、助你高效解决问题
觉得有用,麻烦给个赞和在看~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。