本文仅供学习使用
本文结合个人理解体会作者的思路,也从个人科研角度出发,部分翻译参考由:QQ群(2群legged robot that balance)提供,感谢他们为本文英文版翻译所做的贡献(但有些部分阅读起来仍有困难),若有改进之处欢迎共同讨论!

运动控制的替代方法Ch06

  • 1. 有关弹跳运动控制的更多介绍
    • 1.1 弹跳模型
    • 1.2 跳跃
    • 1.3 跳跃能
    • 1.4 弹跳运动仿真的结果
    • 1.5 弹跳运动的策略
  • 2. 三部曲控制的替代方案
    • 2.1 腿部摆动算法
    • 2.2 算法的实现
    • 2.3 腿部摆动算法的仿真结果
  • 3. 四足运动的控制分类
    • 3.1 机架坐标系与世界坐标系
    • 3.2 跳跃周期
    • 3.3 协同推地机构
    • 3.4 速度控制
    • 3.5 姿态控制
    • 3.6 恢复(个人理解为摆动,前述章节按照摆动理解——周期运动)
    • 3.7 腿部协调
  • 4. 总结
  • 5. 四足控制决策综述
  • 6. 附录:平面单腿模型的运动方程

可能有数百种合理的功能和方法的组合。实验上的挑战是从中筛选出具体可行的实施决策,并采用一些看起来最有希望的替代方案。
基于这些决策的机器人和实验基于三通道解耦(控制三部曲),利用足端位置和对称性来控制前进速度,以及使用虚拟腿的概念。

1. 有关弹跳运动控制的更多介绍

使用固定的推力来驱动垂直弹跳运动——身体的质量和腿部的弹性形成了一个被动的振荡器(弹簧-质量系统),该振荡器在支撑相由腿部驱动器的作用而激发。当振荡幅度超过一定值时,机体离开地面,整个系统变成弹簧质量/重力质量振荡器

探索一种控制弹跳高度的方法,该方法可以调整每次弹跳中注入的能量——允许控制系统指定特定的跳跃高度,而不是仅指定诸如“较高”或“较低”的相对高度。不太容易受到腿部机构中摩擦力变化的影响,通过伺服运动垂直分量产生的能量来校正腿部的扫动——以稍微复杂的控制为代价

1.1 弹跳模型

模型的基本组成: 机体质量mmm,腿的质量mℓ{{m}_{\ell }}mℓ​和支撑平面

驱动器是与弹簧串联操作的理想位置输入装置。挡块结构可防止弹簧超过最大长度。挡块为刚性的,而阻尼弹簧是弹性的。选择挡块的刚度系数kstop{{k}_{stop}}kstop​和阻尼系数bstop{{b}_{stop}}bstop​,以便在摆动相期间机体和腿部之间的振动在几个周期内衰减。(挡块结构类似于tmd激振器——减少振荡)

刚度为kℓ{{k}_{\ell }}kℓ​的弹簧串联了机架质心与下半部腿,弹簧的最大行程为rs{{r}_{s}}rs​,由挡块限制;支撑平面视为刚度系数kg{{k}_{g}}kg​和阻尼系数bg{{b}_{g}}bg​的弹性结构,阻尼系数的选择是为了防止腿在着陆和起飞过程中在地面上振荡,并且假设地面刚度远远大于腿的刚度kg>>kℓ{{k}_{g}}>>{{k}_{\ell }}kg​>>kℓ​。;腿部质心高度位于足端上方l1{{l}_{1}}l1​处,机体质心高度位于髋部上方l2{{l}_{2}}l2​处。

变量 符号 数值
机体质量 mmm 10kg
腿部质量(无弹簧) mℓ{{m}_{\ell }}mℓ​ 1kg
机体惯性矩 JJJ 10kg·m^2
腿部惯性矩 Jℓ{{J}_{\ell }}Jℓ​ 1kg·m^2
腿部质心 l1{{l}_{1}}l1​ 0.5m
机体质心 l2{{l}_{2}}l2​ 0.4m
腿部弹簧原长 rs0{{r}_{s0}}rs0​ 1m
腿部刚度 kℓ{{k}_{\ell }}kℓ​ 10^3N/m
挡块刚度 kstop{{k}_{stop}}kstop​ 10^5N/m
挡块阻尼 bstop{{b}_{stop}}bstop​ 125N·s/m
地面刚度 kg{{k}_{g}}kg​ 10^4N/m
地面阻尼 bg{{b}_{g}}bg​ 75N·s/m

1.2 跳跃

在支持相,执行机构工作行程的缩短会对系统产生负面影响。
支撑相的的跳跃部分,模型是具有固有频率的弹簧质量振荡器:ωn=kℓm{{\omega }_{n}}=\sqrt{\frac{{{k}_{\ell }}}{m}}ωn​=mkℓ​​​
假设在支撑相发生半个周期的振荡,那么在跳跃期间,每个支撑相的持续时间为:Ts=πωn=πmkℓ{{T}_{s}}=\frac{\pi }{{{\omega }_{n}}}=\pi \sqrt{\frac{m}{{{k}_{\ell }}}}Ts​=ωn​π​=πkℓ​m​​
在摆动相期间,系统沿着由重力加速度决定的抛物线轨迹运动,持续时间为:Tf=2z˙g=8Hg{{T}_{f}}=\frac{2\dot{z}}{g}=\sqrt{\frac{8H}{g}}Tf​=g2z˙​=g8H​​,其中g为重力加速度,H为足端距地的跳跃高度
一个完整的跳跃周期为Ts{{T}_{s}}Ts​与Tf{{T}_{f}}Tf​之和:T=πmkℓ+8HgT=\pi \sqrt{\frac{m}{{{k}_{\ell }}}}+\sqrt{\frac{8H}{g}}T=πkℓ​m​​+g8H​​

1.3 跳跃能

质量的高度位置和惯性速度使得身体和腿都有势能和动能,腿把这些能量储存在弹簧的弹性变形中。原则上,能量也可以储存在地面的弹性变形中,但我们假设地面有的阻尼足够大,使能量不可能传递回去——恢复系数(restitution)为零。跳跃周期的能力公式为:
E=mℓgz1+mgz2+12mℓz˙12+12mz˙22+12kℓ(rs0−r+wℓ)2E={{m}_{\ell }}g{{z}_{1}}+mg{{z}_{2}}+\frac{1}{2}{{m}_{\ell }}{{{\dot{z}}}_{1}}^{2}+\frac{1}{2}m{{{\dot{z}}}_{2}}^{2}+\frac{1}{2}{{k}_{\ell }}{{({{r}_{s0}}-r+{{w}_{\ell }})}^{2}}E=mℓ​gz1​+mgz2​+21​mℓ​z˙1​2+21​mz˙2​2+21​kℓ​(rs0​−r+wℓ​)2
足端刚刚接触地面时,腿部弹簧伸展到静止长度,且模型垂直站立,此处的势能表达为零

