機器人仿真軟件 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) – [設置電機角度]

在這裏插入圖片描述

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