Inverse kinematics for a 2-joint robot arm using algebra 翻譯 <<
Previous W16
總檔案連結
1.Onshape 零組件繪製:圖檔連結
2.建立 CoppeliaSim MTB robot 場景:
function ex(x,y)
a=1
b=1
c=math.pow((math.pow(x,2)+math.pow(y,2)),0.5)
s=(a+b+c)/2
f=math.pow((s*(s-a)*(s-b)*(s-c)),0.5)
h=f/(2*c)
math.pow(x,2)
degl_b=math.atan(x/y)
if x<0 and y<0 then
degl_b=degl_b+math.pi
end
degl_t=math.asin(h/a)
degl=degl_t+degl_b
degll=math.pi-(0.5*math.pi-degl_t)-math.acos(h/b)
deglll=degll-degl
sim.setJointTargetPosition(joint1,degl)
sim.setJointTargetPosition(joint2,-degll)
sim.setJointTargetPosition(joint3,deglll)
end
function sysCall_threadmain()
--定義軸的名稱
joint1=sim.getObjectHandle('1')
joint2=sim.getObjectHandle('2')
joint3=sim.getObjectHandle('3')
joint4=sim.getObjectHandle('4')
--sim.setJointTargetPosition(軸名稱,弧度or距離)=>讓軸轉指定的弧度(rad)or距離(M)
sim.setJointTargetPosition(joint1,0)
sim.setJointTargetPosition(joint2,0)
sim.setJointTargetPosition(joint3,0)
sim.setJointTargetPosition(joint4,0)
--sim.wait(秒)=>暫停(秒)
sim.wait(5)
--sim.setIntegerSignal('名稱',信號值)=>給pad_switch信號為1
sim.setIntegerSignal('pad_switch',1)
--sim.setJointTargetPosition(軸名稱,弧度or距離)=>讓軸下降0.1
sim.setJointTargetPosition(joint4,-0.1)
sim.wait(5)
sim.setJointTargetPosition(joint4,0)
sim.wait(5)
--迴圈重複以下動作到結束
while sim.getSimulationState()~=sim.simulation_advancing_abouttostopre do
--移動到座標
ex(-0.02,0.07)
sim.wait(5)
sim.setIntegerSignal('pad_switch',0)
sim.wait(5)
sim.setIntegerSignal('pad_switch',1)
sim.setJointTargetPosition(joint4,-0.1)
sim.wait(5)
sim.setJointTargetPosition(joint4,0)
sim.wait(5)
ex(-0.03,-0.055)
sim.wait(5)
sim.setIntegerSignal('pad_switch',0)
sim.wait(5)
sim.setIntegerSignal('pad_switch',1)
sim.setJointTargetPosition(joint4,-0.1)
sim.wait(5)
sim.setJointTargetPosition(joint4,0)
sim.wait(5)
end
end
3.手臂末端加入 components-gripper-suction pad 吸盤:
4.逆向運動學函式:
5.Python remote API 逆向運動學函式:
Inverse kinematics for a 2-joint robot arm using algebra 翻譯 <<
Previous