机器人仿真软件 V-REP学习记录 机械臂控制0-1


本案例主要讲解多自由度机械臂的逆运动学,在开始之前先看一下,scenes/ik_fk_simple_examples.这些案例
第一类案例:1~~6

预习–案例

demo1 -singleIkGroupWithSingleIkElement-undamped(单关节逆运动学 - 无阻尼)

  1. 功能:双关节机械臂将执行器末端从A(绿色)移动到B(红色),采用逆运动学算法
  2. 说明:
  • 如果B点在运动范围内可得出关节角度,并正确移动
  • 如果B点不在运动范围内则会出现不唯一解,运动失常
  1. 演示:在这里插入图片描述
  2. 代码
初始化
function sysCall_init()
  
    ui=simGetUIHandle('UI')
    --不明白这里的‘ik’在哪里设置的
    ik=sim.getIkGroupHandle('ik')
    print(ik) -- 这里打印输出2030003,就是Handle编号
end
等待动作
function sysCall_actuation()
    local a=simGetUIEventButton(ui)
    if a==1 then
        sim.handleIkGroup(ik)
    end
end

demo2 -singleIkGroupWithSingleIkElement-damped(单关节逆运动学 - 有阻尼)

  1. 功能:实现和demo1一样的功能,但是解算添加了最小二乘法的解法
  2. 说明:
  • 如果B点在范围内,则两种解法效果一致
  • 如果B点在范围外,逆运动学解法不稳定,而最小二乘法可得出稳定解
  • PS:这里将两种方法做了比较
  1. 代码:备注了疑问,找不到按钮设置
function sysCall_init()
        
    ui=simGetUIHandle('UI')--点击按钮1使用逆运动学解算
    ik=sim.getIkGroupHandle('ik')
    这个按钮不知道如何对应上去的
    uiDamped=simGetUIHandle('UI_damped') --点击按钮2使用二乘法解算
    ikDamped=sim.getIkGroupHandle('ik_damped')
    
end

function sysCall_actuation()
	解法1
    local a=simGetUIEventButton(ui)
    if a==1 then
        sim.handleIkGroup(ik)
    end
    	解法2
    a=simGetUIEventButton(uiDamped)
    if a==1 then
        sim.handleIkGroup(ikDamped)
    end
end

demo 3-twoIkGroupsWithEachOneIkElement-resolutionOrderIsNotRelevant

  1. 功能:两组机械臂分别控制
  2. 说明:就是两个demo1拼到了一起
  3. 演示:在这里插入图片描述
  4. 代码:问题依旧如上
第一套线程
function sysCall_init()
        
    ui=simGetUIHandle('UI_1')
    ik=sim.getIkGroupHandle('ik_1')
    
end
第二套线程同第一套,标号为2

demo4-twoIkGroupsWithEachOneIkElement-resolutionOrderIsRelevant

  1. 功能:依旧是跟随
  2. 说明:实际还是两部分,只是一个会是另一个的随动
  3. 演示:依次点击按键1,2点击前
    在这里插入图片描述
  4. 代码:基本和demo3一样
function sysCall_init()
        
    ui1=simGetUIHandle('UI_1')
    ik1=sim.getIkGroupHandle('ik_1')
    ui2=simGetUIHandle('UI_2')
    ik2=sim.getIkGroupHandle('ik_2')
    
end
function sysCall_actuation()
    local a=s的GetUIEventButton(ui1)
    if a==1 then
        sim.handleIkGroup(ik1)
    end
    a=simGetUIEventButton(ui2)
    if a==1 then
        sim.handleIkGroup(ik2)
    end
end

demo5-singleIkGroupWithTwoIkElements

  1. 功能:实现三种运动方式,1,2各自单独运动。1,2一起运动
  2. 说明:
  • 按键1,右边移动
  • 按键2,左边移动
  • 按键3,左右分别移动
  1. 演示:在这里插入图片描述
    e在这里插入图片描述
  2. 代码:基本同上
自行脑补,基本同上

demo6-singleIkGroupWithTwoIkElements-weightedAndDampedResolution

  1. 功能:目标点不在范围内的处理方式
    原状态:
    在这里插入图片描述
    向右:
    在这里插入图片描述向左:
    在这里插入图片描述
    两边:
    在这里插入图片描述
  2. 代码基本一致

小结

这部分讲解了组和和元素的关系和逆运动学控制方式,代码控制方式
重点函数

  1. 关于逆运动学
  • ikGroup=sim.getIkGroupHandle(‘ik’) – [取handle]
  • sim.setIkElementProperties(ikGroup,tipDummy,0) – [设置组参数]
  • sim.handleIkGroup(ikGroup) – [逆运动计算]
  1. 关于电机
  • motorJoint1=sim.getObjectHandle(‘fk_motor1’) – [取得电机handle]
  • sim.setJointMode(motorJoint1,sim.jointmode_passive,0) – [设置电机模式]
  • angle=sim.getJointPosition(motorJoint1) – [读取电机角度]
  • sim.setJointMode(motorJoint1,sim.jointmode_ik,0) – [设置电机角度]

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章