worldmodelupdate_8c-source.html
来自「仿真人工智能是指用人工的方法和技术」· HTML 代码 · 共 629 行 · 第 1/5 页
HTML
629 行
00646 <a class="code" href="classWorldModel.html#a33">iterateObjectDone</a>( iIndex);00647 00648 <font class="comment">// update ball for collision with players</font>00649 <a class="code" href="classWorldModel.html#c8">updateBallForCollision</a>();00650 00651 <font class="keywordflow">return</font> <font class="keyword">true</font>;00652 }00653 <a name="l00659"></a><a class="code" href="classWorldModel.html#c5">00659</a> <font class="keywordtype">bool</font> <a class="code" href="classWorldModel.html#c5">WorldModel::updateAgentAndBallAfterSense</a>( )00660 {00661 <font class="comment">// get info from commands from previous cycle (if timestopped current cycle)</font>00662 <font class="keywordtype">bool</font> bProcessedHole = <font class="keyword">false</font>;00663 <font class="keywordtype">bool</font> bBallUpdated = <font class="keyword">false</font>;00664 <a class="code" href="classVecPosition.html">VecPosition</a> pos = <a class="code" href="classWorldModel.html#a43">getAgentGlobalPosition</a>();00665 <a class="code" href="Geometry_8h.html#a2">AngDeg</a> angGlobalNeck = <a class="code" href="classWorldModel.html#a37">getAgentGlobalNeckAngle</a>();00666 <a class="code" href="Geometry_8h.html#a2">AngDeg</a> angGlobalBody = <a class="code" href="classWorldModel.html#a38">getAgentGlobalBodyAngle</a>();00667 <a class="code" href="classStamina.html">Stamina</a> sta = <a class="code" href="classWorldModel.html#a39">getAgentStamina</a>();00668 <a class="code" href="classVecPosition.html">VecPosition</a> vel = <a class="code" href="classWorldModel.html#o14">agentObject</a>.<a class="code" href="classAgentObject.html#a11">getSpeedRelToNeck</a>(); <font class="comment">// !!</font>00669 <a class="code" href="classTime.html">Time</a> time = <a class="code" href="classWorldModel.html#a4">getCurrentTime</a>() - 1 ;00670 00671 <font class="comment">// calculate velocity at end of previous cycle using velocity from current</font>00672 <font class="comment">// cycle. Although we do not know direction yet (this is relative to neck</font>00673 <font class="comment">// which is not yet known), we can use the magnitude to determine travelled</font>00674 <font class="comment">// distance (speed) of the agent</font>00675 <font class="comment">// After neck angle is estimated, we can rotate velocity vector to get</font>00676 <font class="comment">// actual velocity.</font>00677 vel.<a class="code" href="classVecPosition.html#a31">setMagnitude</a>( vel.<a class="code" href="classVecPosition.html#a32">getMagnitude</a>()/<a class="code" href="classWorldModel.html#o0">SS</a>-><a class="code" href="classServerSettings.html#a8">getPlayerDecay</a>() );00678 00679 <font class="comment">// turn_neck is done before other commands, so should be estimated first</font>00680 <font class="keywordtype">int</font> i = (int)<a class="code" href="SoccerTypes_8h.html#a247a183">CMD_TURNNECK</a>;00681 <font class="keywordflow">if</font>( <a class="code" href="classWorldModel.html#o25">performedCommands</a>[i] == <font class="keyword">true</font> && <font class="comment">// turn_neck was performed</font>00682 ( <a class="code" href="classWorldModel.html#o24">queuedCommands</a>[i].<a class="code" href="classSoccerCommand.html#m0">time</a>.<a class="code" href="classTime.html#a3">getTime</a>() == time.<a class="code" href="classTime.html#a3">getTime</a>() || <font class="comment">// no hole</font>00683 <a class="code" href="classWorldModel.html#o24">queuedCommands</a>[i].<a class="code" href="classSoccerCommand.html#m0">time</a>.<a class="code" href="classTime.html#a3">getTime</a>() == time.<a class="code" href="classTime.html#a3">getTime</a>() - 1 ) ) <font class="comment">// hole</font>00684 {00685 00686 <font class="keywordflow">if</font>( <a class="code" href="classWorldModel.html#o24">queuedCommands</a>[i].<a class="code" href="classSoccerCommand.html#m0">time</a>.<a class="code" href="classTime.html#a3">getTime</a>() == time.<a class="code" href="classTime.html#a3">getTime</a>() - 1 &&00687 time.<a class="code" href="classTime.html#a3">getTime</a>() > 0)00688 {00689 bProcessedHole = <font class="keyword">true</font>;00690 <a class="code" href="classWorldModel.html#m0">iNrHoles</a>++;00691 }00692 00693 <a class="code" href="classWorldModel.html#a102">predictStateAfterCommand</a>( <a class="code" href="classWorldModel.html#o24">queuedCommands</a>[i], &pos, &vel, &angGlobalBody,00694 &angGlobalNeck, &sta ) ;00695 <a class="code" href="classWorldModel.html#o24">queuedCommands</a>[i].<a class="code" href="classSoccerCommand.html#m0">time</a>.<a class="code" href="classTime.html#a1">updateTime</a>( -1 );00696 }00697 00698 00699 <font class="comment">// now all the other commands</font>00700 <font class="keywordflow">for</font>( i = 0; i < <a class="code" href="SoccerTypes_8h.html#a5">MAX_COMMANDS</a>; i ++ )00701 {00702 <font class="keywordflow">if</font>( <a class="code" href="classWorldModel.html#o25">performedCommands</a>[i] == <font class="keyword">true</font> && <font class="comment">// sense msg indicates we executed this</font>00703 ( <a class="code" href="classWorldModel.html#o24">queuedCommands</a>[i].<a class="code" href="classSoccerCommand.html#m0">time</a>.<a class="code" href="classTime.html#a3">getTime</a>() == time.<a class="code" href="classTime.html#a3">getTime</a>() || <font class="comment">// no hole</font>00704 <a class="code" href="classWorldModel.html#o24">queuedCommands</a>[i].<a class="code" href="classSoccerCommand.html#m0">time</a>.<a class="code" href="classTime.html#a3">getTime</a>() == time.<a class="code" href="classTime.html#a3">getTime</a>() - 1 ) )<font class="comment">// hole</font>00705 {00706 <font class="keywordflow">if</font>( <a class="code" href="classWorldModel.html#o24">queuedCommands</a>[i].<a class="code" href="classSoccerCommand.html#m0">time</a>.<a class="code" href="classTime.html#a3">getTime</a>() == time.<a class="code" href="classTime.html#a3">getTime</a>() - 1 &&00707 bProcessedHole == <font class="keyword">false</font> && time.<a class="code" href="classTime.html#a3">getTime</a>() > 0 )00708 {00709 bProcessedHole = <font class="keyword">true</font>; <font class="comment">// process hole</font>00710 <a class="code" href="classWorldModel.html#m0">iNrHoles</a>++;00711 }00712 00713 <font class="keywordflow">switch</font>( <a class="code" href="classWorldModel.html#o24">queuedCommands</a>[i].<a class="code" href="classSoccerCommand.html#m1">commandType</a> )00714 {00715 <font class="keywordflow">case</font> <a class="code" href="SoccerTypes_8h.html#a247a186">CMD_KICK</a>:00716 <a class="code" href="classWorldModel.html#c6">updateBallAfterKick</a>( <a class="code" href="classWorldModel.html#o24">queuedCommands</a>[i].dPower,00717 <a class="code" href="classWorldModel.html#o24">queuedCommands</a>[i].dAngle);00718 bBallUpdated = <font class="keyword">true</font>; <font class="comment">// should not be updated later on. </font>00719 <font class="keywordflow">break</font>;00720 <font class="keywordflow">case</font> <a class="code" href="SoccerTypes_8h.html#a247a182">CMD_TURN</a>:00721 <a class="code" href="classWorldModel.html#a102">predictStateAfterCommand</a>( <a class="code" href="classWorldModel.html#o24">queuedCommands</a>[i], &pos, &vel,00722 &angGlobalBody, &angGlobalNeck, &sta ); 00723 <font class="keywordflow">break</font>;00724 <font class="keywordflow">case</font> <a class="code" href="SoccerTypes_8h.html#a247a187">CMD_MOVE</a>:00725 pos.<a class="code" href="classVecPosition.html#a29">setVecPosition</a>( <a class="code" href="classWorldModel.html#o24">queuedCommands</a>[i].dX, <a class="code" href="classWorldModel.html#o24">queuedCommands</a>[i].dY );00726 <a class="code" href="classWorldModel.html#c13">initParticlesAgent</a>( pos );00727 <font class="keywordflow">break</font>;00728 <font class="keywordflow">case</font> <a class="code" href="SoccerTypes_8h.html#a247a181">CMD_DASH</a>: <font class="comment">// not necessary to do anything, since resulting</font>00729 <font class="comment">// velocity is already available from sense, this</font>00730 <font class="comment">// velocity can be used to update global position</font>00731 <font class="keywordflow">break</font>;00732 <font class="keywordflow">case</font> <a class="code" href="SoccerTypes_8h.html#a247a183">CMD_TURNNECK</a>: <font class="comment">// already handled before this loop</font>00733 <font class="keywordflow">default</font>:00734 <font class="keywordflow">break</font>;00735 }00736 <a class="code" href="classWorldModel.html#o24">queuedCommands</a>[i].<a class="code" href="classSoccerCommand.html#m0">time</a>.<a class="code" href="classTime.html#a1">updateTime</a>( -1 ); <font class="comment">// processed</font>00737 }00738 }00739 00740 00741 <font class="comment">// reset pos and vel information to previous cycle (since can be changed in</font>00742 <font class="comment">// predictStateAfterCommand)</font>00743 vel = <a class="code" href="classWorldModel.html#o14">agentObject</a>.<a class="code" href="classAgentObject.html#a11">getSpeedRelToNeck</a>();00744 pos = <a class="code" href="classWorldModel.html#a43">getAgentGlobalPosition</a>();00745 vel.<a class="code" href="classVecPosition.html#a31">setMagnitude</a>( vel.<a class="code" href="classVecPosition.html#a32">getMagnitude</a>()/<a class="code" href="classWorldModel.html#o0">SS</a>-><a class="code" href="classServerSettings.html#a8">getPlayerDecay</a>() );00746 vel.<a class="code" href="classVecPosition.html#a47">rotate</a>( angGlobalNeck ); <font class="comment">// rotate velocity using information about neck</font>00747 00748 <font class="comment">// update particles that keep track of position of agent using this vel</font>00749 <a class="code" href="classWorldModel.html#c16">updateParticlesAgent</a>( vel, <font class="keyword">true</font> );00750 00751 <font class="comment">// predict the global position using the calculated velocity at the end of</font>00752 <font class="comment">// the previous cycle (power and direction can thus both be set to zero).</font>00753 <font class="comment">// There is just little noise in this perception, so gives a good estimate</font>00754 <a class="code" href="classWorldModel.html#a105">predictStateAfterDash</a>( 0.0, &pos, &vel, &sta, 0 );00755 00756 <font class="comment">// update ball if it hasn't been done yet</font>00757 <font class="keywordflow">if</font>( !bBallUpdated )00758 {00759 <a class="code" href="classWorldModel.html#c7">updateDynamicObjectForNextCycle</a>( <a class="code" href="SoccerTypes_8h.html#a240a24">OBJECT_BALL</a>, 1 );00760 <a class="code" href="classWorldModel.html#c25">updateParticlesBall</a>( <a class="code" href="classWorldModel.html#o22">particlesPosBall</a>, <a class="code" href="classWorldModel.html#o23">particlesVelBall</a>, <a class="code" href="classWorldModel.html#r1">iNrParticlesBall</a>, 0, 0 ); 00761 }00762 00763 <font class="comment">// body angle is not set since relative angle to neck is already contained</font>00764 <font class="comment">// in sense_body message, same holds for stamina</font>00765 <a class="code" href="classWorldModel.html#o14">agentObject</a>.<a class="code" href="classObject.html#a12">setGlobalPosition</a> ( pos, <a class="code" href="classWorldModel.html#a4">getCurrentTime</a>() );00766 <a class="code" href="classWorldModel.html#o14">agentObject</a>.<a class="code" href="classDynamicObject.html#a7">setGlobalVelocity</a> ( vel, <a class="code" href="classWorldModel.html#a4">getCurrentTime</a>() );00767 <a class="code" href="classWorldModel.html#o14">agentObject</a>.<a class="code" href="classAgentObject.html#a13">setGlobalNeckAngle</a>( angGlobalNeck );00768 00769 00770 <font class="keywordflow">return</font> <font class="keyword">true</font>;00771 }00772 <a name="l00781"></a><a class="code" href="classWorldModel.html#c6">00781</a> <font class="keywordtype">bool</font> <a class="code" href="classWorldModel.html#c6">WorldModel::updateBallAfterKick</a>( <font class="keywordtype">double</font> dPower, <a class="code" href="Geometry_8h.html#a2">AngDeg</a> ang )00782 {00783 <font class="keywor
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?