四驅車 <<
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問題解決說明