CoppeliaSim(原Vrep)中实现多关节机械臂的正运动学仿真【CoppeliaSim内嵌脚本lua语言实现】

  • lua实现

本章在动力学建模完成的前提下进行

传送门【CoppeliaSim】(原V-rep)模型文件导入及动力学建模_魚香肉丝盖饭的博客-CSDN博客_vrep导入stl

1)创建脚本

image-20211129122626251

​ 因为用到的RML库函数只能在线程模式下运行,所以添加脚本时要选择线程脚本。

2)代码实现

function sysCall_threadmain()
    
    -- 获取必要的句柄handle(以下四行代码是机械臂标准获取句柄方式)
    jointHandles={}
    for i = 1,4,1 do
        jointHandles[i] = sim.getObjectHandle('RRRR_J'..i)
    end


    -- 设置机械臂运动属性
    -- 属性根据实际状态去设置
    local accel = 0.5
    local jerk  = 0.5
    local vel   = 0.5
    local currentVel   = {0,0,0,0}
    local currentAccel = {0,0,0,0}
    local maxVel       = {vel,vel,vel,1.5*vel}
    local maxAccel     = {accel,accel,accel,accel}
    local maxJerk      = {jerk,jerk,jerk,jerk}
    local targetVel    = {0,0,0,0}
     
    
    
    -- 主循环
    while sim.getSimulationState()~=sim.simulation_advancing_abouttostop do
        -- 先运行到工作状态
        Tarpos = {80*math.pi/180,80*math.pi/180,80*math.pi/180,80*math.pi/180}
        -- 工作姿态
        sim.rmlMoveToJointPositions(jointHandles,-1,currentVel,currentAccel,
            maxVel,maxAccel,maxJerk,Tarpos,targetVel)
        -- 因为只能在线程模式下运行,所以添加脚本时要选择线程脚本
        Tarpos = {0,0,0,0} -- 初始姿态
        sim.rmlMoveToJointPositions(jointHandles,-1,currentVel,currentAccel,
            maxVel,maxAccel,maxJerk,Tarpos,targetVel)
        Tarpos ={-80*math.pi/180,-80*math.pi/180,
            -80*math.pi/180,-80*math.pi/180} -- 工作姿态
        sim.rmlMoveToJointPositions(jointHandles,-1,currentVel,currentAccel,
            maxVel,maxAccel,maxJerk,Tarpos,targetVel)
        Tarpos = {0,0,0,0} -- 初始姿态
        sim.rmlMoveToJointPositions(jointHandles,-1,currentVel,currentAccel,
                maxVel,maxAccel,maxJerk,Tarpos,targetVel)
        -- 以上是四个关节同时运动

        -- 以下是四个关节依次运动

        Tarpos = {80*math.pi/180,80*math.pi/180,80*math.pi/180,80*math.pi/180}
        for i =1,4,1 do
            sim.rmlMoveToJointPositions({jointHandles[i]},-1,{currentVel[i]},{currentAccel[i]},
            {maxVel[i]},{maxAccel[i]},{maxJerk[i]},{Tarpos[i]},{targetVel[i]})
        end
        Tarpos = {0,0,0,0}
        for i =1,4,1 do
            sim.rmlMoveToJointPositions({jointHandles[i]},-1,{currentVel[i]},{currentAccel[i]},
            {maxVel[i]},{maxAccel[i]},{maxJerk[i]},{Tarpos[i]},{targetVel[i]})
        end

        Tarpos ={-80*math.pi/180,-80*math.pi/180,
            -80*math.pi/180,-80*math.pi/180}
        for i =1,4,1 do
            sim.rmlMoveToJointPositions({jointHandles[i]},-1,{currentVel[i]},{currentAccel[i]},
            {maxVel[i]},{maxAccel[i]},{maxJerk[i]},{Tarpos[i]},{targetVel[i]})
        end

        Tarpos = {0,0,0,0} -- 初始姿态
        for i =1,4,1 do
            sim.rmlMoveToJointPositions({jointHandles[i]},-1,{currentVel[i]},{currentAccel[i]},
            {maxVel[i]},{maxAccel[i]},{maxJerk[i]},{Tarpos[i]},{targetVel[i]})
        end
    end
end

function sysCall_cleanup()
    -- Put some clean-up code here
end

3)以上代码的运行结果

coppeliaSim正运动学

4)代码中用到函数的help文档

  • sim.getSimulationState

image-20211129205712395

​ 此函数的返回值:

sim.simulation_stopped  -- 仿真停止
sim.simulation_paused   -- 仿真暂停
sim.simulation_advancing_firstafterstop
sim.simulation_advancing_running
sim.simulation_advancing_lastbeforepause
sim.simulation_advancing_firstafterpause
sim.simulation_advancing_abouttostop
sim.simulation_advancing_lastbeforestop
  • sim.getObjectHandle

image-20211129210700340

  • sim.rmlMoveToJointPositions

image-20211129205605959

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
CoppeliaSim是一个流行的机器人仿真软件,它可以通过模拟机械臂运动与操作来进行机器人控制的开发与测试。若在CoppeliaSim的模拟环境机械臂出现断裂的情况,可以先考虑以下几个方面的解决方法。 首先,我们需要检查机械臂的连接部件,如关节、连杆等是否确安装,并确认他们之间的连接点是否存在断裂或松动的情况。如果有任何部件损坏或断裂,需要重新安装或更换这些部件,以确保机械臂的稳定性与常运行。 其次,我们需要检查控制器设定是否确。在CoppeliaSim,通过设置关节运动范围、速度、力矩等参数,来控制机械臂运动。如果这些参数设置不确,可能会导致机械臂部分或全部运动断裂。我们可以检查控制器的设置是否与机械臂的物理特性相符,如运动范围是否超过关节的工作能力,速度是否过大导致运动不稳定等。 最后,我们需要检查机械臂的物理特性是否符合预期。机械臂运动可能受到物理因素的限制,如重量分布不平衡导致关节运动受阻、材料强度不足导致关键部件断裂等。我们可以通过检查机械臂的设计参数,与模拟环境机械臂的物理特性来比对,以确认是否存在物理特性与仿真模型不符的情况。 综上所述,当CoppeliaSim机械臂出现断裂时,我们可以从机械连接方面、控制器设置方面以及机械臂的物理特性方面寻找解决方法,以确保机械臂运动能够常进行。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值