rcssserver バグリスト †Linuxカーネル関連 †Linuxカーネル2.6.xを使用していて,シミュレーション速度が妙に遅い(約2倍になってしまう)場合,OSのアラーム割り込みの間隔が狂っているかもしれない.そんな場合は,カーネル構築時,「Processor type and features」→「Timer frequency」の値を250MHzか1000MHzに変更すると解決する.2006年4月時点のGentoo Linux 2006.0でgenkernelを使ってカーネル構築をすると,何故かTimer frequencyのデフォルト値が100MHzになってしまうようだ. コマンドを複数回処理する?(未確認) †RoboCup2005の試合中、シミュレータの処理ががもたついて動きがかくかくするという現象がしばしば発生していた。どうやら、クライアントからの一回のコマンドを複数回(場合によっては数十回)実行している可能性がある。 コマンドを一行にまとめて送っていないプレイヤクライアントで発生する現象ではないかと睨んでいる。 もちろん、単にクライアント側の問題である可能性もあるので、要調査。 修正済み †オフサイドバグ(rcssserver-11.1.1) (11.1.2で修正) †前半が終了してbefore_kick_offになった瞬間にオフサイドを取られることがある. before_kick_offになったときにオフサイドのフラグがリセットされていないせいだと思うので,全てリセットするように修正が必要. トレーナのsayコマンド (rcssserver-10.0.7) (11.0.0で修正) †トレーナのsayコマンドで送信できるメッセージ長が,say_msg_size(=10)に制限されてしまっている(netif.C内のCoach::parse_command ( )を参照).say_coach_msg_size(=512)の誤りと思われる. 実用上は特に問題無いので,直す必要は無いかもしれない. 64bit環境 (11.0.0で修正) †モニタのプロトコルに致命的な欠陥があり,64bit環境ではrcssmonitorが物体を正しく描画できない. ログファイルのフォーマットもモニタプロトコルと同一であるため,ログ再生においても同様の現象が起こる. これはプロトコルの問題なので,rcssmonitorに限らず,全ての互換モニタプログラムで発生する問題である. 現状のフォーマットを維持することを優先するなら,フィルタとなるプロキシツールなどを作るのが手っ取り早いだろう. スペースを含むteam_[lr]_startが機能しない(11.0.0で修正) †コマンドラインオプションでチーム起動コマンドを指定した場合、そのコマンドにスペースが含まれていると、スペースが改行として処理されてしまう。[1214746]で報告済み。 以下の書き方を試してくれと書かれてスレッドがcloseされてしまったが、これでも同じなんじゃー。頼むから自分でもテストしてみてください。 TEAM_L_START="server::team_l_start = '/home/client/tokyotech/start /home/client/tokyotech localhost localhost localhost'" TEAM_R_START="server::team_r_start = '/home/client/yowai/start /home/client/yowai localhost localhost localhost'" auto_mode使用時、延長戦とペナルティキックが行われない (11.0.0で修正) †rcssserver-10.0.7/src/field.CでServerParam::instance().autoMode()の周辺を見ると原因が判明。nr_normal_halfsとnr_extra_halfsが考慮されてなかった。以下のパッチで修正されるはず。 --- src/field.C.org 2005-08-05 02:37:01.000000000 +0900 +++ src/field.C 2005-08-05 02:40:22.000000000 +0900 @@ -3450,8 +3450,11 @@ if( ServerParam::instance().autoMode() ) { - if( mode == PM_BeforeKickOff - && time < ServerParam::instance().halfTime() * 2) + if( mode == PM_BeforeKickOff + && time < ( ServerParam::instance().halfTime() + * ( ServerParam::instance().nr_normal_halfs + + ServerParam::instance().nr_extra_halfs ) ) + ) { if( M_remote_players.size() == 22 || time > 0 ) { @@ -3516,8 +3519,7 @@ if( ServerParam::instance().autoMode() ) { - if( time >= ServerParam::instance().halfTime() * - ServerParam::instance().nr_normal_halfs ) + if( mode == PM_TimeOver ) { if( M_game_over_wait == ServerParam::instance().gameOverWait() ) std::cout << "Waiting after end of match\n"; オフラインコーチのhearフォーマット (11.0.0で修正) †オフラインコーチが受け取るhearメッセージのフォーマットに誤りがある。 (hear Time Sender Message) というフォーマットで送られるはずが、 (hear Sender Time Message) というフォーマットで送られてくる。 バージョン6までのオフラインコーチのhearメッセージは下の方であったが、バージョン7からは上の方に変更されたことになっている。 本来であれば、最初のクライアント接続時にクライアントのバージョンを指定していれば、そのバージョンに応じたフォーマットでメッセージが送られてこなければならない。 しかし、seriarizercoachstdv7.ccでオーバーライドするはずの部分がseriarizercoachstdv1.ccからコピペしただけになっているため、クライアントのバージョンに関わらず古いフォーマットが送られるようになってしまっている。 この問題を修正するには、seriarizercoachstdv7.ccの該当部分を書き換えればよい。 half_timeのデフォルト値 †~/.rcssserver/server.conf に書き出される server::half_time の値が30になっている。 300が本来の値なので、サーバのインストール直後にまず最初に修正しなければならない。 このバグはrcssserver-10.0.2で修正された。 freekick_fault関連 †freekickサイクルがキャンセルされる †ヘテロプレイヤがfreekick_faultを犯すと、シミュレーションカウント再開後のfreekickサイクルがキャンセルされ、すぐにplay_onになってしまう。 原因は、ヘテロプレイヤのキックノイズ処理と審判によるfreekick_faultチェック処理の適用順序のミス。 9.4.5では、player.ccのkick()とtackle()の関数内で以下の順番で処理が行われている。 1. キック(タックル)による加速度をボールに追加 2. 審判がfreekick_faultをチェック freekick_faultの場合、ボールの速度を0にして現在位置に固定。 続いて、プレイモードを変更 3. キックノイズによる速度をボールに追加 よって、freekick_faultのフリーキックためにボールを固定したはずであるのに、キックノイズ分の速度でボールが動き続けることになる。この現象は、キックノイズの存在しないデフォルトプレイヤでは発生しない。 freekickモードからplay_onモードへ切り替わったかどうかの判断はボールの速度が0か否かで行われているため、freekickサイクルが取られることなくplay_onに移行していたというわけ。 この問題を修正するには、2と3の順番を入れ替えるだけでよい。
freekick_faultが取られない †ルールでは、キックインやコーナーキックを含む全てのフリーキックのキッカーは、最初のキック後にダッシュを間にはさんで再びキックを行うことは出来ないことになっている。すなわち、フリーキックからの直接のドリブルは禁止されている。これがfreekick_faultとして取られる反則である。 しかし、キッカーがキック後にボールと衝突すると、審判モジュール内で最後にボールに触れたプレイヤのチェックがリセットされてしまう。 つまり、キッカーが意図的にボールと衝突すると、freekick_faultが取られず、そのままドリブルで移動することが可能になっている。 というわけで、ルール上は反則だが審判が見逃すという状態。 ちなみに、間接フリーキック(indirect_freekick)も衝突によってリセットされてしまう。 間接フリーキックから直接ゴールを決めることができるというあり得ないことが起きてしまうため、catch_fault後のindirect_freekickが極めて危険になっている(キーパーがボールを挟んでゴールの反対側に飛ばされていることもあるため)。 referee.cc内で、FreeKickRef::ballTouched()を修正することでこの問題に対処できる。
slow_down_factorがhalf_timeに影響 †http://sourceforge.net/tracker/index.php?func=detail&aid=800540&group_id=24184&atid=380760 で報告されているバグ。 slow_donw_factorの値に応じて、half_timeの長さが変わってしまう。 上記フォーラムでパッチもどきが公開されているので、それに従って修正を加えれば直る。 このバグはrcssserver-10.0.0で修正された。
|