production.clp に関する考察

  • 機内で分かったことメモ
  • 寝る前のタスクメモ
  • 起きてからのメモ
  • 一周回ってわかったこと
  • 答え合わせ


機内で分かったことメモ

1. cfg/conf.d/navgraph-generator.yaml の save-to-file/filename は,navgraph が上書きするので,navgraph-generated.yaml を指定すること(navgraph-basis.yaml は指定しちゃだめ!)

2. exploration phase から production phase に変わる時に,ノードを全て削除してから,cfg/conf.d/navgraph-generator.yaml のnavgraph-generator-mps/base-graph を読み込んでいるっぽい.
その際に,only-copy-properties が最初に書いているノードは,既存のノードデータに上書きします.
ところが,ノードを全削除しているので,「そんなノード見つからないよ」エラーが出るわけです.

3. navgraph_generator_mps_thread.cpp を修正して,「production-properties」というプロパティを追加してみました.新規でノードを追加します.
ただ,これで追加すると,チームカラーに対応した新しいノードも追加されます(追加ノードの座標の計算理由がいまいち不明)
例えばC-BS の情報に対して,C-BS と,C-C-BSを追加します.
なんか,使い方を間違えている気がします…

4. あと,production.clp で使っていた get_product_from.lua ですが,これはノード名に対して「-I」または「-O」を追加したノード名の場所に移動するlua です.
そのため,C-BS を指定するときには,C-BS-I もしくは C-BS-O のノードがないと,invalid point になります.

5. そこで浮かんだ疑問ですが,Production Phase のRefBox から受け取るMPS の情報って,どこまでありましたっけ?
角度情報って,含まれていました?
もしくは,360度ではなく180度までとか?
MPSの座標は,ゾーン名から獲得できますが,もしかして向きがわからないので,tag を見た時にようやく -I と -O のポイントが分かるのではないでしょうか?
つまり,Production Phase に入った瞬間だと,MPS 情報をばら撒けないのでは?
=> だから,POI の警告がでる.
(エラーでないとこが,ミソです.普通ならエラーで止めるべき事案だと思います)

というわけで、もしかするとPOIは無視して進めるべき事案な気がします。
かわりに、C-BSに行くのではなく、MPS以外のポイント名で移動させないといけないのかもしれません。


寝る前のタスクメモ
1. globals.clp の発火の確認コードのcommit
2. task-lock で,task をかぶらないようにする
(ただし,現段階でMPSのロックは行っているはずなので,優先順位を下げても良いはず)
3. オーダー処理
(これは,タスクのロックで実現するのが良い方法)

4. 市川君に聴講してきて欲しいリスト作成
5. You, * 考える
6. 明日のゼミを考える


起きてからのメモ

Production Phase に入ったときに,RefBox からの情報を使ってMPS の情報を更新したい.

  • ポイントの追加は,src/plugins/navgraph-generator-mps/navgraph_generator_mps_thread.cpp だから,ここで情報を受け取って追加?
    → refbox の情報を受け取っているのはCLIPS っぽい.
  • net.clp に ?pf <- (protobuf-msg (type "llsf_msgs.MachineInfo") (ptr ?p)) を追加?
    → 発火しない….
  • worldmodel.clp にそのもの発見.wm-recv-MachineInfo を確認.
    → printout を有効にしても現れず
  • cfg/conf.d/clips-protobuf.yaml にて,unwatch-facts: [protobuf-msg] として除外されていました.
    → コメントアウトしたら,printout の中身が表示されるようになりました.
  • Production Phase で,refbox は,位置,向き情報をアナウンスしていませんでした.
    → 今ここ
09:30:09.022433 CLIPS (agent): update zone info C-CS1 at Z3 (NOT-SET, NOT-SET) (NOT-SET)
09:30:09.022519 CLIPS-Protobuf: Field x of llsf_msgs.Pose2D not set
09:30:09.022602 CLIPS-Protobuf: Field y of llsf_msgs.Pose2D not set
09:30:09.024014 CLIPS-Protobuf: Field ori of llsf_msgs.Pose2D not set

zone 情報のみの通知です.
おそらく位置と向きは,昔のパックを使っていたころの名残りです.
そのため,Production 時にも,tag を見て表裏の判別と角度の推測が,必要になるっぽいです.
Production Phase 開始時に,navgraph のポイントばら撒きは,不可です.
Carologistics は,Exploration Phase にそれらの情報を集めて利用しています.
Simulation League も,結局Exploration Phase を動かさないといけないっぽいです.

—-
一周回ってわかったこと

なんとか,強引にばらまけないかなぁとnavgraph.clp を見ていたら,
なんとそのものずばりを見つけました.

(defrule navgraph-sim-add-found-tags-when-added-by-ground-truth
  "When the gazsim-navgraph-generator plugin is used to add the navgraph points to test production without exploration, we have to add the found-tags"

「シミュレーターを使う時に,exploration phase 無しproduction phase を試すために,navgraph の点を追加するためにgazsim-navgraph-generator plugin を使う時,found-tags を追加しないといけません」とのことです.

ちなみに,発火条件の(not (sim-was-in-exploration)) ですが,sim.clp にて,exploration phase に入ったらsim-was-in-exploration が生成されますので,exploration phase に入らずにproduction phase に入ったら,発火するようになっています.

ただ,(navgraph-node (name ?mps-o-str&:(eq ?mps-o-str (str-cat ?mps “-O”)))) が満たしていない感じがします.
調査します.


答え合わせ

  1. navgraph 関係の設定ファイルは,navgraph-basis.yaml でOK です(cfg/conf.d/navgraph.yaml と cfg/conf.d/navgraph-genarator.yaml).
  2. シミュレーターを使う時,Exploration Phase を飛ばしてProduction Phase を指定します.
  3. webview で,gazsim-navgraph-generator plugin をload します(ffplugin だと,ポートの指定がややこしいです)
  4. Production Phase 用のNavgraph 経路が用意されます.
  5. スペースキーを押して,Game State をRunning に変更します.
  6. 試合を楽しんでください.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*