function block for RefBox

以前作った,RefBox と通信するView2 のプログラムを更新してView2 のFunction Block にします.

ファイル構成としては,llsf-refbox/bin/llsf-view2-var.sh に変数の中身を出力するとともに,view2send.txt にenum 的な数字で出力しています.
前者は,view2_HOGEHOGE,後者はsendData.HOGEHOGE に保存.

まずは,その頃とのdiffを確認.

wataru@ubuntu:~/lab/btr2018/llsf-refbox/src$ diff tools/llsf-fake-robot.cpp tools.view2/llsf-fake-robot.cpp 
43,44d42
< #include <utils/system/console_colors.h>
< #include <utils/misc/string_split.h>
54d51
< #include <msgs/RingInfo.pb.h>
167,179c164,166
<       std::list<std::string> rings;
<       for (int j = 0; j < o.ring_colors_size(); ++j) {
< 	rings.push_back(llsf_msgs::RingColor_Name(o.ring_colors(j)));;
<       }
< 
<       printf("  %u (%s): %s%u%s/%s%u%s/%u of %s|%s|%s from %02u:%02u to %02u:%02u at gate %u\n", o.id(),
< 	     llsf_msgs::Order::Complexity_Name(o.complexity()).c_str(),
< 	     c_cyan, o.quantity_delivered_cyan(), c_normal,
< 	     c_purple, o.quantity_delivered_magenta(), c_normal,
< 	     o.quantity_requested(),
< 	     llsf_msgs::BaseColor_Name(o.base_color()).c_str(),
< 	     str_join(rings, "-").c_str(),
< 	     llsf_msgs::CapColor_Name(o.cap_color()).c_str(),
---
>       printf("  %u: %u/%u of %s from %02u:%02u to %02u:%02u at gate %s\n", o.id(),
> 	     o.quantity_delivered(), o.quantity_requested(),
> 	     llsf_msgs::Order::ProductType_Name(o.product()).c_str(),
181c168
< 	     o.delivery_gate());
---
> 	     llsf_msgs::Order::DeliveryGate_Name(o.delivery_gate()).c_str());
204,207c191,194
<     for (int i = 0; i < ei->zones_size(); ++i) {
<       const ExplorationZone &zm = ei->zones(i);
<       printf("  Zone %s of team %s\n",
< 	     Zone_Name(zm.zone()).c_str(), Team_Name(zm.team_color()).c_str());
---
>     for (int i = 0; i < ei->machines_size(); ++i) {
>       const ExplorationMachine &em = ei->machines(i);
>       printf("  Machine %s at (%f, %f, %f)\n", em.name().c_str(),
> 	     em.pose().x(), em.pose().y(), em.pose().ori());
217c204
<       printf("  %-3s|%2s|%s (%s) @ (%f, %f, %f)\n",
---
>       printf("  %-3s|%2s|%s @ (%f, %f, %f)\n",
220d206
< 						 m.state().c_str(),
262,273d247
< 
<   std::shared_ptr<RingInfo> rgi;
<   if ((rgi = std::dynamic_pointer_cast<RingInfo>(msg))) {
<     printf("RingInfo received:\n");
<     for (int i = 0; i < rgi->rings_size(); ++i) {
<       const Ring &r = rgi->rings(i);
<       printf("  %s %u\n",
< 						 RingColor_Name(r.ring_color()).c_str(),
< 						 r.raw_material());
<     }
<   }
< 
364d337
<   message_register.add_message_type<RingInfo>();
wataru@ubuntu:~/lab/btr2018/llsf-refbox/src$ diff tools/llsf-fake-robot.cpp tools.view2/llsf-fake-robot.cpp 
43,44d42
< #include <utils/system/console_colors.h>
< #include <utils/misc/string_split.h>
54d51
< #include <msgs/RingInfo.pb.h>
167,179c164,166
<       std::list<std::string> rings;
<       for (int j = 0; j < o.ring_colors_size(); ++j) {
< 	rings.push_back(llsf_msgs::RingColor_Name(o.ring_colors(j)));;
<       }
< 
<       printf("  %u (%s): %s%u%s/%s%u%s/%u of %s|%s|%s from %02u:%02u to %02u:%02u at gate %u\n", o.id(),
< 	     llsf_msgs::Order::Complexity_Name(o.complexity()).c_str(),
< 	     c_cyan, o.quantity_delivered_cyan(), c_normal,
< 	     c_purple, o.quantity_delivered_magenta(), c_normal,
< 	     o.quantity_requested(),
< 	     llsf_msgs::BaseColor_Name(o.base_color()).c_str(),
< 	     str_join(rings, "-").c_str(),
< 	     llsf_msgs::CapColor_Name(o.cap_color()).c_str(),
---
>       printf("  %u: %u/%u of %s from %02u:%02u to %02u:%02u at gate %s\n", o.id(),
> 	     o.quantity_delivered(), o.quantity_requested(),
> 	     llsf_msgs::Order::ProductType_Name(o.product()).c_str(),
181c168
< 	     o.delivery_gate());
---
> 	     llsf_msgs::Order::DeliveryGate_Name(o.delivery_gate()).c_str());
204,207c191,194
<     for (int i = 0; i < ei->zones_size(); ++i) {
<       const ExplorationZone &zm = ei->zones(i);
<       printf("  Zone %s of team %s\n",
< 	     Zone_Name(zm.zone()).c_str(), Team_Name(zm.team_color()).c_str());
---
>     for (int i = 0; i < ei->machines_size(); ++i) {
>       const ExplorationMachine &em = ei->machines(i);
>       printf("  Machine %s at (%f, %f, %f)\n", em.name().c_str(),
> 	     em.pose().x(), em.pose().y(), em.pose().ori());
217c204
<       printf("  %-3s|%2s|%s (%s) @ (%f, %f, %f)\n",
---
>       printf("  %-3s|%2s|%s @ (%f, %f, %f)\n",
220d206
< 						 m.state().c_str(),
262,273d247
< 
<   std::shared_ptr<RingInfo> rgi;
<   if ((rgi = std::dynamic_pointer_cast<RingInfo>(msg))) {
<     printf("RingInfo received:\n");
<     for (int i = 0; i < rgi->rings_size(); ++i) {
<       const Ring &r = rgi->rings(i);
<       printf("  %s %u\n",
< 						 RingColor_Name(r.ring_color()).c_str(),
< 						 r.raw_material());
<     }
<   }
< 
364d337
<   message_register.add_message_type<RingInfo>();
wataru@ubuntu:~/lab/btr2018/llsf-refbox/src$ diff tools/llsf-report-machine.cpp tools.view2/llsf-report-machine.cpp 
7d6
<  *             2017  Tobias Neumann
50d48
< #include <boost/lexical_cast.hpp>
58,68c56,58
< bool        send_rotation_ = false;
< unsigned int machine_rotation_;
< bool        send_zone_ = false;
< llsf_msgs::Zone machine_zone_;
< std::string team_name_;
< Team        team_color_;
< ProtobufBroadcastPeer *peer_public_ = NULL;
< ProtobufBroadcastPeer *peer_team_ = NULL;
< bool crypto_setup_ = false;
< 
< llsfrb::Configuration *config_;
---
> std::string machine_type_;
> Team        team_;
> ProtobufBroadcastPeer *peer_ = NULL;
96,138d85
<   std::shared_ptr<GameState> gs;
<   if ((gs = std::dynamic_pointer_cast<GameState>(msg))) {
<     int hour = gs->game_time().sec() / 3600;
<     int min  = (gs->game_time().sec() - hour * 3600) / 60;
<     int sec  = gs->game_time().sec() - hour * 3600 - min * 60;
< 
< #if __WORDSIZE == 64
<     printf("GameState received:  %02i:%02i:%02i.%02ld  %s %s  %u:%u points, %s vs. %s\n",
< #else
<     printf("GameState received:  %02i:%02i:%02i.%02lld  %s %s  %u:%u points, %s vs. %s\n",
< #endif
< 	   hour, min, sec, gs->game_time().nsec() / 1000000,
< 	   llsf_msgs::GameState::Phase_Name(gs->phase()).c_str(),
< 	   llsf_msgs::GameState::State_Name(gs->state()).c_str(),
< 	   gs->points_cyan(), gs->points_magenta(),
< 	   gs->team_cyan().c_str(), gs->team_magenta().c_str());
< 
<     if (team_name_ == gs->team_cyan() || team_name_ == gs->team_magenta()) {
<       if (team_name_ == gs->team_cyan() && team_color_ != CYAN) {
< 	printf("WARNING: sending as magenta, but our team is announced as cyan by refbox!\n");
<       } else if (team_name_ == gs->team_magenta() && team_color_ != MAGENTA) {
< 	printf("WARNING: sending as cyan, but our team is announced as magenta by refbox!\n");
<       }
<       if (! crypto_setup_) {
< 	crypto_setup_ = true;
< 
< 	std::string crypto_key = "", cipher = "aes-128-cbc";
< 	try {
< 	  crypto_key = config_->get_string(("/llsfrb/game/crypto-keys/" + team_name_).c_str());
< 	  printf("Set crypto key to %s (cipher %s)\n", crypto_key.c_str(), cipher.c_str());
< 	  peer_team_->setup_crypto(crypto_key, cipher);
< 	} catch (Exception &e) {
< 	  printf("No encryption key configured for team, not enabling crypto");
< 	}
<       }
<     } else if (crypto_setup_) {
<       printf("Our team is not set, training game? Disabling crypto.\n");
<       crypto_setup_ = false;
<       peer_team_->setup_crypto("", "");
<     }
<   }
< 
< 
142,144c89
<             printf("Announcing machine: Zone: %s   rotation %u\n",
<                    send_zone_ ? Zone_Name(machine_zone_).c_str() : "*NO*",
<                    send_rotation_ ? machine_rotation_ : -1);
---
>       printf("Announcing machine type\n");
146c91
<       report.set_team_color(team_color_);
---
>       report.set_team_color(team_);
149,151c94,95
<       if (send_rotation_) entry->set_rotation(machine_rotation_);
<       if (send_zone_) entry->set_zone(machine_zone_);
<       peer_team_->send(report);
---
>       entry->set_type(machine_type_);
>       peer_->send(report);
157,158c101,102
<     if (mrinfo->team_color() == team_color_) {
<       printf("Reported machines (%s):", llsf_msgs::Team_Name(team_color_).c_str());
---
>     if (mrinfo->team_color() == team_) {
>       printf("Reported machines (%s):", llsf_msgs::Team_Name(team_).c_str());
170c114
<   ArgumentParser argp(argc, argv, "T:r:z:");
---
>   ArgumentParser argp(argc, argv, "T:");
172,179c116,120
<   if (argp.num_items() != 2 || (! argp.has_arg("t") && ! argp.has_arg("z"))) {
< 	  printf("Usage: %s [-T team] [-t <type>] [-z <zone>] <team-name> <machine-name>\n"
< 	         "\n"
< 	         "-T team	  Select team to send for, CYAN (default) or MAGENTA\n"
< 		 "-r rotation Rotation to report for machine\n"
< 		 "-z zone     Zone to report for machine\n\n"
< 	         "You must supply at least one of type and zone, or both.\n",
< 	         argv[0]);
---
>   if (argp.num_items() != 2) {
>     printf("Usage: %s [-T team] <machine-name> <machine-type>\n"
> 	   "\n"
> 	   "-T team	Select team to send for, CYAN (default) or MAGENTA\n",
> 	   argv[0]);
183,184c124,125
<   team_name_    = argp.items()[0];
<   machine_name_ = argp.items()[1];
---
>   machine_name_ = argp.items()[0];
>   machine_type_ = argp.items()[1];
186,197c127,128
<   if (argp.has_arg("r")) {
<           machine_rotation_ = boost::lexical_cast<unsigned int>(argp.arg("r"));
<           send_rotation_ = true;
<   }
<   
<   if (argp.has_arg("z")) {
< 	  if (! llsf_msgs::Zone_Parse(argp.arg("z"), &machine_zone_)) {
< 		  printf("Invalid zone\n");
< 		  exit(2);
< 	  }
< 	  send_zone_ = true;
<   }
---
>   llsfrb::Configuration *config = new llsfrb::YamlConfiguration(CONFDIR);
>   config->load("config.yaml");
198a130,139
>   if (config->exists("/llsfrb/comm/peer-send-port") &&
>       config->exists("/llsfrb/comm/peer-recv-port") )
>   {
>     peer_ = new ProtobufBroadcastPeer(config->get_string("/llsfrb/comm/peer-host"),
> 				      config->get_uint("/llsfrb/comm/peer-recv-port"),
> 				      config->get_uint("/llsfrb/comm/peer-send-port"));
>   } else {
>     peer_ = new ProtobufBroadcastPeer(config->get_string("/llsfrb/comm/peer-host"),
> 				      config->get_uint("/llsfrb/comm/peer-port"));
>   }
200c141
<   team_color_ = CYAN;
---
>   team_ = CYAN;
204c145
<       team_color_ = CYAN;
---
>       team_ = CYAN;
206c147
<       team_color_ = MAGENTA;
---
>       team_ = MAGENTA;
212,224c153
<   config_ = new llsfrb::YamlConfiguration(CONFDIR);
<   config_->load("config.yaml");
< 
<   if (config_->exists("/llsfrb/comm/public-peer/send-port") &&
<       config_->exists("/llsfrb/comm/public-peer/recv-port") )
<   {
<     peer_public_ = new ProtobufBroadcastPeer(config_->get_string("/llsfrb/comm/public-peer/host"),
< 					     config_->get_uint("/llsfrb/comm/public-peer/recv-port"),
< 					     config_->get_uint("/llsfrb/comm/public-peer/send-port"));
<   } else {
<     peer_public_ = new ProtobufBroadcastPeer(config_->get_string("/llsfrb/comm/public-peer/host"),
< 					     config_->get_uint("/llsfrb/comm/public-peer/port"));
<   }
---
>   boost::asio::io_service io_service;
226c155
<   MessageRegister & message_register = peer_public_->message_register();
---
>   MessageRegister & message_register = peer_->message_register();
232,250d160
<   std::string cfg_prefix =
<     std::string("/llsfrb/comm/") +
<     ((team_color_ == CYAN) ? "cyan" : "magenta") + "-peer/";
< 
<   if (config_->exists((cfg_prefix + "send-port").c_str()) &&
<       config_->exists((cfg_prefix + "recv-port").c_str()) )
<   {
<     peer_team_ = new ProtobufBroadcastPeer(config_->get_string((cfg_prefix + "host").c_str()),
< 					   config_->get_uint((cfg_prefix + "recv-port").c_str()),
< 					   config_->get_uint((cfg_prefix + "send-port").c_str()),
< 					   &message_register /*, crypto_key, cipher*/);
<   } else {
<     peer_team_ = new ProtobufBroadcastPeer(config_->get_string((cfg_prefix + "host").c_str()),
< 					   config_->get_uint((cfg_prefix + "port").c_str()),
< 					   &message_register/*, crypto_key, cipher*/);
<   }
< 
<   boost::asio::io_service io_service;
< 
253,259c163,165
<   peer_public_->signal_received().connect(handle_message);
<   peer_public_->signal_recv_error().connect(handle_recv_error);
<   peer_public_->signal_send_error().connect(handle_send_error);
< 
<   peer_team_->signal_received().connect(handle_message);
<   peer_team_->signal_recv_error().connect(handle_recv_error);
<   peer_team_->signal_send_error().connect(handle_send_error);
---
>   peer_->signal_received().connect(handle_message);
>   peer_->signal_recv_error().connect(handle_recv_error);
>   peer_->signal_send_error().connect(handle_send_error);
274,276c180,181
<   delete peer_public_;
<   delete peer_team_;
<   delete config_;
---
>   delete peer_;
>   delete config;

コメントを残す

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

*