40823204 cd2021

  • Home
    • Site Map
    • reveal
    • blog
  • About
  • stage1
    • w1
    • w2-3
    • w4報告
    • PDF
    • coppelia模擬
  • stage2
    • w5 討論
    • w6-7
    • w8 solidworks模擬動畫
    • w9報告
    • coppelia
  • stage3
    • task2
      • s1
      • s2
    • w13
    • w15影片字幕整理
      • part1
      • part2
    • w16 fossil
    • 四驅車
      • coppeliasim
  • gitlab問題解決說明
  • 影片區
    • stage1每周影片區
    • stage2每周影片區
  • W5
  • W16
四驅車 << Previous Next >> gitlab問題解決說明

coppeliasim

w12-13

進度:coppelia模擬+lua控制

問題:原先車子的前後輪是分別為一體的,只有兩個joint能帶動輪胎,所以車子僅能坐上下及左右的控制

檔案下載處:四驅車

w14

問題:原先車子的前後輪示一體成形的,這樣連結時前後共只有兩根旋轉軸,無法讓車子轉彎

進度:將輪胎各別分解出來,新增coppelia中joint的數量,使每顆輪胎都能由相對的joint帶動+修改lua程式

修改內容:使每顆輪胎都有對應的joint

 

coppelia檔案下載處:S3-22test.zip

lua程式碼

function sysCall_init()
    -- do some initialization here
    joint=sim.getObjectHandle('joint')
    joint2=sim.getObjectHandle('joint2')
    joint5=sim.getObjectHandle('joint5')
    joint3=sim.getObjectHandle('joint3')
    joint4=sim.getObjectHandle('joint4')
    ds=0
    dff=0
    df=0
    db=0
    dbb=0
    dt=5
end

function sysCall_actuation()
    -- put your actuation code here
    message,auxiliaryData=sim.getSimulatorMessage()
    while message~=-1 do
         if (message==sim.message_keypress) then
             if (auxiliaryData[1]==2008) then
             ds=ds+dt
             sim.setJointTargetPosition(joint,ds*math.pi/180)
             end
             if (auxiliaryData[1]==2007) then
             ds=ds-dt
             sim.setJointTargetPosition(joint,ds*math.pi/180)
             end
             if (auxiliaryData[1]==49) then
             df=df-20
             db=db-20
             sim.setJointTargetPosition(joint5,df*math.pi/180)
             sim.setJointTargetPosition(joint3,db*math.pi/180)
             end
             if (auxiliaryData[1]==50) then
             dff=dff-20
             dbb=dbb-20
             sim.setJointTargetPosition(joint2,dff*math.pi/180)
             sim.setJointTargetPosition(joint4,dbb*math.pi/180)
             end
             if (auxiliaryData[1]==51) then
             df=df+20
             db=db+20
             sim.setJointTargetPosition(joint5,df*math.pi/180)
             sim.setJointTargetPosition(joint3,db*math.pi/180)
             end
             if (auxiliaryData[1]==52) then
             dff=dff+20
             dbb=dbb+20
             sim.setJointTargetPosition(joint2,dff*math.pi/180)
             sim.setJointTargetPosition(joint4,dbb*math.pi/180)
             end
             if (auxiliaryData[1]==2010) then
             df=df+30
             db=db+30
             dff=dff+30
             dbb=dbb+30
             sim.setJointTargetPosition(joint5,df)
             sim.setJointTargetPosition(joint3,db)
             sim.setJointTargetPosition(joint2,dff)
             sim.setJointTargetPosition(joint4,dbb)
             end
             if (auxiliaryData[1]==2009) then
             df=df-30
             db=db-30
             dff=dff-30
             dbb=dbb-30
             sim.setJointTargetPosition(joint5,df)
             sim.setJointTargetPosition(joint3,db)
             sim.setJointTargetPosition(joint2,dff)
             sim.setJointTargetPosition(joint4,dbb)
             end
          end 
    message,auxiliaryData=sim.getSimulatorMessage()
    end
end

w15進度

內容:用python remote api 控制