在跳跃过程中,有两个会造成显著能量损失的事件:着地(touchdown)起飞(lift-off)

  • 着地时,损失的能量是无弹簧腿的动能:ΔEtd=12mℓz˙1,td−2\Delta {{E}_{td}}=\frac{1}{2}{{m}_{\ell }}{{{\dot{z}}}_{1,td-}}^{2}ΔEtd​=21​mℓ​z˙1,td−​2,其中z˙1,td−{{{\dot{z}}}_{1,td-}}z˙1,td−​为触地之前腿部的垂直速度,触地后与摆动相的动能比为:mℓ/(mℓ+m){{m}_{\ell }}/({{m}_{\ell }}+m)mℓ​/(mℓ​+m)(固定损失比例)
  • 在支持相期间,腿部水平净速度为0;
  • 起飞时,机体高度为z2,lo−{{z}_{2,lo-}}z2,lo−​,起飞后:z2,lo+=z2,lo−{{z}_{2,lo+}}={{z}_{2,lo-}}z2,lo+​=z2,lo−​(此处原文有误),根据动量方程可推得:mz˙2,lo−=(mℓ+m)z˙2,lo+m{{{\dot{z}}}_{2,lo-}}=({{m}_{\ell }}+m){{{\dot{z}}}_{2,lo+}}mz˙2,lo−​=(mℓ​+m)z˙2,lo+​,起飞时腿部加速向上时的能量损失为:ΔEto=−mℓm2(mℓ+m)z˙2,lo−2\Delta {{E}_{to}}=-\frac{{{m}_{\ell }}m}{2({{m}_{\ell }}+m)}{{{\dot{z}}}_{2,lo-}}^{2}ΔEto​=−2(mℓ​+m)mℓ​m​z˙2,lo−​2
  • 当腿执行器的长度从wℓ{{w}_{\ell }}wℓ​改变为wℓ+Δwℓ{{w}_{\ell }}+\Delta {{w}_{\ell }}wℓ​+Δwℓ​时,跳跃能量的变化为:ΔEwℓ=kℓ(12Δwℓ2+ΔwℓrsΔ)\Delta {{E}_{{{w}_{\ell }}}}={{k}_{\ell }}(\frac{1}{2}\Delta {{w}_{\ell }}^{2}+\Delta {{w}_{\ell }}{{r}_{s\Delta }})ΔEwℓ​​=kℓ​(21​Δwℓ​2+Δwℓ​rsΔ​),其中:rsΔ{{r}_{s\Delta }}rsΔ​弹簧相对于其静止长度的位移量,rsΔ=rso−r+wℓ{{r}_{s\Delta }}={{r}_{so}}-r+{{w}_{\ell }}rsΔ​=rso​−r+wℓ​,控制系统通过Δwℓ\Delta {{w}_{\ell }}Δwℓ​为负来耗散能量。对于给定的Δwℓ\Delta {{w}_{\ell }}Δwℓ​, 腿长和位置驱动决定ΔE\Delta EΔE的幅度。

在摆动相中收缩执行机构,并加长工作行程,会使总跳跃能增加。在摆动相中伸长执行机构,并缩短工作行程,会使总跳跃能降低,最终为零。

可以通过支撑相来计算下一摆动相的总跳跃能:Ef=mmℓ+m(mℓgz1+mgz2+12mℓz˙12+12mz˙22+12kℓrsΔ2+12kgz˙02){{E}_{f}}=\frac{m}{{{m}_{\ell }}+m}({{m}_{\ell }}g{{z}_{1}}+mg{{z}_{2}}+\frac{1}{2}{{m}_{\ell }}{{\dot{z}}_{1}}^{2}+\frac{1}{2}m{{\dot{z}}_{2}}^{2}+\frac{1}{2}{{k}_{\ell }}{{r}_{s\Delta }}^{2}+\frac{1}{2}{{k}_{g}}{{\dot{z}}_{0}}^{2})Ef​=mℓ​+mm​(mℓ​gz1​+mgz2​+21​mℓ​z˙1​2+21​mz˙2​2+21​kℓ​rsΔ​2+21​kg​z˙0​2);
为了时足端高度达到H,竖直方向上的总能量为:EH=mℓg(H+l1)+mg(H+rs0+l2){{E}_{H}}={{m}_{\ell }}g(H+{{l}_{1}})+mg(H+{{r}_{s0}}+{{l}_{2}})EH​=mℓ​g(H+l1​)+mg(H+rs0​+l2​)
假设在峰值高度时,腿部和身体的垂直速度为零,腿部没有储存能量,此时完全为重力势能。提供或耗散特定能量ΔE\Delta EΔE,腿部执行器的延伸长度为:Δwℓ=−rsΔ+rsΔ2+2ΔEkℓ\Delta {{w}_{\ell }}=-{{r}_{s\Delta }}+\sqrt{{{r}_{s\Delta }}^{2}+\frac{2\Delta E}{{{k}_{\ell }}}}Δwℓ​=−rsΔ​+rsΔ​2+kℓ​2ΔE​​
支撑相腿部弹簧的最大压缩量是身体和腿部质量、腿部刚度和跳跃高度的函数:Δr=mgkℓ+(mgkℓ)2+2(mℓ+m)2gHmkℓ\Delta r=\frac{mg}{{{k}_{\ell }}}+\sqrt{{{(\frac{mg}{{{k}_{\ell }}})}^{2}}+\frac{2{{({{m}_{\ell }}+m)}^{2}}gH}{m{{k}_{\ell }}}}Δr=kℓ​mg​+(kℓ​mg​)2+mkℓ​2(mℓ​+m)2gH​​

1.4 弹跳运动仿真的结果

模型从静止状态开始,然后腿部执行器在每个循环中注入能量,直到达到所需的值;wℓ{{w}_{\ell }}wℓ​以时间的二次函数增加或减少(这里的意义是什么呢?):wℓ(t)=wℓ,0+kt2{{w}_{\ell }}(t)={{w}_{\ell ,0}}+k{{t}^{2}}wℓ​(t)=wℓ,0​+kt2,其中,wℓ,0{{w}_{\ell ,0}}wℓ,0​是位置制动器的初始长度,kkk为时间常数。执行机构的工作行程为:wℓ,min⁡<wℓ<wℓ,max⁡{{w}_{\ell ,\min }}<{{w}_{\ell }}<{{w}_{\ell ,\max }}wℓ,min​<wℓ​<wℓ,max​。

(上)髋部高度,(中间)足端高度,(下)腿执行器的长度

