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”)))) が満たしていない感じがします.
調査します.
—
答え合わせ
- navgraph 関係の設定ファイルは,navgraph-basis.yaml でOK です(cfg/conf.d/navgraph.yaml と cfg/conf.d/navgraph-genarator.yaml).
- シミュレーターを使う時,Exploration Phase を飛ばしてProduction Phase を指定します.
- webview で,gazsim-navgraph-generator plugin をload します(ffplugin だと,ポートの指定がややこしいです)
- Production Phase 用のNavgraph 経路が用意されます.
- スペースキーを押して,Game State をRunning に変更します.
- 試合を楽しんでください.
コメントを残す