basicplayer_8c-source.html

来自「仿真人工智能是指用人工的方法和技术」· HTML 代码 · 共 526 行 · 第 1/5 页

HTML
526
字号
00179   <font class="comment">// do this by making angle in directon body and back of body and check</font>00180   <font class="comment">// whether estimated ball prediction lies between these two angles</font>00181   <font class="comment">// only change sign when not searched in previous cycles, otherwise could</font>00182   <font class="comment">// turn left, right, left, right and never find ball</font>00183   <a class="code" href="Geometry_8h.html#a2">AngDeg</a> angBody = <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a38">getAgentGlobalBodyAngle</a>();00184   <a class="code" href="Geometry_8h.html#a2">AngDeg</a> angMax  = <a class="code" href="classVecPosition.html#d1">VecPosition::normalizeAngle</a>( angBody + 180 );00185   <a class="code" href="Geometry_8h.html#a2">AngDeg</a> angBall = (<a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a47">getBallPos</a>()-00186                                   <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a43">getAgentGlobalPosition</a>()).getDirection();00187 00188   <font class="keywordflow">if</font>( abs( <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a4">getCurrentTime</a>() - timeLastSearch ) &gt; 3 )00189     iSign = <a class="code" href="Geometry_8h.html#a12">isAngInInterval</a>( angBall, angBody, angMax ) ? 1: -1;00190   timeLastSearch = <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a4">getCurrentTime</a>();00191 00192   <font class="keywordflow">if</font>( <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a4">getCurrentTime</a>() != <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a10">getTimeLastSeeMessage</a>() )00193     <font class="keywordflow">return</font> <a class="code" href="classSoccerCommand.html">SoccerCommand</a>( <a class="code" href="SoccerTypes_8h.html#a247a182">CMD_TURN</a>, iSign * ang );00194   <font class="keywordflow">return</font> <a class="code" href="classSoccerCommand.html">SoccerCommand</a>( <a class="code" href="SoccerTypes_8h.html#a247a182">CMD_TURN</a>, iSign * ang );00195 }00196 00197 <a name="l00210"></a><a class="code" href="classBasicPlayer.html#b5">00210</a> <a class="code" href="classSoccerCommand.html">SoccerCommand</a> <a class="code" href="classBasicPlayer.html#b5">BasicPlayer::dashToPoint</a>( <a class="code" href="classVecPosition.html">VecPosition</a> pos )00211 {00212   <font class="keywordtype">double</font> dDashPower = <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a151">getPowerForDash</a>(00213                                  pos - <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a43">getAgentGlobalPosition</a>(),00214                                  <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a38">getAgentGlobalBodyAngle</a>(),00215                                  <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a41">getAgentGlobalVelocity</a>(),00216                                  <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a40">getAgentEffort</a>()                );00217   <font class="keywordflow">return</font> <a class="code" href="classSoccerCommand.html">SoccerCommand</a>( <a class="code" href="SoccerTypes_8h.html#a247a181">CMD_DASH</a>, dDashPower );00218 00219 }00220 <a name="l00233"></a><a class="code" href="classBasicPlayer.html#b6">00233</a> <a class="code" href="classSoccerCommand.html">SoccerCommand</a> <a class="code" href="classBasicPlayer.html#b6">BasicPlayer::freezeBall</a>( )00234 {00235   <font class="comment">// determine power needed to kick the ball to compensate for current speed</font>00236   <font class="comment">// get opposite direction (current direction + 180) relative to body</font>00237   <font class="comment">// and make the kick command.</font>00238 00239   <font class="keywordtype">double</font> dPower = <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a144">getKickPowerForSpeed</a>( <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a48">getBallSpeed</a>() );00240   <font class="keywordflow">if</font>( dPower &gt; <a class="code" href="classBasicPlayer.html#n2">SS</a>-&gt;<a class="code" href="classServerSettings.html#a94">getMaxPower</a>() )00241   {00242     Log.log( 552, <font class="stringliteral">"%d: freeze ball has to much power"</font>, <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a5">getCurrentCycle</a>() );00243     dPower = (double)<a class="code" href="classBasicPlayer.html#n2">SS</a>-&gt;<a class="code" href="classServerSettings.html#a94">getMaxPower</a>();00244   }00245   <font class="keywordtype">double</font> dAngle = <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a49">getBallDirection</a>() + 180 - <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a38">getAgentGlobalBodyAngle</a>();00246   dAngle        = <a class="code" href="classVecPosition.html#d1">VecPosition::normalizeAngle</a>( dAngle );00247   <font class="keywordflow">return</font> <a class="code" href="classSoccerCommand.html">SoccerCommand</a>( <a class="code" href="SoccerTypes_8h.html#a247a186">CMD_KICK</a>, dPower, dAngle );00248 }00249 <a name="l00269"></a><a class="code" href="classBasicPlayer.html#b7">00269</a> <a class="code" href="classSoccerCommand.html">SoccerCommand</a> <a class="code" href="classBasicPlayer.html#b7">BasicPlayer::kickBallCloseToBody</a>( <a class="code" href="Geometry_8h.html#a2">AngDeg</a> ang )00270 {00271   <a class="code" href="Geometry_8h.html#a2">AngDeg</a>      angBody    = <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a38">getAgentGlobalBodyAngle</a>();00272   <a class="code" href="classVecPosition.html">VecPosition</a> posAgent   = <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a108">predictAgentPos</a>( 1, 0 );00273   <font class="keywordtype">double</font>      dDist      = <a class="code" href="classBasicPlayer.html#n2">SS</a>-&gt;<a class="code" href="classServerSettings.html#a6">getPlayerSize</a>() +00274                            <a class="code" href="classBasicPlayer.html#n2">SS</a>-&gt;<a class="code" href="classServerSettings.html#a58">getBallSize</a>()   +00275                            <a class="code" href="classBasicPlayer.html#n2">SS</a>-&gt;<a class="code" href="classServerSettings.html#a76">getKickableMargin</a>()/6.0;00276   <a class="code" href="Geometry_8h.html#a2">AngDeg</a>      angGlobal  = <a class="code" href="classVecPosition.html#d1">VecPosition::normalizeAngle</a>( angBody + ang );00277   <a class="code" href="classVecPosition.html">VecPosition</a> posDesBall = posAgent   + <a class="code" href="classVecPosition.html">VecPosition</a>( dDist, angGlobal, POLAR );00278   <a class="code" href="classVecPosition.html">VecPosition</a> vecDesired = posDesBall - <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a47">getBallPos</a>();00279   <a class="code" href="classVecPosition.html">VecPosition</a> vecShoot   = vecDesired - <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a53">getGlobalVelocity</a>( <a class="code" href="SoccerTypes_8h.html#a240a24">OBJECT_BALL</a> );00280   <font class="keywordtype">double</font>      dPower     = <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a144">getKickPowerForSpeed</a>( vecShoot.<a class="code" href="classVecPosition.html#a32">getMagnitude</a>() );00281   <a class="code" href="Geometry_8h.html#a2">AngDeg</a>      angActual  = vecShoot.<a class="code" href="classVecPosition.html#a33">getDirection</a>() - angBody;00282               angActual  = <a class="code" href="classVecPosition.html#d1">VecPosition::normalizeAngle</a>( angActual );00283 00284   <font class="keywordflow">if</font>( dPower &gt; <a class="code" href="classBasicPlayer.html#n2">SS</a>-&gt;<a class="code" href="classServerSettings.html#a94">getMaxPower</a>() )00285   {00286     Log.log( 500, <font class="stringliteral">"kickBallCloseToBody: cannot compensate for ball speed, freeze"</font>);00287     Log.log( 101, <font class="stringliteral">"kickBallCloseToBody: cannot compensate for ball speed, freeze"</font>);    00288     <font class="keywordflow">return</font> <a class="code" href="classBasicPlayer.html#b6">freezeBall</a>();00289   }00290   <font class="keywordflow">else</font>00291     Log.log( 101, <font class="stringliteral">"(kick %f %f), vecDesired (%f,%f)"</font>, dPower, angActual,00292     vecDesired.<a class="code" href="classVecPosition.html#a26">getX</a>(), vecDesired.<a class="code" href="classVecPosition.html#a28">getY</a>() );00293   <font class="keywordflow">return</font> <a class="code" href="classSoccerCommand.html">SoccerCommand</a>( <a class="code" href="SoccerTypes_8h.html#a247a186">CMD_KICK</a>, dPower, angActual );00294 }00295 <a name="l00314"></a><a class="code" href="classBasicPlayer.html#b8">00314</a> <a class="code" href="classSoccerCommand.html">SoccerCommand</a> <a class="code" href="classBasicPlayer.html#b8">BasicPlayer::accelerateBallToVelocity</a>( <a class="code" href="classVecPosition.html">VecPosition</a> velDes )00315 {00316   <a class="code" href="Geometry_8h.html#a2">AngDeg</a>      angBody  = <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a38">getAgentGlobalBodyAngle</a>();00317   <a class="code" href="classVecPosition.html">VecPosition</a> velBall  = <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a53">getGlobalVelocity</a>( <a class="code" href="SoccerTypes_8h.html#a240a24">OBJECT_BALL</a> );00318   <a class="code" href="classVecPosition.html">VecPosition</a> accDes   = velDes - velBall;00319   <font class="keywordtype">double</font>      dPower;00320   <font class="keywordtype">double</font>      angActual;00321 00322   <font class="comment">// if acceleration can be reached, create shooting vector</font>00323   <font class="keywordflow">if</font>( accDes.<a class="code" href="classVecPosition.html#a32">getMagnitude</a>() &lt; <a class="code" href="classBasicPlayer.html#n2">SS</a>-&gt;<a class="code" href="classServerSettings.html#a68">getBallAccelMax</a>() )00324   {00325     dPower    = <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a144">getKickPowerForSpeed</a>   ( accDes.<a class="code" href="classVecPosition.html#a32">getMagnitude</a>() );00326     angActual = <a class="code" href="classVecPosition.html#d1">VecPosition::normalizeAngle</a>( accDes.<a class="code" href="classVecPosition.html#a33">getDirection</a>() - angBody );00327     <font class="keywordflow">if</font>( dPower &lt;= <a class="code" href="classBasicPlayer.html#n2">SS</a>-&gt;<a class="code" href="classServerSettings.html#a94">getMaxPower</a>() )00328       <font class="keywordflow">return</font> <a class="code" href="classSoccerCommand.html">SoccerCommand</a>( <a class="code" href="SoccerTypes_8h.html#a247a186">CMD_KICK</a>, dPower, angActual );00329   }00330 00331   <font class="comment">// else determine vector that is in direction 'velDes' (magnitude is lower)</font>00332          dPower    = <a class="code" href="classBasicPlayer.html#n2">SS</a>-&gt;<a class="code" href="classServerSettings.html#a94">getMaxPower</a>();00333   <font class="keywordtype">double</font> dSpeed    = <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a143">getActualKickPowerRate</a>() * dPower;00334   <font class="keywordtype">double</font> tmp       = velBall.<a class="code" href="classVecPosition.html#a47">rotate</a>(-velDes.<a class="code" href="classVecPosition.html#a33">getDirection</a>()).<a class="code" href="classVecPosition.html#a28">getY</a>();00335          angActual = velDes.<a class="code" href="classVecPosition.html#a33">getDirection</a>() - <a class="code" href="Geometry_8h.html#a11">asinDeg</a>( tmp / dSpeed );00336          angActual = <a class="code" href="classVecPosition.html#d1">VecPosition::normalizeAngle</a>( angActual - angBody );00337 00338   <font class="keywordflow">return</font> <a class="code" href="classSoccerCommand.html">SoccerCommand</a>( <a class="code" href="SoccerTypes_8h.html#a247a186">CMD_KICK</a>, dPower, angActual );00339 }00340 <a name="l00349"></a><a class="code" href="classBasicPlayer.html#b9">00349</a> <a class="code" href="classSoccerCommand.html">SoccerCommand</a> <a class="code" href="classBasicPlayer.html#b9">BasicPlayer::catchBall</a>()00350 {00351   <font class="comment">// true means returned angle is relative to body instead of neck</font>00352   <font class="keywordflow">return</font> <a class="code" href="classSoccerCommand.html">SoccerCommand</a>( <a class="code" href="SoccerTypes_8h.html#a247a185">CMD_CATCH</a>, <a class="code" href="classBasicPlayer.html#n1">WM</a>-&gt;<a class="code" href="classWorldModel.html#a56">getRelativeAngle</a>( <a class="code" href="SoccerTypes_8h.html#a240a24">OBJECT_BALL</a>, <font class="keyword">true</font> ));00353 }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?