2019 Collaborative Product Design Internship BG1

送球機構設計與模擬 << Previous Next >> 結案報告

系統功能展示

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

foosball

foosball people vs people

foosball people vs ai

人對人模擬

完成品對打

left player simulation

left player finish simulation


left and right player simulation

left1 and 2 player simulation

Foosball

Foosball - 測試雙人對打加送球機構

手足球人對人程式:

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

送球機構設計與模擬 << Previous Next >> 結案報告