起飞和高点之间曲线的粗糙部分表明挡块撞击时发生的阻尼振动。

飞行过程中的抛物线轨迹是由恒定重力加速度引起的,而支撑相中的谐波轨迹是由弹簧引起的。

显示了总能量、动能、重力势能和弹性势能的变化。能量突然损失发生在着陆和升空阶段,由垂直虚线表示。随着腿执行器的伸展,支撑相总能量增加。

驱动系统在整个序列中多次调整跳跃高度。通过增加能量(t=1,6,20,33)来增加跳跃高度,通过去除能量(t=13,28)来降低高度。主动阻尼(t=28)比被动耗散跳跃能量(t=40)的下降速度快得多。

1.5 弹跳运动的策略

可以操纵弹跳运动中腿部缩短的时间,以优化各种标准:

  1. 当地形不平坦或高速运动时,需要在摆动相进行较大的腿部水平运动,腿部在起飞时缩短可防止足端碰地(stub its toe)
  2. 如果腿部在摆动相最高处变短,此时垂直运动的间隔时间最长,这种策略可以允许使用较慢的执行器。
  3. 如果在触地的初始阶段腿部变短,那么对脚的地面冲击力就会降到最小。速度匹配的时间会增加。

腿部也可以在起飞时变短,在下一次触地之前再次加长,然后在着陆时变短。这一策略显然是人类在跑步时使用的,它最大限度地提高了离地距离,同时将对脚的冲击力降至最低。然而,它的实现是以在每一步中每条腿额外的延长和缩短为代价的。

2. 三部曲控制的替代方案

前脚摆放用于控制前进速度,支撑相髋部扭矩用于控制身体姿态,腿部推力用于控制跳跃高度。支撑相的髋部扭矩会产生一个水平地面力,使身体向前加速,但这一点被忽略了,控制系统将重点放在调整身体姿态的任务上。

2.1 腿部摆动算法

如果一个腿部系统要以恒定的速度运行,就不能有净水平力作用在机体上。假设我们希望向前跑的速度在整个周期中保持恒定,而不仅仅是支撑相阶段。摆动控制算法通过在支撑相以指定速来速向后摆动腿部和末端落地点来避免在身体上产生水平力。控制系统调整髋部角度以摆动腿部,同时考虑腿部的瞬时长度。腿长随着支撑相的进行而变化。——在标称条件下,脚和地面之间的合力是垂直的。此时x˙Ts\dot{x}{{T}_{s}}x˙Ts​可以准确预测CG轨迹的长度和中性点的位置,因为前行速度是恒定的。

2.2 算法的实现

腿相对于机体绕由直线伺服驱动的髋部扭转:τ=−kp(γ−γd)−kvγ˙\tau =-{{k}_{p}}(\gamma -{{\gamma }_{d}})-{{k}_{v}}\dot{\gamma }τ=−kp​(γ−γd​)−kv​γ˙​,其中:τ\tauτ为髋部驱动扭矩,γ\gammaγ为髋部姿态角,kp,kv{{k}_{p}},{{k}_{v}}kp​,kv​为反馈增益(摆动相:kp=1800N⋅m/rad,kv=200N⋅m⋅s/rad{{k}_{p}}=1800N\cdot m/rad,{{k}_{v}}=200N\cdot m\cdot s/radkp​=1800N⋅m/rad,kv​=200N⋅m⋅s/rad,支撑相:kp=1200N⋅m/rad,kv=60N⋅m⋅s/rad{{k}_{p}}=1200N\cdot m/rad,{{k}_{v}}=60N\cdot m\cdot s/radkp​=1200N⋅m/rad,kv​=60N⋅m⋅s/rad)

假设支撑相的摩擦力可以防止脚在地面上打滑。每次脚接触地面时,弹簧原长将重置为第一落脚点。这种弹性建立与支撑面和腿的耦合柔顺性。

目标角度基于向前移动的速率、腿的瞬时长度、着地后的时间以及着地时脚相对于髋的位置。如果已知支撑相持续时间、机体前进速度和系统模型(机体质量远离髋部),重心相对于髋部的前移位置为:xcg=(l1−r)mℓsin⁡θ+l2msin⁡ϕmℓ+m{{x}_{cg}}=\frac{({{l}_{1}}-r){{m}_{\ell }}\sin \theta +{{l}_{2}}m\sin \phi }{{{m}_{\ell }}+m}xcg​=mℓ​+m(l1​−r)mℓ​sinθ+l2​msinϕ​,中性点相对质心的位置为:xf0=x˙Ts2{{x}_{f0}}=\frac{\dot{x}{{T}_{s}}}{2}xf0​=2x˙Ts​​,为了使机体加速,足端点通过身体姿态和身体姿态速率的误差的线性函数远离中性点:xfΔ=kϕ(ϕ−ϕd)+kϕ˙ϕ˙{{x}_{f\Delta }}={{k}_{\phi }}(\phi -{{\phi }_{d}})+{{k}_{{\dot{\phi }}}}\dot{\phi }xfΔ​=kϕ​(ϕ−ϕd​)+kϕ˙​​ϕ˙​,其中:kϕ,kϕ˙{{k}_{\phi }},{{k}_{{\dot{\phi }}}}kϕ​,kϕ˙​​是增益。在触地时,落脚点位置为:xf=xcg+xf0+xfΔ{{x}_{f}}={{x}_{cg}}+{{x}_{f0}}+{{x}_{f\Delta }}xf​=xcg​+xf0​+xfΔ​。

支撑相期间,足端以固定速度x˙d{{{\dot{x}}}_{d}}x˙d​相对于质心向后移动,此时足端相对于机体质心的水平轨迹为:xf(t)=xcg+xf0+xfΔ−x˙d(t−ttd){{x}_{f}}(t)={{x}_{cg}}+{{x}_{f0}}+{{x}_{f\Delta }}-{{{\dot{x}}}_{d}}(t-{{t}_{td}})xf​(t)=xcg​+xf0​+xfΔ​−x˙d​(t−ttd​),其中ttd{{t}_{td}}ttd​是触地时刻。为了在改变速度时限制最大加速度,在每步上限制所需的行进速率:∣x˙−x˙d∣<Δx˙max⁡\left| \dot{x}-{{{\dot{x}}}_{d}} \right|<\Delta {{{\dot{x}}}_{\max }}∣x˙−x˙d​∣<Δx˙max​。腿部的运动学方程:xf=−rsin⁡θ{{x}_{f}}=-r\sin \thetaxf​=−rsinθ,使得消除对腿角度的依赖:−rsin⁡θ=(l1−r)mℓsin⁡θ+l2msin⁡ϕmℓ+m+xf0+xfΔ−x˙d(t−ttd)-r\sin \theta =\frac{({{l}_{1}}-r){{m}_{\ell }}\sin \theta +{{l}_{2}}m\sin \phi }{{{m}_{\ell }}+m}+{{x}_{f0}}+{{x}_{f\Delta }}-{{{\dot{x}}}_{d}}(t-{{t}_{td}})−rsinθ=mℓ​+m(l1​−r)mℓ​sinθ+l2​msinϕ​+xf0​+xfΔ​−x˙d​(t−ttd​),且已知腿部、机体、髋部之间的角度关系为:γ=ϕ−θ\gamma =\phi -\thetaγ=ϕ−θ,可得:
${\gamma }{d}}=\phi +\arcsin (\frac{{{l}{2}}m\sin \phi +({{m}{\ell }}+m)({{x}{f0}}+{{x}{f\Delta }}-{{{\dot{x}}}{d}}(t-{{t}{td}}))}{{{l}{1}}{{m}_{\ell }}+rm})$

