change_viewコマンドについて

できること

  • プレイヤのView Mode(View WidthとView Quality)を変更
  • 1サイクル中に何度でも実行可能
  • コマンドがサーバに到達すると、すぐに効果を発揮(これは他の多くの動作コマンドとは大きく異なる特徴)

作用

視覚センサモデルで書いたとおり、rcssserverがseeメッセージ送信する機会は300ミリ秒間に8回ある。 rcssserverはこの8回全てにおいてseeメッセージを送信すべきか否かのチェックを全プレイヤに対して行っている。 では、各プレイヤにseeメッセージを送信するか否かのチェックはどのようにやっているか?

rcssserver内部のPlayerオブジェクトは、それぞれがseeメッセージ送信チェック用のカウンタを持っている。 このカウンタはseeメッセージ送信機会ごとに(かつ、その時のみに)インクリメントされ、その値が規定値以上であればseeメッセージが送信されるようになっている。 そして、seeメッセージが送信されると、カウンタは0にリセットされる。

この規定回数は現在のView Modeに応じて決められる。 具体的には以下のとおり。

View Mode規定回数
narrow, low1
narrow, high2
normal, low2
normal, high (デフォルト)4
wide, low4
wide, high8

モードが(narrow, low)だと規定回数は1なので、送信機会ごとに送信されることになる。 計算方法は想像つくと思うので省略。 詳細はrcssserver/src/player.cc内のPlayer::change_view()を参照してもらいたい。

重要なのは、change_viewコマンドがrcssserverに受け付けられてもseeの送信チェック用カウンタに変更は加えられない、という点である。 つまり、change_viewコマンドは次のseeメッセージが送信されるまでに実行すれば良い。 具体例は以下の図を参照。

まずは、(narrow, high)を維持する場合のカウンタ更新の様子。

change_view_example.png

(narrow, high)から(normal, high)へ変更する場合は以下のようになる。

change_view_narrow_normal1.png

change_viewコマンドの送信タイミングが少しずれても、seeメッセージ送信処理の前にコマンドが到達していれば、結果は同じ。

change_view_narrow_normal2.png

今度は(normal, high)から(narrow, high)へ変更する場合。 see受信直後にchange_viewを実行すると以下のようになる。

change_view_normal_narrow1.png

このタイミングをずらしていくと以下のようになる。

change_view_normal_narrow2.png

change_view_normal_narrow3.png

change_view_normal_narrow4.png

(narrow, high)モードでのカウンタ規定回数は2なので、最後の2つではカウンタが強制的にリセットされている。 これは、すぐにseeメッセージが得られはしたが、seeを得る機会を減らしてしまっている、ということを意味する。 seeメッセージ受信直後に急いでchange_viewしなければならないのはView Modeが(narrow, low)の時くらいだが、早めに実行しておいた方がいいのも確かである。

問題点

  • コマンド送信タイミングを誤ると、希望どおりの結果が得られない。
    • 次のseeメッセージ送信処理の前にchange_viewコマンドがサーバに受信されなければならない。
    • しかも、コマンドのパケットのロストや遅延が発生するかもしれない。クライアント側は正しいタイミングで送ったつもりでも、期待するタイミングでサーバに届かない可能性がある。
  • コマンドがサーバで機能したかどうかをすぐに確認できない。
    • sense_bodyメッセージにはコマンド実行回数が含まれており、そこに含まれる回数をチェックすることで本当に実行されたかどうかは確認できる。 しかし、sense_bodyメッセージはサイクル開始直後か、自分でsense_bodyコマンドを実行しなければ得られない。 すなわち、コマンド送信直後、クライアント側は「送信した」ということしか知ることができない。 change_viewコマンドはすぐに効果を発揮し、かつサイクル中に何度でも実行できるため、コマンド到達をすぐに確認したければsense_bodyコマンドをいちいち送信しなければならない。 これは非現実的な対応であり、実行すべきではない。 現状では、コマンドが正しくかつ遅延無く到達することを期待するしかない。

添付ファイル: filechange_view_normal_narrow4.png 286件 [詳細] filechange_view_normal_narrow4.sxd 267件 [詳細] filechange_view_normal_narrow3.sxd 269件 [詳細] filechange_view_example.sxd 343件 [詳細] filechange_view_normal_narrow2.sxd 268件 [詳細] filechange_view_narrow_normal2.sxd 292件 [詳細] filechange_view_narrow_normal1.sxd 292件 [詳細] filechange_view_normal_narrow1.png 297件 [詳細] filechange_view_normal_narrow3.png 285件 [詳細] filechange_view_example.png 369件 [詳細] filechange_view_narrow_normal1.png 327件 [詳細] filechange_view_narrow_normal2.png 320件 [詳細] filechange_view_normal_narrow1.sxd 280件 [詳細] filechange_view_normal_narrow2.png 293件 [詳細]

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