Program Listing for File robot_metrics_manager.hpp

Return to documentation for file (cosm/ros/metrics/robot_metrics_manager.hpp)

#pragma once

/*******************************************************************************
 * Includes
 ******************************************************************************/
#include <string>

#include "rcppsw/er/client.hpp"

#include "rcppsw/metrics/config/metrics_config.hpp"
#include "rcppsw/metrics/network_output_manager.hpp"

#include "cosm/cosm.hpp"
#include "cosm/ros/topic.hpp"

/*******************************************************************************
 * Namespaces
 ******************************************************************************/
namespace cosm::repr {
class base_block3D;
} /* namespace cosm::repr */

namespace cosm::controller {
class base_controller2D;
class base_controllerQ3D;
} /* namespace cosm::controller */

namespace cosm::ros::metrics {

/*******************************************************************************
 * Class Definitions
 ******************************************************************************/
class robot_metrics_manager :public rer::client<robot_metrics_manager>,
                             public rmetrics::network_output_manager {
 public:
  robot_metrics_manager(const cros::topic& robot_ns,
                        const rmconfig::metrics_config* mconfig);
  ~robot_metrics_manager(void) override = default;

  void collect_from_block(const crepr::base_block3D* block);

  void collect_from_controller(const ccontroller::base_controller2D* controller);

 protected:
  void register_with_n_block_clusters(const rmconfig::metrics_config* mconfig,
                                      size_t n_block_clusters);
  void register_standard(const rmconfig::metrics_config* mconfig);

  void register_with_n_robots(const rmconfig::metrics_config* mconfig,
                              size_t n_robots);
};

} /* namespace cosm::ros::metrics */