2.3 腿部摆动算法的仿真结果


使用腿部摆动算法以恒速运行。前进速度得到了很好的控制,每个周期只有很小的误差。

对期望运行速度变化的响应。虽然控制系统成功地保持了模型的平衡,但在启动和停止加速度(l=2.5,8)过程中,身体姿态的调节很差。改变跑步速度所需的加速度会干扰身体的姿态。

前行速度和身体姿态之间的相互作用很大,所以三部曲控制几乎失效——将xfΔ=kϕ(ϕ−ϕd)+kϕ˙ϕ˙{{x}_{f\Delta }}={{k}_{\phi }}(\phi -{{\phi }_{d}})+{{k}_{{\dot{\phi }}}}\dot{\phi }xfΔ​=kϕ​(ϕ−ϕd​)+kϕ˙​​ϕ˙​提供加速度调整项:xfΔ=kϕ(ϕ−ϕd)+kϕ˙ϕ˙+kx˙(x˙−x˙d){{x}_{f\Delta }}={{k}_{\phi }}(\phi -{{\phi }_{d}})+{{k}_{{\dot{\phi }}}}\dot{\phi }+{{k}_{{\dot{x}}}}(\dot{x}-{{{\dot{x}}}_{d}})xfΔ​=kϕ​(ϕ−ϕd​)+kϕ˙​​ϕ˙​+kx˙​(x˙−x˙d​)。

改进的摆动控制算法——模型开始原地跳跃,加速到1米/秒后加速到2米/秒,然后减速到停止。运行速度控制精度高,机体姿态控制精度大大提高——这以牺牲三部曲控制为代价来提高性能:选择落足点的位置不再仅仅基于控制一个变量(身体姿态)——使所有相关状态变量的落足点位置、髋力矩和腿部推力成为非线性函数。


最大速度受脚与地面之间的间隙限制

3. 四足运动的控制分类

3.1 机架坐标系与世界坐标系

房间(世界)坐标系的使用对于跳跃机器来说是自然的,因为它没有首选的方向,也因为我们没有控制它的朝向;
机架坐标系对于四足动物来说似乎很自然,因为它有一个首选的移动方向,前向和横向行为不对称,并且存在不可估计的偏航运动。

3.2 跳跃周期

运动周期中的事件应该如何控制控制动作之间的切换?

  1. 松散地耦合腿部之间的相互作用:可以把每条腿都当作机器上的唯一一条腿来对待。每条腿可以根据自己的跳跃周期的进度来推进,每条腿可以在飞行过程中根据自己对飞行开始的评估和对前进速度的估计来定位,每条腿可以在支撑相施加扭矩来纠正机体姿态。
  2. 将腿的活动紧密地耦合在一起:用于控制跳跃高度的腿部推力和用于控制身体姿态的臀力矩将与关节跳跃周期相协调。速度控制将取决于机器重心的估计速度。

在这两个极端之间有许多中间可能性——一组腿可以一起提供垂直推力,但可以单独控制身体姿态;在一组速度控制中,腿的运动可以根据腿的单独活动来计时,而它们移动到的位置可以由身体的总速度来决定。

3.3 协同推地机构

让四足机器人运动的关键是协调同时在地面上动作的腿所传递的推力,腿部的不同推力会加速身体的姿态,因为脚只能在地面上推,所以对如何控制差动推力也可能会有限制:

  1. 摆动相伺服腿的长度,以便同时运动的腿在地面以上的每只脚的间隙是相同的。两腿在同一水平面上,并同时着地。
  2. 伺服控制所有腿的长度,以使它们产生相同的轴向力。
  3. 伺服控制所有腿的长度,提供支撑,以保持机体水平。
    长度误差和空气弹簧压力的线性组合可能会是:rd,i=L−k(pi,pave){{r}_{d,i}}=L-k({{p}_{i}},{{p}_{ave}})rd,i​=L−k(pi​,pave​),其中:rd,i{{r}_{d,i}}rd,i​为第i条腿的期望长度,LLL是由跳跃算法确定的腿长设置值(它在支撑相可能会改变),pi{{p}_{i}}pi​是第i条腿中的空气弹簧压力,pave{{p}_{ave}}pave​是平均空气弹簧压力,kkk为增益
    如果用腿长来控制身体姿态,那么在计算腿长的设定值时,控制系统必须同时考虑跳跃控制和姿态控制。
  4. 根据每条腿的不同状态独立推进,不做任何明确的协调。

协调腿部推力,使其为身体提供姿态稳定,或使其不干扰身体姿态稳定,是控制四腿系统运动的核心问题。

3.4 速度控制

在控制机器的运行速度时,腿应该同时运行还是独立运行?假设控制系统可结合所有腿的支撑力和陀螺仪的信息来确定机器的前进速度,那么有两个主要的选择:

  1. 机器质心的速度可以确定足端落脚点;
  2. 每个髋部的速度可以确定每只脚放在哪里;(可能更好)

另一种完全不同的控制前行速度的机制是使支撑相的髋部扭矩成为前进速度误差的函数——身体姿态必须依赖于支撑相髋部扭矩以外的机制。在摆动相,腿部根据实际前行速度进行定位,而与期望的前行速度无关。在支撑相,髋部扭矩用于校正速度误差。身体姿态要么是被动控制的,要么是通过腿的不同推力来控制的。

3.5 姿态控制

有三种方法可以控制身体姿态:

  1. 臀部扭矩(Hip torque):支撑相髋部扭矩是身体俯仰和侧滚姿态误差的函数。这种方法依赖于髋部扭矩和腿部弹性之间的良好交互。
  2. 腿部推力(Leg thrust):调节腿部的不同推力,提供支撑以重新调整身体方向。
  3. 极限环(Limit-cycle):让机构在极限环中往复运动。这可能被认为是一种利用腿部推力来控制身体姿态的形式,在跳跃周期中,推力腿在不同时间动作,而不是在同一时间。极限环可以通过操纵腿部推力响应身体运动来完成,也可以被动地完成

