• [rcssserver] キックのノイズモデル変更 (akiyama) 11:59:27

どうにも不自然だったキックのノイズモデルを完全に書き変えた.

バージョン11までのノイズ生成コードは以下のとおり.

double maxrnd = M_kick_rand * power / ServerParam::instance().maxPower();
PVector kick_noise( drand( -maxrnd, maxrnd ),
                                    drand( -maxrnd, maxrnd ) );
accel += kick_noise;

XY成分にそれぞれ一様乱数のノイズを与えるという変なモデルだった.

これを以下のように変更:

double power_rand = M_kick_rand * power / ServerParam::instance().maxPower();
double speed_rand = ( M_kick_rand
                                          * M_stadium.ball().vel().r()
                                          / ServerParam::instance().ballDecay()
                                          / ServerParam::instance().ballSpeedMax() );
double dir_rand = M_PI * ( power_rand + speed_rand );

double power_noise = drand( -power_rand, power_rand );
double dir_noise = drand( -dir_rand, dir_rand );

accel *= ( 1.0 + power_noise );
accel.rotate( dir_noise );

ノイズの与え方が直交座標系から極座標系へと完全に変更され,ノイズが加速度の大きさと方向へ与えられるようになった.

更に,現在のボールのスピードの大きさが加速度の方向のノイズを大きくする. ボールが速ければ速いほど正確にコントロールするのが難しくなる方が自然だろう.

これで,デフォルトタイプのkick_randを0.05にすると結構いい感じだと思う.

  • [agent2d] ヘテロの割り当てアルゴリズム再実装 (akiyama) 16:19:24

プレイヤタイプの数や割り当て可能数の設定が変更されても動的に対応できるように作り直した.

  • [rcssserver] キックのノイズモデル調整 (akiyama) 22:54:50

昼間のだとキックミスが多すぎるようなので,角度のノイズにパワーを考慮しないようにしてみた.

double dir_rand = M_PI * speed_rand;

しかし,これだとまたかなり正確になってしまっているように思える.それに,制止したボールを全力で蹴った場合にノイズが入らないことになってしまう. 難しい….

後,やっぱり,stamina_max か stamina_inc_max を上げた方がいい気がするなぁ. 今のパラメータでは,ダイナミックなポジショニングを行うためのスタミナが絶対に足りない.


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-03-14 (月) 14:51:37 (1338d)
SourceForge.JP
Creative Commons License
RoboCup tools by Hidehisa Akiyama is licensed under a Creative Commons 表示-非営利 2.1 日本 License.