問題:
第十三週-影像辨識機器對打
如果球打到桿子後方會無法回擊
解決方法:
更改判斷球位置的方式如第十四週內容
問題:
無法判別多根桿子
原因:
程式會尋找所有藍色物件的質心
解決方法:
更改尋找物件方式
由原本的找尋藍色物件改成尋找藍色物件的輪廓
問題:
由於尋找物件輪廓順序是隨機的
所以無法直接給予相對應物件座標位置
解決方法:
新增以下判斷式來設定各物件位置變數
# 只取奇數項 ret_blue_odd = ret_blue[::2] for i in range(len(ret_blue_odd)): if ret_blue_odd[i][1] >=13 and ret_blue_odd[i][1] <=20: blue00 = (ret_blue_odd[i][0], ret_blue_odd[i][1]) elif ret_blue_odd[i][1] >= 57 and ret_blue_odd[i][1] <=64: if ret_blue_odd[i][0] < ret_blue_odd[i+1][0]: blue01 = (ret_blue_odd[i][0], ret_blue_odd[i][1]) elif ret_blue[i][0] >= ret_blue[i+1][0]: blue02 = (ret_blue_odd[i][0], ret_blue_odd[i][1]) # blue00 is first rod object position # blue01 is second rod and left object position # blue02 is second rod and right object position
問題:
同時按下兩個鍵會造成衝突
解決方法 :
將兩桿子操作按鍵,使用try except分開寫成兩段程式
try: if keyboard.is_pressed('v'): vrep.simxSetJointTargetVelocity(clientID,BRev_handle,B_KickBallVel,vrep.simx_opmode_oneshot_wait) elif keyboard.is_pressed('b'): vrep.simxSetJointTargetVelocity(clientID,BRev_handle,R_KickBallVel,vrep.simx_opmode_oneshot_wait) elif keyboard.is_pressed('z'): vrep.simxSetJointTargetVelocity(clientID,BMo_handle,0.2,vrep.simx_opmode_oneshot_wait) elif keyboard.is_pressed('x'): vrep.simxSetJointTargetVelocity(clientID,BMo_handle,0,vrep.simx_opmode_oneshot_wait) elif keyboard.is_pressed('c'): vrep.simxSetJointTargetVelocity(clientID,BMo_handle,-0.2,vrep.simx_opmode_oneshot_wait) except: break try: if keyboard.is_pressed('o'): vrep.simxSetJointTargetVelocity(clientID,RRev_handle,R_KickBallVel,vrep.simx_opmode_oneshot_wait) elif keyboard.is_pressed('p'): vrep.simxSetJointTargetVelocity(clientID,RRev_handle,B_KickBallVel,vrep.simx_opmode_oneshot_wait) elif keyboard.is_pressed('y'): vrep.simxSetJointTargetVelocity(clientID,RMo_handle,0.2,vrep.simx_opmode_oneshot_wait) elif keyboard.is_pressed('u'): vrep.simxSetJointTargetVelocity(clientID,RMo_handle,0,vrep.simx_opmode_oneshot_wait) elif keyboard.is_pressed('i'): vrep.simxSetJointTargetVelocity(clientID,RMo_handle,-0.2,vrep.simx_opmode_oneshot_wait) except: break
問題:
操作按鍵過多,導致控制困難
解決方法 :
取消暫停鍵
改成按下按鍵作動 放開則停止
修改前 :
if keyboard.is_pressed('y'): #桿子向左移 vrep.simxSetJointTargetVelocity(clientID,RMo_handle,0.1,vrep.simx_opmode_oneshot_wait) elif keyboard.is_pressed('u'): #桿子停止作動 vrep.simxSetJointTargetVelocity(clientID,RMo_handle,0,vrep.simx_opmode_oneshot_wait) elif keyboard.is_pressed('i'): #桿子向右移 vrep.simxSetJointTargetVelocity(clientID,RMo_handle,-0.1,vrep.simx_opmode_oneshot_wait)
修改後 :
if keyboard.is_pressed('u'): #桿子向左移 vrep.simxSetJointTargetVelocity(clientID,RMo_handle,0.1,vrep.simx_opmode_oneshot_wait) elif keyboard.is_pressed('i'): #桿子向右移 vrep.simxSetJointTargetVelocity(clientID,RMo_handle,-0.1,vrep.simx_opmode_oneshot_wait) else: vrep.simxSetJointTargetVelocity(clientID,RMo_handle,0,vrep.simx_opmode_oneshot_wait)