32 using Deleter = std::function<void(
void)>;
40 : command_interface_(command_interface),
41 interface_name_(command_interface->get_name()),
42 deleter_(std::forward<Deleter>(deleter))
52 if (command_interface_)
54 auto logger = rclcpp::get_logger(interface_name_);
55 RCLCPP_WARN_EXPRESSION(
57 (get_value_statistics_.failed_counter > 0 || get_value_statistics_.timeout_counter > 0),
58 "LoanedCommandInterface %s has %u (%.4f %%) timeouts and %u (~ %.4f %%) missed calls out "
61 interface_name_.c_str(), get_value_statistics_.timeout_counter,
62 (get_value_statistics_.timeout_counter * 100.0) / get_value_statistics_.total_counter,
63 get_value_statistics_.failed_counter,
64 (get_value_statistics_.failed_counter * 100.0) / get_value_statistics_.total_counter,
65 get_value_statistics_.total_counter);
66 RCLCPP_WARN_EXPRESSION(
68 (set_value_statistics_.failed_counter > 0 || set_value_statistics_.timeout_counter > 0),
69 "LoanedCommandInterface %s has %u (%.4f %%) timeouts and %u (~ %.4f %%) missed calls out "
72 interface_name_.c_str(), set_value_statistics_.timeout_counter,
73 (set_value_statistics_.timeout_counter * 100.0) / set_value_statistics_.total_counter,
74 set_value_statistics_.failed_counter,
75 (set_value_statistics_.failed_counter * 100.0) / set_value_statistics_.total_counter,
76 set_value_statistics_.total_counter);
84 const std::string & get_name()
const {
return command_interface_->get_name(); }
86 const std::string & get_interface_name()
const
88 return command_interface_->get_interface_name();
91 const std::string & get_prefix_name()
const {
return command_interface_->get_prefix_name(); }
108 template <
typename T>
109 [[nodiscard]]
bool set_value(
const T & value,
unsigned int max_tries = 10)
111 unsigned int nr_tries = 0;
112 ++set_value_statistics_.total_counter;
113 while (!command_interface_->set_limited_value(value))
115 ++set_value_statistics_.failed_counter;
117 if (nr_tries == max_tries)
119 ++set_value_statistics_.timeout_counter;
122 std::this_thread::yield();
141 template <
typename T =
double>
142 [[nodiscard]] std::optional<T>
get_optional(
unsigned int max_tries = 10)
const
144 unsigned int nr_tries = 0;
147 ++get_value_statistics_.total_counter;
148 const std::optional<T> data = command_interface_->get_optional<T>();
149 if (data.has_value())
153 ++get_value_statistics_.failed_counter;
155 std::this_thread::yield();
156 }
while (nr_tries < max_tries);
158 ++get_value_statistics_.timeout_counter;
175 CommandInterface::SharedPtr command_interface_;
176 std::string interface_name_;
180 struct HandleRTStatistics
182 unsigned int total_counter = 0;
183 unsigned int failed_counter = 0;
184 unsigned int timeout_counter = 0;
186 mutable HandleRTStatistics get_value_statistics_;
187 HandleRTStatistics set_value_statistics_;