手足球模擬系統功能展示 (模擬展示與說明影片)
人對人模擬
完成品對打
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