W17 <<
Previous Next >> W18
W16
完成率90%
Onshape 零組件繪製(20%)
圖檔連結:
https://cad.onshape.com/documents/ae5e52d15e6f56a88de480bd/w/848109e844fff2142a6b0867/e/70a17173058ad8dac740ea4a

建立 CoppeliaSim 4.1.0 MTB robot 場景(20%)
手臂末端加入 components-gripper-suction pad 吸盤(10%)
成功裝上吸盤,也能吸起方塊,但使用鍵盤控制部分失敗
(裝上吸盤部分請看上方影片3:18~9:44)
(吸起方塊部分請看下方影片)
逆向運動學函式(20%)
function moving(x,y)
a=0.5
b=0.5
c=math.pow((math.pow(x,2)+math.pow(y,2)),0.5)
s=(a+b+c)/2
area=math.pow((s*(s-a)*(s-b)*(s-c)),0.5)
h=area/(2*c)
deg1_base=math.atan(x/y)
if x<0 and y<0 then
deg1_base=deg1_base+math.pi
end
deg1_tri=math.asin(h/a)
deg1=deg1_base+deg1_tri
deg2=math.pi-(0.5*math.pi-deg1_tri)-math.acos(h/b)
deg3=deg2-deg1
sim.setJointTargetPosition(AB,deg1)
sim.setJointTargetPosition(BC,-deg2)
sim.setJointTargetPosition(CD,deg3)
end
function sysCall_threadmain()
t=3
AB=sim.getObjectHandle('AB')
BC=sim.getObjectHandle('BC')
CD=sim.getObjectHandle('CD')
Z=sim.getObjectHandle('Z')
sim.setJointTargetPosition(AB,0)
sim.setJointTargetPosition(BC,0)
sim.setJointTargetPosition(CD,0)
sim.setJointTargetPosition(Z,0)
sim.wait(t)
sim.setIntegerSignal("pad_switch",1)
sim.setJointTargetPosition(Z,-0.09)
sim.wait(t)
sim.setJointTargetPosition(Z,0)
sim.wait(t)
moving(0.2,0.7)
sim.wait(t)
sim.setIntegerSignal("pad_switch",0)
sim.wait(t)
sim.setIntegerSignal("pad_switch",1)
sim.wait(t)
sim.setJointTargetPosition(Z,-0.09)
sim.wait(t)
sim.setJointTargetPosition(Z,0)
sim.wait(t)
moving(-0.3,-0.55)
sim.wait(t)
sim.setIntegerSignal("pad_switch",0)
end
end
Python remote API 逆向運動學函式(20%)
import sim as vrep
import math
import random
import time
import math
def moving(x,y):
a=0.5
b=0.5
c=math.pow((math.pow(x,2)+math.pow(y,2)),0.5)
s=(a+b+c)/2
area=math.pow((s*(s-a)*(s-b)*(s-c)),0.5)
h=area/(2*c)
deg1_base=math.atan(x/y)
if x<0 and y<0 :
deg1_base=deg1_base+math.pi
deg1_tri=math.asin(h/a)
deg1=deg1_base+deg1_tri
deg2=math.pi-(0.5*math.pi-deg1_tri)-math.acos(h/b)
deg3=deg2-deg1
vrep.simxSetJointTargetPosition(clientID,joint1,deg1,opmode)
vrep.simxSetJointTargetPosition(clientID,joint2,- deg2,opmode)
vrep.simxSetJointTargetPosition(clientID,joint3,deg3,opmode)
print ('Start')
vrep.simxFinish(-1)
clientID = vrep.simxStart('127.0.0.1', 19997, True, True, 5000, 5)
if clientID != -1:
print ('Connected to remote API server')
res = vrep.simxAddStatusbarMessage(
clientID, "This is teach by 40823214 ",
vrep.simx_opmode_oneshot)
if res not in (vrep.simx_return_ok, vrep.simx_return_novalue_flag):
print("Could not add a message to the status bar.")
opmode = vrep.simx_opmode_oneshot_wait
STREAMING = vrep.simx_opmode_streaming
vrep.simxStartSimulation(clientID, opmode)
ret,joint1=vrep.simxGetObjectHandle(clientID,"joint1",opmode)
ret,joint2=vrep.simxGetObjectHandle(clientID,"joint2",opmode)
ret,joint3=vrep.simxGetObjectHandle(clientID,"joint3",opmode)
ret,jointa=vrep.simxGetObjectHandle(clientID,"jointa",opmode)
vrep.simxSetJointTargetPosition(clientID,joint1,0,opmode)
vrep.simxSetJointTargetPosition(clientID,joint2,0,opmode)
vrep.simxSetJointTargetPosition(clientID,joint3,0,opmode)
vrep.simxSetIntegerSignal(clientID,"pad_switch",1,opmode)
vrep.simxSetJointTargetPosition(clientID,jointa,-0.09,opmode)
time.sleep(1)
vrep.simxSetJointTargetPosition(clientID,jointa,0,opmode)
while True:
moving(0.2,0.7)
time.sleep(1)
vrep.simxSetIntegerSignal(clientID,"pad_switch",0,opmode)
time.sleep(1)
vrep.simxSetIntegerSignal(clientID,"pad_switch",1,opmode)
vrep.simxSetJointTargetPosition(clientID,jointa,-0.09,opmode)
time.sleep(1)
vrep.simxSetJointTargetPosition(clientID,jointa,0,opmode)
moving(-0.3,-0.55)
time.sleep(1)
vrep.simxSetIntegerSignal(clientID,"pad_switch",0,opmode)
time.sleep(1)
vrep.simxSetIntegerSignal(clientID,"pad_switch",1,opmode)
vrep.simxSetJointTargetPosition(clientID,jointa,-0.09,opmode)
time.sleep(1)
vrep.simxSetJointTargetPosition(clientID,jointa,0,opmode)
W16_exam雲端連結:https://drive.google.com/drive/folders/14i25lOYEhOKEAjod-hOsjCfAgfSnolti?usp=sharing
操作心得:
第一次用Onshap畫圖,發現它可以不用像Inventor和Solidworks一樣特地在零件與零件接觸的地方留空隙,它剛好適合用來繪製CoppeliaSim需要的圖檔,而建立CoppeliaSim 4.1.0 MTB robot場景的時候有許多小細節要注意要調整,如果有一個地方不對了,在跑程式的時候就很容易出問題,要花很多時間除錯,而且常常是找不到問題在哪,再建立一次新場景會是零件少並且趕時間時候的好選擇,lua程式部分果然還是要有個實體對照才能看得懂,也因為CoppeliaSim在模擬時常常出問題,為了找出問題長時間比對自己和其他同學的程式也讓我了解每一行程式的用途,得到不少關於程式的經驗值,謝謝老師和同學們的教學和幫助
W17 <<
Previous Next >> W18