api.py檔案下載處:S3-22test-api.zip

程式碼

import sim as vrep
import math
import random
import time
import keyboard
 
print ('Start')
 
# Close eventual old connections
vrep.simxFinish(-1)
# Connect to V-REP remote server
clientID = vrep.simxStart('192.168.50.217', 19997, True, True, 5000, 5)
  
if clientID !=-1:
    print ('Connected to remote API server')
   
    res = vrep.simxAddStatusbarMessage(
        clientID, "40823204",
        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,joint=vrep.simxGetObjectHandle(clientID,"joint",opmode)
    ret,joint2=vrep.simxGetObjectHandle(clientID,"joint2",opmode)
    ret,joint5=vrep.simxGetObjectHandle(clientID,"joint5",opmode)
    ret,joint3=vrep.simxGetObjectHandle(clientID,"joint3",opmode)
    ret,joint4=vrep.simxGetObjectHandle(clientID,"joint4",opmode)
    ds=0
    dff=0
    df=0
    db=0
    dbb=0
    vrep.simxSetJointTargetPosition(clientID,joint,ds,opmode)
    vrep.simxSetJointTargetPosition(clientID,joint2,dff,opmode)
    vrep.simxSetJointTargetPosition(clientID,joint5,df,opmode)
    vrep.simxSetJointTargetPosition(clientID,joint3,db,opmode)
    vrep.simxSetJointTargetPosition(clientID,joint4,dbb,opmode)
    
    while True:
        #Clockwise
        if keyboard.is_pressed("w"):
            ds=ds-0.01
            vrep.simxSetJointTargetPosition(clientID,joint,ds,opmode)
            print("up")
        if keyboard.is_pressed("s"):
            ds=ds+0.01
            vrep.simxSetJointTargetPosition(clientID,joint,ds,opmode)
            print("down")
        if keyboard.is_pressed("a"):
            df=df+0.2
            db=db+0.2
            dff=dff+0.2
            dbb=dbb+0.2
            vrep.simxSetJointTargetPosition(clientID,joint2,dff,opmode)
            vrep.simxSetJointTargetPosition(clientID,joint5,df,opmode)
            vrep.simxSetJointTargetPosition(clientID,joint3,db,opmode)
            vrep.simxSetJointTargetPosition(clientID,joint4,dbb,opmode)
            print("left")
        if keyboard.is_pressed("d"):
            df=df-0.2
            db=db-0.2
            dff=dff-0.2
            dbb=dbb-0.2
            vrep.simxSetJointTargetPosition(clientID,joint2,dff,opmode)
            vrep.simxSetJointTargetPosition(clientID,joint5,df,opmode)
            vrep.simxSetJointTargetPosition(clientID,joint3,db,opmode)
            vrep.simxSetJointTargetPosition(clientID,joint4,dbb,opmode)
            print("right")
        if keyboard.is_pressed("1"):
            df=df-0.2
            db=db-0.2
            vrep.simxSetJointTargetPosition(clientID,joint5,df,opmode)
            vrep.simxSetJointTargetPosition(clientID,joint3,db,opmode)
            print("1") 
        if keyboard.is_pressed("2"):
            dff=dff-0.2
            dbb=dbb-0.2
            vrep.simxSetJointTargetPosition(clientID,joint2,dff,opmode)
            vrep.simxSetJointTargetPosition(clientID,joint4,dbb,opmode)
            print("2") 
        if keyboard.is_pressed("3"):
            df=df+0.2
            db=db+0.2
            vrep.simxSetJointTargetPosition(clientID,joint5,df,opmode)
            vrep.simxSetJointTargetPosition(clientID,joint3,db,opmode)
            print("3") 
        if keyboard.is_pressed("4"):
            dff=dff+0.2
            dbb=dbb+0.2
            vrep.simxSetJointTargetPosition(clientID,joint2,dff,opmode)
            vrep.simxSetJointTargetPosition(clientID,joint4,dbb,opmode)
            print("4")     


四驅車 << Previous Next >> gitlab問題解決說明

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