身体的姿态必须控制在两个轴:俯仰轴(pitch)滚动轴(roll)。利用髋部扭矩和腿部推力的姿态控制方法被称为水平控制(leveling control),而极限环姿态控制被称为摇摆控制(rocking control)——在动物身上观察步态的推论:

  1. pronk步态:同步使用所有四条腿,在俯仰轴和滚动轴上都使用水平控制;
  2. trot步态:在俯仰和滚动两个轴上使用水平控制,也可以在两个轴上使用摆动姿态控制。第三种是围绕对角轴进行姿态控制;
  3. pace步态:使用围绕滚动轴的摇摆控制和围绕俯仰轴的水平控制。
  4. bound步态:滚动轴的水平控制和关于俯仰轴的摆动控制。
  5. galllop步态:关于俯仰的摇摆控制,但还不清楚是什么稳定了滚动轴。In a rotary gallop does an animal rock from side to side in addition to pitching? Does it wobble about the vertical axis?

关于为几个步态的每个轴提供姿态控制的机制的猜想:

步态 俯仰姿态 滚动姿态
pronk 水平控制(leveling) 水平控制
trot 水平控制 水平控制
pace 水平控制 摆动控制(rocking)
bound 摆动控制 水平控制
gallop 摆动控制 摆动控制?

提供支撑的腿的髋部扭转动作如何计算时长——有两种方案:

  1. 当一组腿都承受了足够的载荷时,该组中的所有腿都开始纠正身体姿态错误。这样当姿态控制力矩在足端产生切向力时,需要足够的载荷,腿才不会打滑。当改组中任何一条腿不再承受足够的负荷(紧耦合)时,所有腿都终止姿态控制。
  2. 当第i条腿第一次承受足够的负荷时,它就开始纠正身体姿态错误。当第i条腿不再承受足够的负荷(松散耦合)时,它会停止校正身体姿态错误。

姿态控制的另一种方式:既是紧密耦合的,也可以是松散耦合的,这与计算每个髋部扭矩的特定值有关。
足端与地面之间的摩擦力是用来限制纠正身体的姿态控制力矩的大小。

3.6 恢复(个人理解为摆动,前述章节按照摆动理解——周期运动)

  • 恢复(recovery)是抬起一条腿并在它没有提供支撑的情况下向前移动的过程。

在有多足系统中,当一些腿提供支撑时,有机会恢复一些腿(使一些腿发生摆动)。这有两个优点:

  1. 摆动相不一定要足够时间才能恢复一条腿。换句话说,腿部驱动器在摆动相不需要足够快来恢复腿部。这是一个带宽和速度问题。
  2. 因为恢复腿可以向前移动,而支撑腿可以向后移动,所以系统在跑步时不需要像单独的系统那样倾斜那么多。
  • 恢复运动的各个阶段之间必须协调:腿部缩短、腿部摆动、腿部延长、机体抛物运动和机体在地面的弹跳

提供协调性的一种方法是在恢复过程中伺服所有腿的长度,这样他们的脚离地面的距离有:Hmin⁡{{H}_{\min }}Hmin​。恢复动作分三个阶段进行:

  1. 一旦起飞,缩短腿部,直到脚离开地面至少Hmin⁡{{H}_{\min }}Hmin​的高度
  2. 一旦获得Hmin⁡{{H}_{\min }}Hmin​的离地高度,根据速度控制算法将腿移动到前向位置。继续调整伺服腿长度以保持离地间隙。
  3. 一旦获得前向位置,将腿延长到落地长度。

这种方法的局限性在于它依赖于zzz的估计,而z的估计依赖于z˙(tlo)\dot{z}({{t}_{lo}})z˙(tlo​)的准确估计。

另一种方法是将腿缩短到固定的恢复长度,在起飞后将腿向前移动一段固定的时间间隔,并在固定时间之后将腿再次延长一定的时间间隔。这是I型恢复(type I recovery)。这种方法可以稍作修改——让支撑腿的起飞事件触发恢复腿的延长,该变体被称为II型恢复(type II recovery),其优点在于提供了同步两组腿的方法——恢复腿与活动腿同步(the recovery legs are synchronized to the active legs)

恢复算法实际上有两个部分: 一部分指定何时缩短腿部、何时摆动腿部以及何时延长腿部;另一部分指定缩短、摆动和加长腿的幅度和轨迹。

  • 足端接触地面之前,它会使腿相对于身体向后加速——使足端速度与接触地面前的速度相匹配,因此腿不会因与地面的撞击而突然产生向后的加速度。这意味着足端的磨损更少,有更平滑的前向速度。这一恢复动作被称为预速度地面匹配(prestance ground speed matching),或者仅仅是地面匹配(ground matching,)——对于高速高效的移动非常重要——问题是:在接触之前,脚的后摆运动必须满足两个条件:当接触发生时,足端位于正确的位置;脚的后退速度与机体的前进速度相匹配——要求机体的垂直运动、机体的前向运动和腿部的后向摆动之间要有很好的协调。

恢复算法的设计涉及两种规范: 腿部动作时序+动作本身的方法。

3.7 腿部协调

一种方法是什么都不做,让系统自己去做,系统可能会自己找到某种稳定的腿部阶段。有三种步态,每种步态都需要不同类型的腿部同步:

  1. Pronk:所有的腿都一起行动。
  2. Pair gaits。两条腿形成两对。在每一对中,腿是同步运动的,而在两对之间,腿是反相运动的。trot、pace和bound采用了这种成对的操作。需要两个同步:
  • 每条腿应该与另一条腿几乎同步工作。四条腿组成两对。
  • 这两对腿是异相运动的。
  1. Gallops:一条腿一次着地,一条腿一次离地,一只、两只或三只脚在站立时提供支撑。

两相步态的同步的方法——一对腿中同相运动的两条腿称为(配对)mates。异相运动的两条腿称为(异对)opposites

  1. 对于每条腿,每个步态都有一个配对,
  2. 为每条腿都,每个步态都有一个异对。为了迫使Pronk步态符合分类,定义了一个虚幻的第五腿,用*表示。对于第五条腿,触地、底端和起飞总为真(For the fifth leg, touchdown, bottom, and lift-off are always true.)
  3. 在恢复过程中,一条腿在另一条腿起飞后会延长(a leg lengthens after its opposite has lifted off)after很难定义——当机体还在向上移动时,加长的腿不会撞到地面,而且在机体准备着陆时,它应该完全加长。
  4. 在支撑相,一条腿与配对同步推地。

4. 总结

