40823208 cd2021

  • Home
    • Site Map
    • reveal
    • blog
  • About
  • 影片
  • Stage1 小組作業
    • stage1小組討論
    • stage1小組進度 (w2~w4)
    • W4 stage1小組報告
    • 各組影片表格
  • Stage2小組作業
    • stage2小組討論
    • stage2小組進度 (w5~w9)
    • W9 stage2小組報告
  • Stage3小組作業
    • coppeliasim測試
    • stage3小組討論
    • stage3小組進度(w10~w18)
    • task1
    • task2
    • task3
  • W5
  • w15
  • w16
w15 << Previous

w16

1.onshape 零組件繪製

2021/06/12

onshape零件下載

onshape零件共享:

https://cad.onshape.com/documents/ade104e86af4289bfb5f3582/w/45ff20cb2b7f1c39a7e9e317/e/8e05de1b8eef2d98702cd126

2.將零件輸入CoppeliaSim建立場景

2021/06/12

項目2檔案下載

(1) 新增鍵盤a、s控制軸axis2旋轉

                 if (auxiliaryData[1]==97) then --a left turn in degree
                    -- if key a pressed axis1 angle adds 5 degrees
                     rotation1 = rotation1 - 5*deg
                     sim.setJointPosition(axis2, rotation1)
                end -- if a
                if (auxiliaryData[1]==115) then --s right turn in degree
                    -- if key s pressed axis1 angle adds 5 degrees
                     rotation1 = rotation1 + 5*deg
                     sim.setJointPosition(axis2, rotation1)
                end -- if s

(2) r、l操控軸axis1的轉動

3.手臂末端加入吸盤

2021/06/12

(1) 吸盤下載檔案與項目二相同

(2) d、u操控軸axis3上下運動,p、q操控吸盤的吸放

4.逆向運動學函式

2021/06/13

項目4檔案下載

建立場景

執行程式

function moving(x,y)
    a=400
    b=400
    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(y/x)
    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(joint01,deg1)
    sim.setJointTargetPosition(joint02,-deg2)
    sim.setJointTargetPosition(joint03,deg3)
end
function sysCall_threadmain()
   joint01=sim.getObjectHandle('joint1')
   joint02=sim.getObjectHandle('joint2')
   joint03=sim.getObjectHandle('joint3')
   jointz=sim.getObjectHandle('jointz')
   sim.setJointTargetPosition(joint01,0)
   sim.setJointTargetPosition(joint02,0)
   sim.setJointTargetPosition(joint03,0)
   sim.setJointTargetPosition(jointz,0)
   sim.setIntegerSignal("pad_switch",1)
   sim.setJointTargetPosition(jointz,-0.04)
   sim.wait(2)
   sim.setJointTargetPosition(jointz,0)
   while sim.getSimulationState()~=sim.simualation_advancing_abouttostopre do
   sim.wait(2)
   moving(0.2,0.7)
   sim.wait(2)
   sim.setIntegerSignal("pad_switch",0)
   sim.wait(2)
   sim.setIntegerSignal("pad_switch",1)
   sim.wait(2)
   sim.setJointTargetPosition(jointz,-0.04)
   sim.wait(2)
   sim.setJointTargetPosition(jointz,0)
   sim.wait(2)
   moving(-0.3,-0.55)
   sim.wait(2)
   sim.setIntegerSignal("pad_switch",0)
   sim.wait(2)
   sim.setIntegerSignal("pad_switch",1)
   sim.wait(2)
   sim.setJointTargetPosition(jointz,-0.04)
   sim.wait(2)
   sim.setJointTargetPosition(jointz,0)
   end
end

5.Python remote API 逆向運動學函式

2021/06/13

項目5檔案下載

import sim as vrep
import math
import random
import time

def moving (x,y):
     a=0.4
     b=0.4
     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(y/x)
     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,joint01,deg1,opmode)
     vrep.simxSetJointTargetPosition(clientID,joint02,-deg2,opmode)
     vrep.simxSetJointTargetPosition(clientID,joint03,deg3,opmode)

print ('Start')
 
# Close eventual old connections
vrep.simxFinish(-1)
# Connect to V-REP remote server
clientID = vrep.simxStart('192.168.1.83', 19997, True, True, 5000, 5)
if clientID !=-1:
    print ('Connected to remote API server')
 
    res = vrep.simxAddStatusbarMessage(
        clientID, "40823208",
        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,joint01=vrep.simxGetObjectHandle(clientID,"joint1",opmode)
    ret,joint02=vrep.simxGetObjectHandle(clientID,"joint2",opmode)
    ret,joint03=vrep.simxGetObjectHandle(clientID,"joint3",opmode)
    ret,jointz=vrep.simxGetObjectHandle(clientID,"jointz",opmode)
    vrep.simxSetJointTargetPosition(clientID,joint01,0,opmode)
    vrep.simxSetJointTargetPosition(clientID,joint02,0,opmode)
    vrep.simxSetJointTargetPosition(clientID,joint03,0,opmode)
    vrep.simxSetIntegerSignal(clientID,"pad_switch",1,opmode)
    vrep.simxSetJointTargetPosition(clientID,jointz,-0.05,opmode)
    time.sleep(5)
    vrep.simxSetJointTargetPosition(clientID,jointz,0,opmode)
    while True:
     time.sleep(5)
     moving(0.2,0.7)
     time.sleep(5)
     vrep.simxSetIntegerSignal(clientID,"pad_switch",0,opmode)
     time.sleep(5)
     vrep.simxSetIntegerSignal(clientID,"pad_switch",1,opmode)
     time.sleep(5)
     vrep.simxSetJointTargetPosition(clientID,jointz,-0.05,opmode)
     time.sleep(5)
     vrep.simxSetJointTargetPosition(clientID,jointz,0,opmode)
     time.sleep(5)
     moving(-0.3,-0.55)
     time.sleep(5)
     vrep.simxSetIntegerSignal(clientID,"pad_switch",0,opmode)
     time.sleep(5)
     vrep.simxSetIntegerSignal(clientID,"pad_switch",1,opmode)
     time.sleep(5)
     vrep.simxSetJointTargetPosition(clientID,jointz,-0.05,opmode)
     time.sleep(5)
     vrep.simxSetJointTargetPosition(clientID,jointz,0,opmode)
     time.sleep(5)

操作心得:

自己實際操作過後,匯入零件建立場景的部分還算能夠跟上,但是更深入的程式部分則要慢慢的理解以及吸收,也感謝40823214林厚宇同學的教導。

參與30人直播教學:


w15 << Previous

Copyright © All rights reserved | This template is made with by Colorlib