由於當初設計不量沒考慮周到導致距離太遠及斜度太過另外球含有很0.75的彈性係數,這導致球根本上不去有時還飛出軌道...我想到的解決方法是加上蓋子以及在球於軌道中時寫個判斷式讓球傳送到離洞口較近的下坡,想不到球一開始就過不了洞,之後又寫了個讓球能滾出去的code,這是偷吃步的方法也是利用程式輔助機構的方法,雖然很不真實但確實可行。
下方這段是個簡單的判別式:當球的X>0.905同時Y<-0.069又同時Z<0.036時,推球的機構往前push,第二段也是同理只是相反邊,而第三段則是當球的Z方向數值大於0.036時兩者回到初始位置。
function reborn_ball_count_goal() if Ball_s[1] > 0.905 and Ball_s[2] < -0.069 and Ball_s[3] < 0.036 then sim.setJointTargetVelocity(Push_1,1) end if Ball_s[1] < -1.15 and Ball_s[2] < -0.123 and Ball_s[3] < 0.036 then sim.setJointTargetVelocity(Push_2,-1) end if Ball_s[3] > 0.036 then sim.setJointTargetVelocity(Push_1,-1) sim.setJointTargetVelocity(Push_2,1) end end
下方的這幾行也是相同道理,當球的XYZ同時滿足條件時(也是擊球後,球滾到一半時的位置)被傳送到另一位置,在從另一位置傳送到另一位置。
function reborn_ball_count_goal() if Ball_s[1] < -1.156 and Ball_s[2] > 0.163 and Ball_s[3] > 0.058 then sim.setObjectPosition(Ball,-1,{-0.20361, 0.2739, 0.15735}) end if Ball_s[1] < -0.20361 and Ball_s[2] > 0.2740 and Ball_s[3] > 0.15735 then sim.setObjectPosition(Ball,-1,{-0.2049, 0.23, 0.1482}) end if Ball_s[1] > 0.9056 and Ball_s[2] < -0.4247 and Ball_s[3] > 0.0592 then sim.setObjectPosition(Ball,-1,{-0.043425, -0.60401, 0.15735}) end if Ball_s[1] > -0.04753 and Ball_s[2] < -0.5240 and Ball_s[3] > 0.15735 then sim.setObjectPosition(Ball,-1,{-0.03667, -0.48443, 0.1482}) end end
檔案:https://github.com/mdecadp2018/site-40623130/blob/gh-pages/v-rep/robot/C_Goal_4.3.ttt((((檔案與球檯結合了