• [librcsc] 1サイクル内に送信できるteam_graphicコマンドの数を制限. (akiyama) 02:37:05
  • [soccerwindow2] チームロゴの更新処理を修正. (akiyama) 02:37:05

同時に送るteam_graphicコマンドの数が多すぎると,モニタ側(というよりQtの問題?)の受信バッファがあふれて情報が欠落してしまうようだ. 1サイクルあたり20個ずつ程度なら問題無さそうなので,ライブラリ側で制限を設けることにした.

  • [soccerwindow2] fedit: データインデクスの自動選択, 初期ボール位置のオプション化 (akiyama) 16:33:49

ボールをドラッグで移動させたときに,既存の教師データに近づけると自動的にくっついて,そのデータのインデックスが選択されるようにした.

下羅さんからの要望により,コマンドラインオプションに'--initial-ball-pos'を用意して,フォーメーションデータをロードしたときの初期ボール位置を指定できるようにした.

  • [soccerwindow2] Qt3: QSocketDevide::setReceiveBufferSize() (akiyama) 17:10:55

受信バッファのサイズを変更できる関数があったので,8192*256をセットしてみたら256回のteam_graphicメッセージを捌けるようになった.

しかし,Qt4の方ではうまくいかなかった.ドキュメントを読んでみると,同等の関数としてQAbstractSocket::setReadBufferSize()が用意されているものの,QTcpSocketにのみ効果があって,QUdpSocketには意味が無いとのこと. こりゃあ,モニタプロトコルをテキストベースにして,無駄な情報を減らす努力をした方が良さそうだ.あるいは,サーバ側をTCP対応にするか.

synch_mode使用時にたまに情報が飛んでしまうのもバッファサイズが足りないことが原因なので,今回の修正によってQt3バージョンに関してはsynch_modeの問題も改善されたと思う. 問題はQt4だ.

  • [soccerwindow2][メモ] ソケットのバッファサイズ (akiyama) 17:41:52

Qt3のQSocketDevieceの(Linuxでの) デフォルトバッファサイズ= 108544 バイト

バージョン2のモニタプロトコルの一回の通信量 sizeof(dispinfo_t2) = 2056 バイト

108544 / 2056 = 52.79377...

よって,サーバから同時に送信されたメッセージは,最大で52個までしか処理できない.

team_graphicメッセージは最大で256個送られるので,ソケットのバッファサイズは,最低

2056 * 256 = 526336

バイトを確保しなければならない.

しかし,QSocketDevice::setReceiveBufferSize() でサイズ指定しても, 最大で 262142 バイトしか確保できないようだ.

262142 / 2056 = 127.50097...

なので,127個のメッセージしか同時に処理できないかもしれない.

やはり,team_graphicコマンドは分割送信する方が無難だろう. synch_mode実行時にも,モニタがつながっているときにはシミュレーション速度の制限が必要かもしれない. そして,プロトコルをテキスト化 + TCP対応 の両方を実装して,サーバ側から根本的に対応しないといけないな.

  • [soccerwindow2] fedit: 間次のデータ操作の不具合を修正 (akiyama) 18:35:11

データリスト末尾のデータを操作できなくなってしまっていたので,修正.

  • [soccerwindow2] 自動イメージ保存モード (akiyama) 23:16:01

ログに含まれる全データを画像ファイルに保存し,自動的に終了するモードを作った. 保存先ディレクトリ,ファイル名のプレフィックス,画像サイズ,画像のフォーマットをコマンドラインオプションで指定できる. これで,シェルスクリプトで複数のログファイルを一括変換することが可能になった.

後は,ゴールシーンだけを自動選択するモードなんかが欲しいな.


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