Fawkes とllsf-refbox との接続

refbox のplugin があったけど,どうやらSPLやMSL用っぽい.
いったいどこで,refbox とやりとりしているのでしょうか.

追いかけてみましょうの記録です.

まず,refbox そのものとのやりとりの場所が見つからないので,
gazebo 含めてrefbox を扱っているぽいところから探します.

refbox.log が ~/fawkes-robotino/bin に生成されることから,
~/llsf-refbox ではなく,~/fawkes-robotino 側で,
何かrefbox を扱っているのだろうと推測できます.

refbox.log をgrep してみたところ,

wataru@fedoraMini:~/fawkes-robotino$ grep "refbox.log" *  -R
bin/gazsim-get-refbox-summary.bash:TOTAL_LINES=$(wc -l refbox.log | sed s/.refbox.log//)
etc/scripts/gazsim-get-refbox-summary.bash:TOTAL_LINES=$(wc -l refbox.log | sed s/.refbox.log//)
Binary file plugins/gazsim-llsf-statistics.so matches
Binary file src/plugins/gazebo/gazsim-llsf-statistics/.objs_fawkes/gazsim_llsf_statistics_thread.o matches
src/plugins/gazebo/gazsim-llsf-statistics/gazsim_llsf_statistics_thread.cpp:    std::string refbox_log_file = replay_ + "/refbox.log";
src/plugins/gazebo/gazsim-llsf-statistics/gazsim_llsf_statistics_thread.cpp:    std::string command = StringConversions::resolve_path(config->get_string("/gazsim/llsf-statistics/get-refbox-summary-script")) + " " + refbox_log_file;

とのことです.

~/fawkes-robotino/src/plugins/gazebo/gazsim-llsf-statistics/gazsim_llsf_statistics_thread.cpp がポイントですね.
これ自身は,mongo DB を使ったログの記録のプログラムっぽいですが,中を見ていくと次のようなコードがあります.

if(msg->phase() == llsf_msgs::GameState::EXPLORATION)

見覚えのあるコードが出てきました.
refbox との通信の時に,こんなん書きましたね.

とすると,以下の2つがポイントです.
1)msg をどこで手に入れているか
2)llsf_msgs をどこで定義しているか

まず,1)ですが,msg は,on_game_state_msg の引数なので,その関数を呼び出しているところを見てみます.

game_state_sub_ = gazebo_world_node->Subscribe(config->get_string("/gazsim/topics/game-state"), &LlsfStatisticsSimThread::on_game_state_msg, this);

ううむ.gazebo_world_node でpublish しているっぽいですね.
とりあえず,おいておきましょう.

次に2)ですが,namespace に含まれていなさそうなので,ヘッダファイルを見ます.
gazsim-llsf-statistics_thread.h を見ると,ありました.

#include <llsf_msgs/GameState.pb.h>

さて,このファイルは,どこにあるのでしょうか.

wataru@fedoraMini:~/fawkes-robotino$ find | grep GameState.pb.h
./src/libs/llsf_msgs/GameState.pb.h

とのことで,予想通りfawkesの下ではなく,fawkes-robotino の下でした.

とすると,少なくとも,ここのディレクトリ(~/fawkes-robotino/src/libs/llsf_msgs)の中のファイルは,
llsf2015 のままだとNGかもしれません.
最新のrefbox のファイルに置き換えるべきですね.

