このページの内容は既に過去のものとなっています. 参考にはしないでください.



背景と目的

2D/seeの同期で述べているように,従来の2Dサッカーシミュレータでは,視覚情報の受信間隔の調整が難しい問題となっていた. この問題は,エージェントの協調問題解決というサッカーシミュレーション本来の目的から激しく逸脱しており,また,実世界の視覚センサとも全く関連性が無いため,エージェント開発にかかる無駄な労力のひとつとなっていた. ここでは,2Dサッカーシミュレータに新しいViewModeを導入し,change_viewコマンドを駆使した視覚情報の調整を必要無くすることを目的とする.

というわけで,意味無く難しい問題としてチーム開発者を苦しめてきた視覚モデルを改善します.

概要

change_viewとseeメッセージの関連については2D/seeの同期を参照してもらいたい.

現在検討している新しい仕様は以下の通り.

  • プレイヤのViewModeに同期モードを追加
  • change_viewコマンドに同期モード用の新しいオプションを追加
    コマンド例: "(change_view sync high)"
  • 同期モード時:
    • プレイヤは毎サイクルseeメッセージを1回だけ受信する
    • seeメッセージ受信タイミングはサイクル開始後の最初のseeメッセージ受信機会
      サイクル開始直後に受信できるわけでは無い.
    • プレイヤのViewWidthは60度
      ViewQualityがhighの場合,180度で3サイクルに1回,90度で3サイクルに2回,45度で3サイクルに4回のseeメッセージ受信機会がある.よって,3サイクルで180度分の情報が得られれば情報量の不公平さは無くなる.
      定義としては以下になると思う.
      view_width = ServerParam::visangle * ( ServerParam::send_st / ServerParam::sim_st );
  • クライアントバージョン10を導入
    バージョン10以上のプレイヤのみ,同期モードのコマンドが使用でき,sense_bodyでその状態を知ることができるようにする.

作業記録

以降の作業記録は,rctools:開発日誌で行います.

(2005/12/27) rcssserver-10.0.7-syncview & trilearn_base-3.3 パッチ

パッチの当て方は以下の通り:

$ ls
rcssserver-10.0.7/
rcssserver-10.0.7-syncview-20051227.patch
trilearn-syncview.patch
trilearn_base_source-3.3/

このような状態で、

$ patch -p0 < rcssserver-10.0.7
$ patch -p0 < trilearn-syncview.patch

後は通常どおりコンパイルすれば良い。

syncとnormalが混在可能である問題はまだ解決していない。 時間計測するにしても細かいチューニングが必要で、きれいな実装は無理そう。

(2005/12/23) UvA Base用パッチ+現状の問題点

自分のチームだけ対応しても仕方ないので,UvA Baseのための同期viewmodeパッチを作ってみた. 問題無く動いている模様.

現状の問題としては、昨日のサーバ改造内容ではsync viewとnormal viewの混在が可能であることが考えられる。 sync -> normal -> sync -> sync -> normal -> sync -> ... というループが可能になってしまって、3サイクルで180度という情報量を上回ってしまうわけだ。 秋キャンプ中に野田さんに相談してみたら,sync viewでのseeメッセージ送信間隔に時間計測のチェックを導入してはどうかとのアドバイス。 とりあえず、この方針で作ってみよう。

(2005/12/22) 一通り手を入れてみた

以下、変更箇所の列挙。 diffを取ったものではないのでpatchには使用できません。

バージョン10の導入は次回。

  • src/pcombuilder.h:
    • enum VIEW_WIDTH
      + SYNC
  • src/bodysensensor.h:
    • enum width_t
      + W_SYNC
  • src/bodysensor.cc:
    • WIDTH_NAMES[]
      + "sync"
    • BodySensor_v1::data_tのコンストラクタ
      + ( player.vis_angle == player.defangle
      +   ? BodySensor::W_NORMAL
      +   : BodySensor::W_SYNC ) ) ),
  • src/bodysender.cc:
    • BodySenderPlayerV1::sendBodyData()
      + : ( self().vis_angle
            == self().defangle
            ? "normal"
            : "sync" ) ) ) );
  • src/fullstatesender.cc
    • FullStateSenderPlayerV5::sendFullState()
      + : ( self().vis_angle
      +     == self().defangle
      +     ? "normal"
      +     : "sync" ) ) ) );
  • src/player.h
    + bool done_vis_send;
  • src/player.cc
    • Playerのコンストラクタ
      + done_vis_send = false;
    • void Player::send_fullstate_information()
      + const char sync[] = "sync";
      + ...
      +  else if ( vis_angle == defangle )
      +     width = normal;
      +  else
      +     width = sync;
    • void Player::change_view( rcss::pcom::VIEW_WIDTH viewWidth, rcss::pcom::VIEW_QUALITY viewQuality )
      + else if ( viewWidth == rcss::pcom::SYNC ) {
      +   vis_angle = defangle *
      +        ( (double)ServerParam::instance().simStep()
      +          / (double)ServerParam::instance().sendStep() );
      +   vis_send = -1;
      + }
    • void Player::sense_body()
      +   done_vis_send = false;
    • void Player::send_visual_info(void)
      +   done_vis_send = true;
  • src/visual.cc:
    +      if ( self().vis_send < 0 )
    +      {
    +          if ( self().done_vis_send )
    +              return;
    +          resetSendCount();
    +      }
    +      else
  • src/player_command_tok.ll:
    + sync { return RCSS_PCOM_VIEW_WIDTH_SYNC; }
  • src/player_command_parser.yy:
    + %token < rcss:pcom::VIEW_WIDTH > RCSS_PCOM_VIEW_WIDTH_SYNC "sync"
    
    +       | RCSS_PCOM_VIEW_WIDTH_SYNC
    +       {
    +          $$.m_view_w = rcss::pcom::SYNC;
    +       } ;

(2005/10/20) 変更すべき箇所をリストアップ中

bodysensor.h
bodysensor.cc
bodysendor.cc
player.h
player.cc
player_command_parser.yy
player_command_tok.ll
visual.cc

いっぱいあるな.しかも,まだ見落としが多そう.結構大変かも…


添付ファイル: filercssserver-10.0.7-syncview-20051227.patch 886件 [詳細] filetrilearn-syncview.patch 973件 [詳細]

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