手足球模擬系統功能展示 (模擬展示與說明影片)
人對人模擬

完成品對打

left player simulation
left player finish simulation
left and right player simulation
手足球人對人程式:
left1 and left2 Program
-- model in Solvespace 500 mm = 5000 mm in V-rep
--[[
Simulation is 10 times of realistic environment
floor in Solvespace 2.5 m x 2.5 m = 25 m x 25 m in V-rep
ball is in Solivespace 1g (0.001) = 0.01 kg in V-rep
hammer is in Solvespace 0.1 kg (100g) = 1kg in V-rep (0.1 for Inertia)
]]
threadFunction=function()
while sim.getSimulationState()~=sim.simulation_advancing_abouttostop do
-- Read the keyboard messages (make sure the focus is on the main window, scene view):
message,auxiliaryData=sim.getSimulatorMessage()
while message~=-1 do
if (message==sim.message_keypress) then
if (auxiliaryData[1]==119) then
-- up key
velocity=100
torque=200
hammer_back = 0
end
if (auxiliaryData[1]==115) then
-- down key
hammer_back = 1
torque=-200
velocity = -100
end
if (auxiliaryData[1]==97) then
-- right key
sliding = sliding + 0.005
sliding_1 = sliding_1 + 0.005
sim.addStatusbarMessage('sliding:'..sliding)
sim.addStatusbarMessage('sliding_1:'..sliding_1)
end
if (auxiliaryData[1]==100) then
-- left key
sliding = sliding - 0.005
sliding_1 = sliding_1 - 0.005
sim.addStatusbarMessage('sliding:'..sliding)
sim.addStatusbarMessage('sliding_1:'..sliding_1)
end
if (sliding < -0.0445) then
sliding = -0.0445
elseif (sliding > 0.0445) then
sliding = 0.0445
end
if (sliding_1 < -0.08255) then
sliding_1 = -0.08255
elseif (sliding_1 > 0.08255) then
sliding_1 = 0.08255
end
end
message,auxiliaryData=sim.getSimulatorMessage()
end
-- We take care of setting the desired hammer position:
if hammer_back == 1
then
sim.setJointPosition(joint, -1, orientation)
sim.setJointPosition(joint_1, -1, orientation)
--sim.setObjectPosition(hammer, -1, position)
end
sim.setJointTargetPosition(joint, velocity)
sim.setJointTargetPosition(joint_1, velocity)
--sim.setJointForce(joint,torque)
sim.setJointTargetPosition(slider, sliding)
sim.setJointTargetPosition(slider_1, sliding_1)
-- Since this script is threaded, don't waste time here:
sim.switchThread() -- Resume the script at next simulation loop start
end
end
-- Put some initialization code here:
-- Retrieving of some handles and setting of some initial values:
joint=sim.getObjectHandle('left_joint')
hammer=sim.getObjectHandle('left_player')
slider=sim.getObjectHandle("left_slider")
joint_1=sim.getObjectHandle('left_joint_1')
hammer_1=sim.getObjectHandle('left_player_1')
slider_1=sim.getObjectHandle("left_slider_1")
velocity=0
hammer_back=0
torque=0
sliding = 0
sliding_1 = 0
orientation=sim.getJointPosition(joint, -1)
position=sim.getObjectPosition(hammer, -1)
slider_position=sim.getJointPosition(slider, -1)
-- Here we execute the regular thread code:
res,err=xpcall(threadFunction,function(err) return debug.traceback(err) end)
if not res then
sim.addStatusbarMessage('Lua runtime error: '..err)
end
left3 and left4 Program
-- model in Solvespace 500 mm = 5000 mm in V-rep
--[[
Simulation is 10 times of realistic environment
floor in Solvespace 2.5 m x 2.5 m = 25 m x 25 m in V-rep
ball is in Solivespace 1g (0.001) = 0.01 kg in V-rep
hammer is in Solvespace 0.1 kg (100g) = 1kg in V-rep (0.1 for Inertia)
]]
threadFunction=function()
while sim.getSimulationState()~=sim.simulation_advancing_abouttostop do
-- Read the keyboard messages (make sure the focus is on the main window, scene view):
message,auxiliaryData=sim.getSimulatorMessage()
while message~=-1 do
if (message==sim.message_keypress) then
if (auxiliaryData[1]==117) then
-- up key
velocity=100
torque=200
hammer_back = 0
end
if (auxiliaryData[1]==106) then
-- down key
hammer_back = 1
torque=-200
velocity = -100
end
if (auxiliaryData[1]==107) then
-- right key
sliding_2 = sliding_2 + 0.005
sliding_3 = sliding_3 + 0.005
sim.addStatusbarMessage('sliding_2:'..sliding_2)
sim.addStatusbarMessage('sliding_3:'..sliding_3)
end
if (auxiliaryData[1]==104) then
-- left key
sliding_2 = sliding_2 - 0.005
sliding_3 = sliding_3 - 0.005
sim.addStatusbarMessage('sliding_2:'..sliding_2)
sim.addStatusbarMessage('sliding_3:'..sliding_3)
end
if (sliding_2 < -0.01905) then
sliding_2 = -0.01905
elseif (sliding_2 > 0.01905) then
sliding_2 = 0.01905
end
if (sliding_3 < -0.0635) then
sliding_3 = -0.0635
elseif (sliding_3 > 0.0635) then
sliding_3 = 0.0635
end
end
message,auxiliaryData=sim.getSimulatorMessage()
end
-- We take care of setting the desired hammer position:
if hammer_back == 1
then
sim.setJointPosition(joint, -1, orientation)
sim.setJointPosition(joint_1, -1, orientation)
--sim.setObjectPosition(hammer, -1, position)
end
sim.setJointTargetPosition(joint, velocity)
sim.setJointTargetPosition(joint_1, velocity)
--sim.setJointForce(joint,torque)
sim.setJointTargetPosition(slider, sliding_2)
sim.setJointTargetPosition(slider_1, sliding_3)
-- Since this script is threaded, don't waste time here:
sim.switchThread() -- Resume the script at next simulation loop start
end
end
-- Put some initialization code here:
-- Retrieving of some handles and setting of some initial values:
joint=sim.getObjectHandle('left_joint_2')
hammer=sim.getObjectHandle('left_player_2')
slider=sim.getObjectHandle("left_slider_2")
joint_1=sim.getObjectHandle('left_joint_3')
hammer_1=sim.getObjectHandle('left_player_3')
slider_1=sim.getObjectHandle("left_slider_3")
velocity=0
hammer_back=0
torque=0
sliding_2 = 0
sliding_3 = 0
orientation=sim.getJointPosition(joint, -1)
position=sim.getObjectPosition(hammer, -1)
slider_position=sim.getJointPosition(slider, -1)
-- Here we execute the regular thread code:
res,err=xpcall(threadFunction,function(err) return debug.traceback(err) end)
if not res then
sim.addStatusbarMessage('Lua runtime error: '..err)
end
right1 and right2 Program
-- model in Solvespace 500 mm = 5000 mm in V-rep
--[[
Simulation is 10 times of realistic environment
floor in Solvespace 2.5 m x 2.5 m = 25 m x 25 m in V-rep
ball is in Solivespace 1g (0.001) = 0.01 kg in V-rep
hammer is in Solvespace 0.1 kg (100g) = 1kg in V-rep (0.1 for Inertia)
]]
threadFunction=function()
while sim.getSimulationState()~=sim.simulation_advancing_abouttostop do
-- Read the keyboard messages (make sure the focus is on the main window, scene view):
message,auxiliaryData=sim.getSimulatorMessage()
while message~=-1 do
if (message==sim.message_keypress) then
if (auxiliaryData[1]==2007) then
-- up key
velocity=100
torque=200
hammer_back = 0
end
if (auxiliaryData[1]==2008) then
-- down key
hammer_back = 1
torque=-200
velocity = -100
end
if (auxiliaryData[1]==2010) then
-- right key
sliding = sliding + 0.005
sliding_1 = sliding_1 + 0.005
sim.addStatusbarMessage('sliding:'..sliding)
sim.addStatusbarMessage('sliding_1:'..sliding_1)
end
if (auxiliaryData[1]==2009) then
-- left key
sliding = sliding - 0.005
sliding_1 = sliding_1 - 0.005
sim.addStatusbarMessage('sliding:'..sliding)
sim.addStatusbarMessage('sliding_1:'..sliding_1)
end
if (sliding < -0.0445) then
sliding = -0.0445
elseif (sliding > 0.0445) then
sliding = 0.0445
end
if (sliding_1 < -0.08255) then
sliding_1 = -0.08255
elseif (sliding_1 > 0.08255) then
sliding_1 = 0.08255
end
end
message,auxiliaryData=sim.getSimulatorMessage()
end
-- We take care of setting the desired hammer position:
if hammer_back == 1
then
sim.setJointPosition(joint, -1, orientation)
sim.setJointPosition(joint_1, -1, orientation)
--sim.setObjectPosition(hammer, -1, position)
end
sim.setJointTargetPosition(joint, velocity)
sim.setJointTargetPosition(joint_1, velocity)
--sim.setJointForce(joint,torque)
sim.setJointTargetPosition(slider, sliding)
sim.setJointTargetPosition(slider_1, sliding_1)
-- Since this script is threaded, don't waste time here:
sim.switchThread() -- Resume the script at next simulation loop start
end
end
-- Put some initialization code here:
-- Retrieving of some handles and setting of some initial values:
joint=sim.getObjectHandle('right_joint')
hammer=sim.getObjectHandle('right_player')
slider=sim.getObjectHandle("right_slider")
joint_1=sim.getObjectHandle('right_joint_1')
hammer_1=sim.getObjectHandle('right_player_1')
slider_1=sim.getObjectHandle("right_slider_1")
velocity=0
hammer_back=0
torque=0
sliding = 0
sliding_1 = 0
orientation=sim.getJointPosition(joint, -1)
position=sim.getObjectPosition(hammer, -1)
slider_position=sim.getJointPosition(slider, -1)
-- Here we execute the regular thread code:
res,err=xpcall(threadFunction,function(err) return debug.traceback(err) end)
if not res then
sim.addStatusbarMessage('Lua runtime error: '..err)
end
left3 and left4 Program
-- model in Solvespace 500 mm = 5000 mm in V-rep
--[[
Simulation is 10 times of realistic environment
floor in Solvespace 2.5 m x 2.5 m = 25 m x 25 m in V-rep
ball is in Solivespace 1g (0.001) = 0.01 kg in V-rep
hammer is in Solvespace 0.1 kg (100g) = 1kg in V-rep (0.1 for Inertia)
]]
threadFunction=function()
while sim.getSimulationState()~=sim.simulation_advancing_abouttostop do
-- Read the keyboard messages (make sure the focus is on the main window, scene view):
message,auxiliaryData=sim.getSimulatorMessage()
while message~=-1 do
if (message==sim.message_keypress) then
if (auxiliaryData[1]==56) then
-- up key
velocity=100
torque=200
hammer_back = 0
end
if (auxiliaryData[1]==53) then
-- down key
hammer_back = 1
torque=-200
velocity = -100
end
if (auxiliaryData[1]==54) then
-- right key
sliding_2 = sliding_2 + 0.005
sliding_3 = sliding_3 + 0.005
sim.addStatusbarMessage('sliding_2:'..sliding_2)
sim.addStatusbarMessage('sliding_3:'..sliding_3)
end
if (auxiliaryData[1]==52) then
-- left key
sliding_2 = sliding_2 - 0.005
sliding_3 = sliding_3 - 0.005
sim.addStatusbarMessage('sliding_2:'..sliding_2)
sim.addStatusbarMessage('sliding_3:'..sliding_3)
end
if (sliding_2 < -0.01905) then
sliding_2 = -0.01905
elseif (sliding_2 > 0.01905) then
sliding_2 = 0.01905
end
if (sliding_3 < -0.0635) then
sliding_3 = -0.0635
elseif (sliding_3 > 0.0635) then
sliding_3 = 0.0635
end
end
message,auxiliaryData=sim.getSimulatorMessage()
end
-- We take care of setting the desired hammer position:
if hammer_back == 1
then
sim.setJointPosition(joint, -1, orientation)
sim.setJointPosition(joint_1, -1, orientation)
--sim.setObjectPosition(hammer, -1, position)
end
sim.setJointTargetPosition(joint, velocity)
sim.setJointTargetPosition(joint_1, velocity)
--sim.setJointForce(joint,torque)
sim.setJointTargetPosition(slider, sliding_2)
sim.setJointTargetPosition(slider_1, sliding_3)
-- Since this script is threaded, don't waste time here:
sim.switchThread() -- Resume the script at next simulation loop start
end
end
-- Put some initialization code here:
-- Retrieving of some handles and setting of some initial values:
joint=sim.getObjectHandle('right_joint_2')
hammer=sim.getObjectHandle('right_player_2')
slider=sim.getObjectHandle("right_slider_2")
joint_1=sim.getObjectHandle('right_joint_3')
hammer_1=sim.getObjectHandle('right_player_3')
slider_1=sim.getObjectHandle("right_slider_3")
velocity=0
hammer_back=0
torque=0
sliding_2 = 0
sliding_3 = 0
orientation=sim.getJointPosition(joint, -1)
position=sim.getObjectPosition(hammer, -1)
slider_position=sim.getJointPosition(slider, -1)
-- Here we execute the regular thread code:
res,err=xpcall(threadFunction,function(err) return debug.traceback(err) end)
if not res then
sim.addStatusbarMessage('Lua runtime error: '..err)
end