void
	init()
	{
		ifc_zone_ = blackboard_->open_for_reading<fawkes::ZoneInterface>("/explore-zone/info");
		ifc_tag_vision_ = blackboard_->open_for_reading<fawkes::TagVisionInterface>("/tag-vision/info");
		for (size_t i = 0; i < std::min(ifc_tag_vision_->maxlenof_tag_id(), ifcs_tag_pos_.size()); ++i) {
			std::string ifc_id = "/tag-vision/" + std::to_string(i);
			ifcs_tag_pos_[i] = blackboard_->open_for_reading<fawkes::Position3DInterface>(ifc_id.c_str());
			// do not listen for events on these interfaces, we read them
			// whenever the tag vision info interface changes
		}
		ifc_machine_signal_ = blackboard_->open_for_reading<fawkes::RobotinoLightInterface>("/machine-signal/best");
		ifc_navgraph_gen_ =
			blackboard_->open_for_reading<fawkes::NavGraphWithMPSGeneratorInterface>("/navgraph-generator-mps");
		ifc_pose_ = blackboard_->open_for_reading<fawkes::Position3DInterface>("Pose");

		
		bbil_add_data_interface(ifc_zone_);
		bbil_add_data_interface(ifc_tag_vision_);
		bbil_add_data_interface(ifc_machine_signal_);
		bbil_add_data_interface(ifc_pose_);

		// Setup ROS topics
		pub_expl_zone_info_ =
			rosnode.advertise<rcll_fawkes_sim_msgs::ExplorationZoneInfo>("rcll_sim/explore_zone_info", 10);
		pub_mps_marker_array_ =
			rosnode.advertise<rcll_fawkes_sim_msgs::MPSMarkerArray>("rcll_sim/mps_marker_array", 10);
		pub_mps_light_state_ =
			rosnode.advertise<rcll_fawkes_sim_msgs::MPSLightState>("rcll_sim/mps_light_state", 10);
		pub_pose_ =
			rosnode.advertise<geometry_msgs::PoseWithCovarianceStamped>("rcll_sim/amcl_pose", 10);

		blackboard_->register_listener(this, fawkes::BlackBoard::BBIL_FLAG_DATA);

		// provide services
		srv_navgraph_gen_ = rosnode.advertiseService("rcll_sim/navgraph_generate",
		                                             &RcllFawkesSimNode::srv_cb_navgraph_gen, this);
	}
示例#2
0
/** Constructor.
 * @param blackboard local BlackBoard
 * @param interface interface to care about
 * @param hub Fawkes network hub to use to send messages
 * @param clid client ID of the client which opened this interface
 */
BlackBoardNetHandlerInterfaceListener::BlackBoardNetHandlerInterfaceListener(BlackBoard *blackboard,
									     Interface *interface,
									     FawkesNetworkHub *hub,
									     unsigned int clid)
  : BlackBoardInterfaceListener("NetIL/%s", interface->uid())
{
  bbil_add_data_interface(interface);
  bbil_add_reader_interface(interface);
  bbil_add_writer_interface(interface);
  if ( interface->is_writer() ) {
    bbil_add_message_interface(interface);
  }

  __blackboard = blackboard;
  __interface = interface;
  __fnh = hub;
  __clid = clid;

  __blackboard->register_listener(this, BlackBoard::BBIL_FLAG_ALL);
}
示例#3
0
/** Constructor.
 * @param listener_name name of the listener
 * @param iface interface to watch for data changes. Register this dispatcher as
 * listener by yourself!
 * @param message_enqueueing true to enqueue messages after the message received
 * event handler has been called, false to drop the message afterwards.
 */
InterfaceDispatcher::InterfaceDispatcher(const char *listener_name,
					 Interface *iface,
					 bool message_enqueueing)
  : BlackBoardInterfaceListener(listener_name)
{
  __message_enqueueing = message_enqueueing;

  bbil_add_data_interface(iface);
  if ( iface->is_writer() ) {
    bbil_add_message_interface(iface);
  }
  bbil_add_writer_interface(iface);
  bbil_add_reader_interface(iface);

  __dispatcher_data_changed.connect(sigc::mem_fun(*this, &InterfaceDispatcher::on_data_changed));
  __dispatcher_message_received.connect(sigc::mem_fun(*this, &InterfaceDispatcher::on_message_received));
  __dispatcher_writer_added.connect(sigc::mem_fun(*this, &InterfaceDispatcher::on_writer_added));
  __dispatcher_writer_removed.connect(sigc::mem_fun(*this, &InterfaceDispatcher::on_writer_removed));
  __dispatcher_reader_added.connect(sigc::mem_fun(*this, &InterfaceDispatcher::on_reader_added));
  __dispatcher_reader_removed.connect(sigc::mem_fun(*this, &InterfaceDispatcher::on_writer_removed));
}