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
さて,このあたりをキーワードに,プログラムを追いかけてみましょう.
コメントを残す