cp ~/llsf-refbox/src/msgs/*.proto .
make

ちなこに,コピーした直後において,以下の相違が確認できています.

wataru@fedoraMini:~/fawkes-robotino/src/libs/llsf_msgs$ svn status
M       GameState.proto
M       MachineCommands.proto
M       MachineInfo.proto
M       OrderInfo.proto

※あー.refbox で検索しても,出てこないわけだ.llsfで検索すべきだったんですね.

で,llsf_msgs を使っているところを探してみると(binary fileとの一致は,除きました),

wataru@fedoraMini:~/fawkes-robotino$ grep llsf_msg * -R | grep -v gazebo | grep -v "src/libs/llsf_msg" | grep -v "src/agents"
fawkes/src/libs/protobuf_comm/qa/Makefile:LIBS_qa_protobuf_comm_server = llsf_protobuf_comm llsf_msgs
fawkes/src/libs/protobuf_comm/qa/Makefile:LIBS_qa_protobuf_comm_client = llsf_protobuf_comm llsf_msgs
fawkes/src/libs/protobuf_comm/qa/Makefile:LIBS_qa_protobuf_comm_peer = llsf_protobuf_comm llsf_msgs
fawkes/src/libs/protobuf_comm/qa/qa_peer.cpp:using namespace llsf_msgs;
fawkes/src/libs/protobuf_comm/qa/qa_client.cpp:using namespace llsf_msgs;
fawkes/src/libs/protobuf_comm/qa/qa_server.cpp://using namespace llsf_msgs;

こいつらですね.
ここでrefboxg と通信していると考えられます.

中のソースを見てみましたが…,
例えば,~/fawkes-robotino/fawkes/src/libs/protobuf_comm/qa/qa_peer.cpp

 peer = new ProtobufBroadcastPeer("192.168.0.255", send_to_port, recv_on_port);

うーむ.fawkes らしくない書き方ですね.
IPアドレスなどを設定ファイルを通さずに,直に書いています.
ポート番号も,ソースに直接書いてあります.

ただ,このqa の部分は,ソースの最初にも書いてあるとおり,test program のようです.
実際,一つ下のMakefile のSUBDIRS に含まれておらず,make の対象外になっています.
# make したら,llsf_protobuf_comm のライブラリが見つからないとエラーがでます.

llsf-refbox のどこかのフォルダを,もっと来ないといけないっぽい感じですねぇ.
もう少し,試行錯誤してみます.

ぼそっ.
でもなぁ,gazebo につなぐときは,ちゃんとrefbox と通信できているんだよなぁ.
だから,やっぱり,構成の変更なしで動くはずだと思うんだけどなぁ.
ちなみに,fawkes-robotino/fawkes/src/plugins/refboxcomm は,
llsf 用ではなく,SPLやMSL 用のrefbox 通信プログラムっぽいです.

なんとなく接続一歩手前まで進んだので,メモ.
fawkes-robotino-src/plugin/tag_vision でmake する.
# pluginのMakefile にtag_vision を追加した方が良さげ.

tag_vision を読み込むと,

22:01:54.518824 stderr: Couldn't find an AF_INET address for []

のエラーか出ます。今後の課題.

laptop 側で,./fawkes -p m-full を実行して,
gazsim-comm と gazsim-llsf-control のプラグインを読み込みます.
そして,gazsim-llsfrbcomm のプラグインを読み込みます.
このとき,RemovePuckFromMachine が見つからないと怒られます.
こいつは,2014の所においてあり,古いルールのままのプログラムっぽいので,
gazsim-llsfrbcomm のソースの方から,該当のG場所を順番に削除します.
~/fawkes-robotino/src/plugins/gazebo/gazsim-llsfrbcomm/gazsim_llsfrbcomm_thread.h

// typedef const boost::shared_ptr<llsf_msgs::PlacePuckUnderMachine const> ConstPlacePuckUnderMachinePtr;
// typedef const boost::shared_ptr<llsf_msgs::RemovePuckFromMachine const> ConstRemovePuckFromMachinePtr;
...
//  void on_puck_place_msg(ConstPlacePuckUnderMachinePtr &msg);
//  void on_puck_remove_msg(ConstRemovePuckFromMachinePtr &msg);

~/fawkes-robotino/src/plugins/gazebo/gazsim-llsfrbcomm/gazsim_llsfrbcomm_thread.cpp

//  place_puck_under_machine_sub_ = gazebo_world_node->Subscribe(config->get_string("/gazsim/topics/place-puck-under-machine"), &GazsimLLSFRbCommThread::on_puck_place_msg, this);
//  remove_puck_under_machine_sub_ = gazebo_world_node->Subscribe(config->get_string("/gazsim/topics/remove-puck-under-machine"), &GazsimLLSFRbCommThread::on_puck_remove_msg, this);

あれっ,どうでもいいけど,fawkes/src/pluginのros は,make の対象外? ← 違う
なんでだろ.とりあえず,make しておこうっと.
# ↑ たぶん,fawkes をmake したときに,ros を入れ損ねていたっぽい.

~/fawkes-robotino/src/libs/protobuff_comm を ~/llsf-refboxのprotobuff_comm と入れ替えて見た.
意味があるかないか,不明….

さて,今まで書き込んできたwordpress の,関連しそうな項目を挙げます.

gazsim の場合,robotino の設定ファイルは,gazsim-configurations/default/robotino1.yaml を参照します.
その中を読むと,

  - !host-specific gazsim-configurations/default/host_robotino_1.yaml

とあります.
gazsim-configurations/default/host_robotino1.yaml の中に.refbox との通信の設定がありました.

    team-name: Carologistics
    robot-name: R-1
    robot-number: 1

    peer-address: 127.0.0.1
    peer-recv-port: 4411
    peer-send-port: 4421
    cyan-recv-port: 4451
    magenta-recv-port: 4461
    cyan-send-port: 4471
    magenta-send-port: 4481

さて,このあたりをキーワードに,プログラムを追いかけてみましょう.

コメントを残す

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

*