精华内容
下载资源
问答
  • 本文以液压双足机器人步态规划及柔顺控制为目标,进行以下研究。   介绍平面液压双足机器人的机械结构和驱动系统,分析双足机器人的运动特点;建立双足机器人单腿的正运动学和逆运动学模型,并根据双腿的...
  • 为了获得良好的双足机器人步行模式,提出了以步行过程中机器人的稳定性、移动性和能耗为目标的步态规划多目标优化方法.该方法基于倒立摆模型产生基本步态,并使用罚函数法和改进的强度Pareto进化算法(SPEA2)在可行域中...
  • LIP模型的动态方程本质上存在着不稳定因子,参见凌波洞主:仿人双足机器人步态规划-线性倒立摆(LIP)及其内在不稳定性​zhuanlan.zhihu.com建议不了解的同学一定要先看上面的文章!对其加以一定的初值约束,可保证...

    LIP模型的动态方程本质上存在着不稳定因子,参见

    凌波洞主:仿人双足机器人步态规划-线性倒立摆(LIP)及其内在不稳定性zhuanlan.zhihu.com
    6cf90aceadfcbecc946a47f226e4a3a6.png

    建议不了解的同学一定要先看上面的文章!

    对其加以一定的初值约束,可保证不稳定因子有界,从而保证LIP的稳定性。

    LIP模型为:

    他可以分解为两个子系统:

    其中,

    不稳定。

    为控制量,构建状态方程。

    我们的控制间隔定义为

    同一时间间隔内的ZMP位置将表示为:

    预测时域

    ,从当前时间
    计算至

    定义

    时间内,需要保证的约束条件有两种。 第一个与ZMP位置有关,ZMP位置必须始终在由足迹序列和相关时间定义的支撑多边形内。 第二个是稳定性约束,它需要保证由我们的MPC方案生成的CoM轨迹是稳定的, 该约束必须在预测范围的开始即在当前采样时刻
    处得到满足。
    • ZMP constraint:

    取自脚步序列。

    即:

    定义

    其中:

    则约束可以写为:

    • Stability constraint:

    根据不稳定子系统方程

    时,可保证不稳定子系统有界,所以该式可作为约束条件。

    经过较为复杂的变量代换,最终得到QP方程,有兴趣的同学直接看后面附的参考资料。

    参考资料:

    Scianca, N., Cognetti, M., De Simone, D., Lanari, L., & Oriolo, G. (2016). Intrinsically stable MPC for humanoid gait generation. IEEE-RAS International Conference on Humanoid Robots, 601–606.

    https://doi.org/10.1109/HUMANOIDS.2016.7803336doi.org
    展开全文
  • 针对用非线性预测控制(NMPC)实时步态规划得到的拟人步行双足机器人步态轨迹,分析了模型失配和地面环境变化条件下稳态多步步行的鲁棒周期稳定性问题。通过反馈线性化,将高维混杂系统的周期稳定性问题转化为降维非可控...
  • 在约束平面内分析ZMP与COG的运动关系,将ZMP和COG分别定为快变因子和慢变因子,提出了移动可伸缩三维倒立摆模型的双足机器人步态控制策略;最后通过Matlab/ADAMS进行了步态控制仿真研究。仿真结果表明双足机器人可以...
  • 针对双足机器人面临的复杂环境下动态行走的适应性难题,提出了一种基于学习人类控制策略的双足机器人步态控制方法。利用三维线性倒立摆模型构造双足行走系统的状态方程,建立学习人类控制策略的参数化模型,设计了...
  • 一篇EI上发表的关于 机器人步态规划的文章
  • 两点式双足步行机器人步态规划方法及其实验研究,马冬,罗翔,本文首先针对两点式双足步行机器人样机建立运动学模型;其次,提出约束条件,求取机器人一个步行周期中始末与COP切换瞬间步行姿态
  • 双足机器人平衡控制及步态规划研究;双足机器人平衡控制及步态规划研究
  • 针对目前仿人机器人动态步行在样机上实现较少的情况,将多项式插值方法运用于机器人踝关节轨迹规划,结合已知髋关节运动轨迹,利用几何约束的方法求取膝关节运动轨迹,得到完整步态周期内各关节运动规律,最终实现...
  • 介绍了机器人的设计原则及方法,不仅介绍了机器人外形结构,还包括了步态控制方法步行类别的介绍,为步态规划、控制方法的研究提供了平台。 2.将机器人的实际机构简化为十二连杆模型,再将其简化五连杆模型,研究和...
  • 首先在中间障碍层进行机器人轨迹规划, 再根据机器人各种步态的不同损耗构建代价函数, 把规划好的轨迹放到最底层进行规划修改, 最终得到双足机器人规划路径上代价最小的一系列连续的动作, 通过计算机仿真实验验证了...
  • 为了增强机器人的行走效率,使机器人的步态更自然,且具有良好适应复杂路况的特点,设计了一款双足机器人研究平台,并建立双足机器人行走机构的运动学模型,同时对机器人的前向运动进行了步态规划,从而提高了机器人运动...
  • 目前的步态优化算法仅仅实现了对单一目标的优化,把双足机器人步态优化看做是多目标优化问题,构建了衡量稳定性、能量消耗、步行速度三个目标评价函数。考虑到直接对多个目标加权求和的方法不能很好地处理多目标问题...
  • 想学习机器人的可以看一下,还是比较有用的,哈哈,传上来造福一下大家
  • 针对传统的双足机器人在摆动相机械能起伏较大,其能耗远高于人类的步行模式的问题,提出了一种基于虚拟支点倒立摆被动特性的双足机器人步态规划方法,在保证摆动阶段机械能近似守恒的前提下,同时保证压力中心点能够从...
  • 双足机器人简单步态生成

    千次阅读 2017-03-14 22:15:00
    机器人行走最简单的方法是先得到一组步态曲线,即腿部每个关节随时间运动的角度值。可以在ADAMS或3D Max、Blender等软件中建立好机构/骨骼模型,设计出脚踝和髋关节的运动曲线,然后进行逆运动学解算,测量每个...

       让机器人行走最简单的方法是先得到一组步态曲线,即腿部每个关节随时间运动的角度值。可以在ADAMS或3D Max、Blender等软件中建立好机构/骨骼模型,设计出脚踝和髋关节的运动曲线,然后进行逆运动学解算,测量每个关节在运动过程中的转角,最后将得到的曲线导出。拿到曲线数据后我们就可以用单片机读取,然后发送给机器人的舵机去执行运行。这种方法的缺点是机器人只能按照固定的步态行走,不够灵活,比如抬脚高度、步长等参数都是定死的,如果需要修改还得再使用别的软件导出新的步态数据。

      最简单的腿部结构如下图所示,在髋关节、膝关节和踝关节各有一个转动自由度,可以通过三角形余弦定理求得机构的运动学逆解。这种机器人只能在矢状面上直线前进,不能转弯。对行走过程进行一定的简化和假设:

    1. 髋关节始终保持恒定的高度(实际上会有微小的波动)

    2. 机器人脚面始终平行于地面

      为了确定每个关节的角度,需要设计行走过程中踝关节点的运动轨迹。这里采用简单的正弦曲线作为其轨迹(也可以采用样条曲线、Bézier 曲线等),正弦曲线的幅值对应抬脚最大高度。

     

      在Python中实现导入双腿模型文件,生成指定的步态数据后让其循环运动,就可以模拟机器人行走。代码如下(很糙...只是实现了基本功能,细节还有待完善)

    #!/usr/bin/env python
    import vtk
    import math
    from vtk.util.colors import *
    import numpy as np
    import time
    
    
    actor  = list()   # the list of links
    filenames = ["link-1.stl","link-2.stl","link-3.stl","link-4.stl","link-5.stl","link-6.stl"]
    renWin = vtk.vtkRenderWindow()
    
    joint1 = vtk.vtkAssembly()
    joint2 = vtk.vtkAssembly()
    joint3 = vtk.vtkAssembly()
    joint4 = vtk.vtkAssembly()
    joint5 = vtk.vtkAssembly()
    joint6 = vtk.vtkAssembly()
    
    ThighLength = 100.0
    ShankLength = 100.0
    HipHeight = 180.0
    FootLift = 10
    StrideLength = 60
    Subdivision = 20
    
    leg_joint = np.zeros(3, dtype=np.float)
    patterns = np.zeros((2*Subdivision ,6), dtype=np.float)
    _p = 0
    
    txt = vtk.vtkTextActor()
    distance = 0.0
    
    
    def Rad2Deg(rad):
        return  rad * 180.0 / math.pi
    
    
    def FootHeight(x): 
        return (HipHeight - FootLift * math.cos(abs(x * math.pi / StrideLength)))
    
    
    def LegIK(x, y):
        global leg_joint
        dist = math.sqrt(x**2 + y**2)
        leg_joint[0] = math.acos(dist / (2 * ShankLength)) + math.atan2(x, y)
        leg_joint[1] = math.pi - math.acos((ThighLength**2 + ShankLength**2 - dist**2) / (2 * ThighLength* ShankLength))
        leg_joint[2] = leg_joint[1] - leg_joint[0]
    
    
    def GenerateGait():
        global leg_joint
        global patterns
    
        # Move left leg forward.  
        for i in range(Subdivision):
            x = (i - Subdivision/2) * (StrideLength / Subdivision)
            y = FootHeight(x)        
            LegIK(x, y)            
            patterns[i, :3] = Rad2Deg(leg_joint)
    
        # Move left leg backward.  
        for i in range(Subdivision):
            x = (Subdivision/2 - i) * (StrideLength / Subdivision)
            y = HipHeight
            LegIK(x, y)                
            patterns[i+Subdivision, :3] = Rad2Deg(leg_joint)  
    
        # Build right leg from phase shift clone of left. 
        for i in range(2*Subdivision):
            patterns[i, 3:] = -patterns[(i + Subdivision) % (2*Subdivision), :3]
    
    
     
    # Customize vtkInteractorStyleTrackballCamera 
    class MyInteractor(vtk.vtkInteractorStyleTrackballCamera):
        def __init__(self,parent=None):
            self.AddObserver("CharEvent",self.OnCharEvent)
            self.AddObserver("KeyPressEvent",self.OnKeyPressEvent)
    
        def OnCharEvent(self,obj,event):
            pass
        
        def OnKeyPressEvent(self,obj,event):
            global _p
            global distance
            
            # Get the compound key strokes for the event
            key = self.GetInteractor().GetKeySym()
            
            GenerateGait()
    
            if(key == "Return"):
                # start animation
                joint1.SetPosition(0, 0, HipHeight-ThighLength-ShankLength)
                joint4.SetPosition(0, 0, HipHeight-ThighLength-ShankLength)
                
                if (_p == 2*Subdivision):
                    _p = 0
         
                joint1.SetOrientation(0, -patterns[_p][0], 0)
                joint2.SetOrientation(0, patterns[_p][1], 0)
                joint3.SetOrientation(0, -patterns[_p][2], 0)
    
                joint4.SetOrientation(0, patterns[_p][3], 0)
                joint5.SetOrientation(0, -patterns[_p][4], 0)
                joint6.SetOrientation(0, patterns[_p][5], 0)
    
                _p = _p + 1
    
                distance = distance + StrideLength/(2 * Subdivision * 1000.0)
                txt.SetInput("Distance: " + str(distance) + "m")
                
                renWin.Render()
                    
            return
        
    
    
    def CreateCoordinates():
        # create coordinate axes in the render window
        axes = vtk.vtkAxesActor() 
        axes.SetTotalLength(40, 40, 40)  # Set the total length of the axes in 3 dimensions 
    
        # Set the type of the shaft to a cylinder:0, line:1, or user defined geometry. 
        axes.SetShaftType(0) 
    
        transform = vtk.vtkTransform() 
        transform.Translate(0.0, 0.0, 200.0)
        axes.SetUserTransform(transform)
    
        axes.SetCylinderRadius(0.02) 
        axes.GetXAxisCaptionActor2D().SetWidth(0.03) 
        axes.GetYAxisCaptionActor2D().SetWidth(0.03) 
        axes.GetZAxisCaptionActor2D().SetWidth(0.03) 
        return axes
    
    
    def CreateGround():
        # create plane source
        plane = vtk.vtkPlaneSource()
        plane.SetXResolution(20)
        plane.SetYResolution(20)
        plane.SetCenter(0,0,0)
        plane.SetNormal(0,0,1)
    
        # mapper
        mapper = vtk.vtkPolyDataMapper()
        mapper.SetInputConnection(plane.GetOutputPort())
    
        # actor
        actor = vtk.vtkActor()
        actor.SetMapper(mapper)
        actor.GetProperty().SetRepresentationToWireframe()
        actor.GetProperty().SetColor(light_grey)
    
        transform = vtk.vtkTransform()
        transform.Scale(400,400,1)
        actor.SetUserTransform(transform)
    
        return actor
        
    
    def LoadSTL(filename):
        reader = vtk.vtkSTLReader()
        reader.SetFileName(filename)
        mapper = vtk.vtkPolyDataMapper() # maps polygonal data to graphics primitives
        mapper.SetInputConnection(reader.GetOutputPort())
        actor = vtk.vtkLODActor() 
        actor.SetMapper(mapper)
        return actor   # represents an entity in a rendered scene
    
                
    def CreateScene():
        # Create a rendering window and renderer
        ren = vtk.vtkRenderer()
        renWin.AddRenderer(ren)
         
        # Create a renderwindowinteractor
        iren = vtk.vtkRenderWindowInteractor()
        iren.SetRenderWindow(renWin)
        style = MyInteractor()
        style.SetDefaultRenderer(ren)
        iren.SetInteractorStyle(style)
        
        for id, file in enumerate(filenames):
            actor.append(LoadSTL(file))
            r = vtk.vtkMath.Random(.4, 1.0)
            g = vtk.vtkMath.Random(.4, 1.0)
            b = vtk.vtkMath.Random(.4, 1.0)
            actor[id].GetProperty().SetDiffuseColor(r, g, b)
            actor[id].GetProperty().SetDiffuse(.8)
            actor[id].GetProperty().SetSpecular(.5)
            actor[id].GetProperty().SetSpecularColor(1.0,1.0,1.0)
            actor[id].GetProperty().SetSpecularPower(30.0)
    
        joint1.AddPart(actor[0])
        joint1.AddPart(joint2)
        joint2.AddPart(actor[1])
        joint2.AddPart(joint3)
        joint3.AddPart(actor[2])
    
        joint4.AddPart(actor[3])
        joint4.AddPart(joint5)
        joint5.AddPart(actor[4])
        joint5.AddPart(joint6)
        joint6.AddPart(actor[5])
        
        joint1.SetOrigin(0, 0, 200)
        joint4.SetOrigin(0, 0, 200)
        joint2.SetOrigin(0, 0, 100)
        joint5.SetOrigin(0, 0, 100)
    
        ren.AddActor(joint1)
        ren.AddActor(joint4)
    
        # Add coordinates
        axes = CreateCoordinates()
        ren.AddActor(axes)
    
        # Add ground
        ground = CreateGround()
        ren.AddActor(ground)
    
        # create a text actor
        txt.SetInput("Distance: 0m")
        txtprop=txt.GetTextProperty()
        txtprop.SetFontFamilyToArial()
        txtprop.SetFontSize(18)
        txtprop.SetColor(1,1,1)
        txt.SetDisplayPosition(450,550)
            
        # assign actor to the renderer
        ren.AddActor(txt)
    
        # Set background color
        ren.SetBackground(.1, .1, .1)
    
        # Set window size
        renWin.SetSize(600, 600)
    
        # Enable user interface interactor
        iren.Initialize()
        iren.Start()
        
        
    if __name__ == "__main__":
        CreateScene()
    View Code

      按住回车键,一帧一帧播放动画。最后的效果是这样的:

     

     

    参考:

    https://github.com/Rhoban/IKWalk

    Using Inverse Kinematics to Develop a Biped Robot Walking Gait C#

    8 DOF Biped Robot using Dynamixel AX-12A Servos and Arduino

    展开全文
  • 针对双足机器人上、下楼梯时的稳定行走问题,结合机器人动态上、下楼梯的约束条件,规划双足机器人动态上、下楼梯的步态,并提出了相应的稳定性控制策略。其中,机器人侧向平面采用保持机器人质心动态平衡的规划方法...
  • 行业分类-作业装置- 双足机器人在前进方向受到外部推力扰动时的步态规划与控制方法.zip
  • 仿人形机器人是当今世界高新技术研究领域的一个热点,而仿人形机器人行走的规划与实现则是该领域...实验结果表明在没有外界干扰的情况下,CPGs网络产生的步态数据能够用来控制Webots3D仿真环境中双足机器人稳定的行走。
  • 双足机器人

    2012-02-03 17:28:14
    步态规划进行了研究,并使用Matlab 进行仿真,仿真结果表明该算法可以生成连续的平滑轨迹, 满足机器人连续稳定行走的要求。最后,对课题进行了展望,总结了软硬件平台建立中应该注意的 问题,并指出本设计有待...
  • 双足机器人是与人类最接近的一种机器人,其关键技术就是双足步行,最大的特征就是能像人类一样行走,可以完成人类基本的运动功能,尽管目前在仿人机器人领域已经取得了很大的成果,但相对于人类行走,怎样提高在行走...
  • 基于两足机器人的直腿不稳定步行步态和... 另外,在坡度变化的不同阶段对倍增树,混沌破坏和混沌结束的镜像特性进行了研究,揭示了机器人步态的内在固有规律,为双足运动提供了理论依据。混沌步态抑制与控制策略设计。
  • 控制机器人获得快速的行走速度以及实现跑动步态仍然是双足机器人领域中具有挑战性的问题之一。机器人快速行走或跑动时,摆动脚在落地的瞬间会产生一个较大的冲击力,此力使落地脚反弹或使零力矩点(zer
  • 半被动双足机器人的主动控制策略研究,付成龙,陈恳,被动行走的低能耗特性为双足机器人实现高效行走提供了一个新思路,但目前的被动行走机器人还只能完成单一的步态,且非常容易摔倒
  • 然后,利用目前通用的行为规划软件对双足机器人步态规划进行仿真,并在平坦地面上进行相应行走试验。实验证明,根据人行走模式对机器人进行步态规划的算法稳定可行,为机器人的教学和科研提供了良好的实验平台。
  • 针对传统的基于零力矩点( ZMP)步态稳定性判 据方法,分析了 ZMP、C OP的相互关系,表明在双足机器人与水平地面无粘性力和无吸附力作用下,其 ZMP即为压力中 心点 COP。基于具有足趾关节的双足机器人足底支撑面多种变化,...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 212
精华内容 84
关键字:

双足机器人步态规划