考虑在指定了控制算法的一般形式后——四足动物做出的一些实现决策,这些决策中的许多都是基于直觉做出的,或者纯粹是武断的。需要典型的实验方法——好的实验有助于做出更好的设计决策。

5. 四足控制决策综述

  • 使用机架坐标。
  • 紧密耦合所有腿的活动顺序。
  • 每条腿的推力与力均衡伺服紧密耦合。
  • 根据机体质心的速度,独立定位足端落脚点以进行速度控制。
  • 使用了一种速度控制算法,只在摆动相中定位落足点——没有使用摆动控制。
  • 使用用于调平姿态控制的髋部扭矩:1. 当所有腿一起工作时,允许一条腿产生髋部扭矩,用于水平姿态控制,以承受足够的载荷。2. 让水平姿态控制提供的髋部扭矩的腿独立于其用于支撑的腿。
  • 使用II型恢复。

6. 附录:平面单腿模型的运动方程

根据达朗贝尔原理(d'Alembert's principle)推导(free body diagrams of the leg and body)
{z¨1=z¨0−l1(θ¨sin⁡θ+θ˙2cos⁡θ)x¨1=x¨0+l1(θ¨cos⁡θ−θ˙2sin⁡θ)z¨2=z¨0+r¨cos⁡θ−r(θ¨sin⁡θ+θ˙2cos⁡θ)−l2(ϕ¨sin⁡ϕ+ϕ˙2cos⁡ϕ)−2r˙θ˙sin⁡θx¨2=x¨0++r¨cos⁡θ+r(θ¨sin⁡θ−θ˙2cos⁡θ)+l2(ϕ¨sin⁡ϕ−ϕ˙2cos⁡ϕ)+2r˙θ˙sin⁡θ\left\{ \begin{matrix} {{{\ddot{z}}}_{1}}={{{\ddot{z}}}_{0}}-{{l}_{1}}(\ddot{\theta }\sin \theta +{{{\dot{\theta }}}^{2}}\cos \theta ) \\ {{{\ddot{x}}}_{1}}={{{\ddot{x}}}_{0}}+{{l}_{1}}(\ddot{\theta }\cos \theta -{{{\dot{\theta }}}^{2}}\sin \theta ) \\ {{{\ddot{z}}}_{2}}={{{\ddot{z}}}_{0}}+\ddot{r}\cos \theta -r(\ddot{\theta }\sin \theta +{{{\dot{\theta }}}^{2}}\cos \theta )-{{l}_{2}}(\ddot{\phi }\sin \phi +{{{\dot{\phi }}}^{2}}\cos \phi )-2\dot{r}\dot{\theta }\sin \theta \\ {{{\ddot{x}}}_{2}}={{{\ddot{x}}}_{0}}++\ddot{r}\cos \theta +r(\ddot{\theta }\sin \theta -{{{\dot{\theta }}}^{2}}\cos \theta )+{{l}_{2}}(\ddot{\phi }\sin \phi -{{{\dot{\phi }}}^{2}}\cos \phi )+2\dot{r}\dot{\theta }\sin \theta \\ \end{matrix} \right.⎩⎨⎧​z¨1​=z¨0​−l1​(θ¨sinθ+θ˙2cosθ)x¨1​=x¨0​+l1​(θ¨cosθ−θ˙2sinθ)z¨2​=z¨0​+r¨cosθ−r(θ¨sinθ+θ˙2cosθ)−l2​(ϕ¨​sinϕ+ϕ˙​2cosϕ)−2r˙θ˙sinθx¨2​=x¨0​++r¨cosθ+r(θ¨sinθ−θ˙2cosθ)+l2​(ϕ¨​sinϕ−ϕ˙​2cosϕ)+2r˙θ˙sinθ​

{mℓz¨1=Fz−Ftcos⁡θ+Fnsin⁡θ−mℓgmℓx¨1=Fx−Ftsin⁡θ−Fncos⁡θJℓθ¨=−Fxl1cos⁡θ+Fzl1sin⁡θ−Fn(r−l1)−τmz¨2=Ftcos⁡θ−Fnsin⁡θ−mgmx¨2=Ftsin⁡θ+Fncos⁡θJϕ¨=Ftl2sin⁡(ϕ−θ)−Fnl2cos⁡(ϕ−θ)+τ\left\{ \begin{matrix} {{m}_{\ell }}{{{\ddot{z}}}_{1}}={{F}_{z}}-{{F}_{t}}\cos \theta +{{F}_{n}}\sin \theta -{{m}_{\ell }}g \\ {{m}_{\ell }}{{{\ddot{x}}}_{1}}={{F}_{x}}-{{F}_{t}}\sin \theta -{{F}_{n}}\cos \theta \\ {{J}_{\ell }}\ddot{\theta }=-{{F}_{x}}{{l}_{1}}\cos \theta +{{F}_{z}}{{l}_{1}}\sin \theta -{{F}_{n}}(r-{{l}_{1}})-\tau \\ m{{{\ddot{z}}}_{2}}={{F}_{t}}\cos \theta -{{F}_{n}}\sin \theta -mg \\ m{{{\ddot{x}}}_{2}}={{F}_{t}}\sin \theta +{{F}_{n}}\cos \theta \\ J\ddot{\phi }={{F}_{t}}{{l}_{2}}\sin (\phi -\theta )-{{F}_{n}}{{l}_{2}}\cos (\phi -\theta )+\tau \\ \end{matrix} \right.⎩⎨⎧​mℓ​z¨1​=Fz​−Ft​cosθ+Fn​sinθ−mℓ​gmℓ​x¨1​=Fx​−Ft​sinθ−Fn​cosθJℓ​θ¨=−Fx​l1​cosθ+Fz​l1​sinθ−Fn​(r−l1​)−τmz¨2​=Ft​cosθ−Fn​sinθ−mgmx¨2​=Ft​sinθ+Fn​cosθJϕ¨​=Ft​l2​sin(ϕ−θ)−Fn​l2​cos(ϕ−θ)+τ​

其中:
(x0,z0)({{x}_{0}},{{z}_{0}})(x0​,z0​):落脚点坐标
(x1,z1)({{x}_{1}},{{z}_{1}})(x1​,z1​):腿的质心坐标
(x2,z2)({{x}_{2}},{{z}_{2}})(x2​,z2​):机体质心的坐标
(Fx,Fz)({{F}_{x}},{{F}_{z}})(Fx​,Fz​):足端水平和垂直方向上的力
(Ft,Fn)({{F}_{t}},{{F}_{n}})(Ft​,Fn​):作用在腿部和身体之间的髋部的力,FtF_tFt​与腿部相切,而FnF_nFn​与腿部垂直

消去x1,z1,x2,z2,Ft,Fn{{x}_{1}},{{z}_{1}},{{x}_{2}},{{z}_{2}},{{F}_{t}},{{F}_{n}}x1​,z1​,x2​,z2​,Ft​,Fn​,用状态变量:θ,ϕ,x0,z0,τ\theta ,\phi ,{{x}_{0}},{{z}_{0}},\tauθ,ϕ,x0​,z0​,τ来表示上述方程,并结合R=r−l1R=r-{{l}_{1}}R=r−l1​,可得(原文中有所笔误,根据个人理解纠正):
{(mRr+Jℓ)mθ¨cos⁡θ+ml2Rϕ¨cos⁡ϕ+mRx¨0+mRr¨sin⁡θ=Rm(θ˙2Rsin⁡θ−2θ˙r˙cos⁡θ+l2ϕ˙2sin⁡ϕ+l1θ˙2sin⁡θ)−l1Fxcos⁡θ2+(l1Fzsin⁡θ−τ)cos⁡θ+FkRsin⁡θ(mRr+Jℓ)mθ¨sin⁡θ+ml2Rϕ¨sin⁡ϕ−mRz¨0+mRr¨sin⁡θ=−Rm(θ˙2Rcos⁡θ+2θ˙r˙sin⁡θ+l2ϕ˙2cos⁡ϕ+l1θ˙2cos⁡θ−g)−l1Fxcos⁡θsin⁡θ−(l1Fzsin⁡θ−τ)sin⁡θ+FkRcos⁡θ(mℓl1R−Jℓ)θ¨cos⁡θ+mℓRx¨0=R(mℓl1θ˙2sin⁡θ−Fksin⁡θ+Fx)−(Fzl1sin⁡θ−Fxl1cos⁡θ−τ)cos⁡θ−(mℓl1R−Jℓ)θ¨sin⁡θ+mℓRz¨0=R(mℓl1θ˙2cos⁡θ−Fkcos⁡θ+Fz−mℓg)−(Fzl1sin⁡θ−Fxl1cos⁡θ−τ)sin⁡θJℓl2θ¨cos⁡(ϕ−θ)−Jrϕ¨=−R(Fkl2sin⁡(ϕ−θ)+τ)l2cos⁡(ϕ−θ)(Fzl1sin⁡θ−Fxl1cos⁡θ−τ)\left\{ \begin{matrix} (mRr+{{J}_{\ell }})m\ddot{\theta }\cos \theta +m{{l}_{2}}R\ddot{\phi }\cos \phi +mR{{{\ddot{x}}}_{0}}+mR\ddot{r}\sin \theta =\begin{matrix} Rm({{{\dot{\theta }}}^{2}}R\sin \theta -2\dot{\theta }\dot{r}\cos \theta +{{l}_{2}}{{{\dot{\phi }}}^{2}}\sin \phi +{{l}_{1}}{{{\dot{\theta }}}^{2}}\sin \theta ) \\ -{{l}_{1}}{{F}_{x}}\cos {{\theta }^{2}}+({{l}_{1}}{{F}_{z}}\sin \theta -\tau )\cos \theta +{{F}_{k}}R\sin \theta \\ \end{matrix} \\ (mRr+{{J}_{\ell }})m\ddot{\theta }\sin \theta +m{{l}_{2}}R\ddot{\phi }\sin \phi -mR{{{\ddot{z}}}_{0}}+mR\ddot{r}\sin \theta =\begin{matrix} -Rm({{{\dot{\theta }}}^{2}}R\cos \theta +2\dot{\theta }\dot{r}\sin \theta +{{l}_{2}}{{{\dot{\phi }}}^{2}}\cos \phi +{{l}_{1}}{{{\dot{\theta }}}^{2}}\cos \theta -g) \\ -{{l}_{1}}{{F}_{x}}\cos \theta \sin \theta -({{l}_{1}}{{F}_{z}}\sin \theta -\tau )\sin \theta +{{F}_{k}}R\cos \theta \\ \end{matrix} \\ ({{m}_{\ell }}{{l}_{1}}R-{{J}_{\ell }})\ddot{\theta }\cos \theta +{{m}_{\ell }}R{{{\ddot{x}}}_{0}}=\begin{matrix} R({{m}_{\ell }}{{l}_{1}}{{{\dot{\theta }}}^{2}}\sin \theta -{{F}_{k}}\sin \theta +{{F}_{x}}) \\ -({{F}_{z}}{{l}_{1}}\sin \theta -{{F}_{x}}{{l}_{1}}\cos \theta -\tau )\cos \theta \\ \end{matrix} \\ -({{m}_{\ell }}{{l}_{1}}R-{{J}_{\ell }})\ddot{\theta }\sin \theta +{{m}_{\ell }}R{{{\ddot{z}}}_{0}}=\begin{matrix} R({{m}_{\ell }}{{l}_{1}}{{{\dot{\theta }}}^{2}}\cos \theta -{{F}_{k}}\cos \theta +{{F}_{z}}-{{m}_{\ell }}g) \\ -({{F}_{z}}{{l}_{1}}\sin \theta -{{F}_{x}}{{l}_{1}}\cos \theta -\tau )\sin \theta \\ \end{matrix} \\ {{J}_{\ell }}{{l}_{2}}\ddot{\theta }\cos (\phi -\theta )-Jr\ddot{\phi }=\begin{matrix} -R({{F}_{k}}{{l}_{2}}\sin (\phi -\theta )+\tau ) \\ {{l}_{2}}co\operatorname{s}(\phi -\theta )({{F}_{z}}{{l}_{1}}\sin \theta -{{F}_{x}}{{l}_{1}}\cos \theta -\tau ) \\ \end{matrix} \\ \end{matrix} \right.⎩⎨⎧​(mRr+Jℓ​)mθ¨cosθ+ml2​Rϕ¨​cosϕ+mRx¨0​+mRr¨sinθ=Rm(θ˙2Rsinθ−2θ˙r˙cosθ+l2​ϕ˙​2sinϕ+l1​θ˙2sinθ)−l1​Fx​cosθ2+(l1​Fz​sinθ−τ)cosθ+Fk​Rsinθ​(mRr+Jℓ​)mθ¨sinθ+ml2​Rϕ¨​sinϕ−mRz¨0​+mRr¨sinθ=−Rm(θ˙2Rcosθ+2θ˙r˙sinθ+l2​ϕ˙​2cosϕ+l1​θ˙2cosθ−g)−l1​Fx​cosθsinθ−(l1​Fz​sinθ−τ)sinθ+Fk​Rcosθ​(mℓ​l1​R−Jℓ​)θ¨cosθ+mℓ​Rx¨0​=R(mℓ​l1​θ˙2sinθ−Fk​sinθ+Fx​)−(Fz​l1​sinθ−Fx​l1​cosθ−τ)cosθ​−(mℓ​l1​R−Jℓ​)θ¨sinθ+mℓ​Rz¨0​=R(mℓ​l1​θ˙2cosθ−Fk​cosθ+Fz​−mℓ​g)−(Fz​l1​sinθ−Fx​l1​cosθ−τ)sinθ​Jℓ​l2​θ¨cos(ϕ−θ)−Jrϕ¨​=−R(Fk​l2​sin(ϕ−θ)+τ)l2​cos(ϕ−θ)(Fz​l1​sinθ−Fx​l1​cosθ−τ)​​

其中:
Fk={kℓrsΔrsΔ>0kstoprsΔ−bstopr˙otherwise{{F}_{k}}=\left\{ \begin{matrix} {{k}_{\ell }}{{r}_{s\Delta }} & {{r}_{s\Delta }}>0 \\ {{k}_{stop}}{{r}_{s\Delta }}-{{b}_{stop}}\dot{r} & otherwise \\ \end{matrix} \right.Fk​={kℓ​rsΔ​kstop​rsΔ​−bstop​r˙​rsΔ​>0otherwise​
Fx={kg(x0−xtd)−bgx˙0z0<00otherwise{{F}_{x}}=\left\{ \begin{matrix} {{k}_{g}}({{x}_{0}}-{{x}_{td}})-{{b}_{g}}{{{\dot{x}}}_{0}} & {{z}_{0}}<0 \\ 0 & otherwise \\ \end{matrix} \right.Fx​={kg​(x0​−xtd​)−bg​x˙0​0​z0​<0otherwise​
Fz={kgz0−bgz˙0z0<00otherwise{{F}_{z}}=\left\{ \begin{matrix} {{k}_{g}}{{z}_{0}}-{{b}_{g}}{{{\dot{z}}}_{0}} & {{z}_{0}}<0 \\ 0 & otherwise \\ \end{matrix} \right.Fz​={kg​z0​−bg​z˙0​0​z0​<0otherwise​

[足式机器人]Part1 运动控制的替代方法Ch06——【Legged Robots that Balance 读书笔记】相关推荐

  1. [足式机器人]Part1 运动对称性Ch05——【Legged Robots that Balance 读书笔记】

    本文仅供学习使用 本文结合个人理解体会作者的思路,也从个人科研角度出发,部分翻译参考由:QQ群(2群legged robot that balance)提供,感谢他们为本文英文版翻译所做的贡献(但有些 ...

  2. [足式机器人]Part1 序言+简介Ch01——【Legged Robots that Balance 读书笔记】

    本文仅供学习使用 本文结合个人理解体会作者的思路,也从个人科研角度出发,部分翻译参考由:QQ群(2群legged robot that balance)提供,感谢他们为本文英文版翻译所做的贡献(但有些 ...

  3. [足式机器人]Part1 关于动物和运动体的研究Ch08——【Legged Robots that Balance 读书笔记】

    本文仅供学习使用 本文结合个人理解体会作者的思路,也从个人科研角度出发,部分翻译参考由:QQ群(2群legged robot that balance)提供,感谢他们为本文英文版翻译所做的贡献(但有些 ...

  4. [足式机器人]Part1 三维空间中的跳行Ch03——【Legged Robots that Balance 读书笔记】

    本文仅供学习使用 本文结合个人理解体会作者的思路,也从个人科研角度出发,部分翻译参考由:QQ群(2群legged robot that balance)提供,感谢他们为本文英文版翻译所做的贡献(但有些 ...

  5. [足式机器人]Part1 双足和四足的运动Ch04——【Legged Robots that Balance 读书笔记】

    本文仅供学习使用 本文结合个人理解体会作者的思路,也从个人科研角度出发,部分翻译参考由:QQ群(2群legged robot that balance)提供,感谢他们为本文英文版翻译所做的贡献(但有些 ...

  6. 干货丨浅谈足式机器人的运动控制

    " 本期技术干货,我们邀请到了小米机器人实验室工程师--游洋威,来和大家从经典的三分控制法.零力矩点控制到目前主流的模型预观控制等方面,介绍足式机器人的运动控制. " 一.前言 不 ...

  7. 干货 | 足式机器人运动控制发展方向——轨迹优化

    " 运动控制技术的进步使得足式机器人的运动能力更强,而近来轨迹优化作为主流学术研究方向,能够为足式机器人运动控制的发展提供可能的指引.本期技术干货,我们邀请到了小米工程师徐喆,向我们介绍足式 ...

  8. 一些关于国内腿足式机器人公司研究所的信息分享

    8月PhD假期, 我利用将近3周的时间跑了北京.常州.深圳.广州和杭州,参观拜访了如下腿足式机器人企业&研究所: 北京钢铁侠(ARTROBOT) 北京灵铱机器人事业部 北京航天五院502所 浙 ...

  9. 【机械臂轨迹规划】足式机器人足端摆线轨迹曲线

    系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录 前言 一.摆线函数原理 二.摆线函数缺点 总结 参考资料 前言 本文先对摆 ...

最新文章

  1. Scrapy框架的使用之Scrapy对接Selenium
  2. 左神算法:反转单向和双向链表(Java版)
  3. 总算解决了路由器上iptables的nat问题
  4. C++Primer学习之一引用和指针
  5. 礼品盒子插画素材丨节日设计加上它之后价值翻倍!
  6. 【Python】简单实现显示图片的高斯和中值滤波效果
  7. C# 编程指南-事件
  8. 贝叶斯学派与频率学派有何不同?
  9. java POI导出excel性能优化
  10. 企业建行手机银行怎么对公转账限额
  11. 一级域名注册如何申请?需要注意哪些事项?
  12. 如何为豆瓣FM写一个chrome的歌词插件
  13. arcgis api for JavaScript学习-Scalebar(比例尺)
  14. Egress-Assess-出口数据安全功能测试
  15. sspanel php,sspanelv3魔改版邮件设置指南及常用配置
  16. 傅里叶分析的方方面面:复正弦、负频率
  17. SuperMap 地图裁剪
  18. 多模块,Maven无法下载依赖,仓库查看有这个版本但是无法下载,点reload也没用
  19. cocos2d-x 菜鸟学习笔记一(跨平台编译)
  20. linux hexo使用教程,Linux下使用Hexo搭建github博客(示例代码)

热门文章

  1. 主流各云平台主机性能对比
  2. Delphi与Word之间的融合技术
  3. android 虚拟按键源码流程分析
  4. html游戏技术文档编写,HTML5编写的小游戏
  5. 公有云平台专题《中移云平台,NB-IoT模组对接中移OneNET平台》
  6. Android Studio Logcat 截断问题(cocos2d-x 篇)
  7. 简单使用Search()函数
  8. MOS管做二极管使用
  9. Windows命令行下对文件做MD5校验
  10. note GAN model