@@ -36,7 +36,8 @@ namespace failsafe_controller
3636class FailsafeController : public mrs_uav_managers ::Controller {
3737
3838public:
39- bool initialize (const rclcpp::Node::SharedPtr &node, std::shared_ptr<mrs_uav_managers::control_manager::CommonHandlers_t> common_handlers, std::shared_ptr<mrs_uav_managers::control_manager::PrivateHandlers_t> private_handlers);
39+ bool initialize (const rclcpp::Node::SharedPtr &node, std::shared_ptr<mrs_uav_managers::control_manager::CommonHandlers_t> common_handlers,
40+ std::shared_ptr<mrs_uav_managers::control_manager::PrivateHandlers_t> private_handlers);
4041
4142 void destroy ();
4243
@@ -54,14 +55,17 @@ class FailsafeController : public mrs_uav_managers::Controller {
5455
5556 void resetDisturbanceEstimators (void );
5657
57- const std::shared_ptr<mrs_msgs::srv::DynamicsConstraintsSrv::Response> setConstraints (const std::shared_ptr<mrs_msgs::srv::DynamicsConstraintsSrv::Request> &constraints);
58+ const std::shared_ptr<mrs_msgs::srv::DynamicsConstraintsSrv::Response> setConstraints (
59+ const std::shared_ptr<mrs_msgs::srv::DynamicsConstraintsSrv::Request> &constraints);
5860
5961 double getHeadingSafely (const geometry_msgs::msg::QuaternionStamped::ConstSharedPtr quaternion);
6062
6163private:
6264 rclcpp::Node::SharedPtr node_;
6365 rclcpp::Clock::SharedPtr clock_;
6466
67+ rclcpp::CallbackGroup::SharedPtr cbkgrp_subs_;
68+
6569 bool is_initialized_ = false ;
6670 bool is_active_ = false ;
6771
@@ -124,11 +128,14 @@ class FailsafeController : public mrs_uav_managers::Controller {
124128
125129/* initialize() //{ */
126130
127- bool FailsafeController::initialize (const rclcpp::Node::SharedPtr &node, std::shared_ptr<mrs_uav_managers::control_manager::CommonHandlers_t> common_handlers, std::shared_ptr<mrs_uav_managers::control_manager::PrivateHandlers_t> private_handlers) {
131+ bool FailsafeController::initialize (const rclcpp::Node::SharedPtr &node, std::shared_ptr<mrs_uav_managers::control_manager::CommonHandlers_t> common_handlers,
132+ std::shared_ptr<mrs_uav_managers::control_manager::PrivateHandlers_t> private_handlers) {
128133
129134 node_ = node;
130135 clock_ = node->get_clock ();
131136
137+ cbkgrp_subs_ = node_->create_callback_group (rclcpp::CallbackGroupType::MutuallyExclusive);
138+
132139 RCLCPP_INFO (node_->get_logger (), " initializing" );
133140
134141 common_handlers_ = common_handlers;
@@ -173,12 +180,14 @@ bool FailsafeController::initialize(const rclcpp::Node::SharedPtr &node, std::sh
173180
174181 mrs_lib::SubscriberHandlerOptions shopts;
175182
176- shopts.node = node_;
177- shopts.no_message_timeout = mrs_lib::no_timeout;
178- shopts.threadsafe = true ;
179- shopts.autostart = true ;
183+ shopts.node = node_;
184+ shopts.no_message_timeout = mrs_lib::no_timeout;
185+ shopts.threadsafe = true ;
186+ shopts.autostart = true ;
187+ shopts.subscription_options .callback_group = cbkgrp_subs_;
180188
181- sh_hw_api_orientation_ = mrs_lib::SubscriberHandler<geometry_msgs::msg::QuaternionStamped>(shopts, " /" + common_handlers->uav_name + " /" + " hw_api/orientation" );
189+ sh_hw_api_orientation_ =
190+ mrs_lib::SubscriberHandler<geometry_msgs::msg::QuaternionStamped>(shopts, " /" + common_handlers->uav_name + " /" + " hw_api/orientation" );
182191
183192 // | ----------- calculate the default hover throttle ----------- |
184193
@@ -202,7 +211,6 @@ bool FailsafeController::initialize(const rclcpp::Node::SharedPtr &node, std::sh
202211/* destroy() //{ */
203212
204213void FailsafeController::destroy () {
205-
206214}
207215
208216// }
@@ -248,9 +256,11 @@ bool FailsafeController::activate(const ControlOutput &last_control_output) {
248256
249257 activation_control_output_.diagnostics .controller_enforcing_constraints = false ;
250258
251- hover_throttle_ = _initial_throttle_percentage_ * mrs_lib::quadratic_throttle_model::forceToThrottle (common_handlers_->throttle_model , (_uav_mass_ + uav_mass_difference_) * common_handlers_->g );
259+ hover_throttle_ = _initial_throttle_percentage_ * mrs_lib::quadratic_throttle_model::forceToThrottle (
260+ common_handlers_->throttle_model , (_uav_mass_ + uav_mass_difference_) * common_handlers_->g );
252261
253- RCLCPP_INFO (node_->get_logger (), " [FailsafeController]: activated with uav_mass_difference %.2f kg, hover_throttle %.3f" , uav_mass_difference_, hover_throttle_);
262+ RCLCPP_INFO (node_->get_logger (), " [FailsafeController]: activated with uav_mass_difference %.2f kg, hover_throttle %.3f" , uav_mass_difference_,
263+ hover_throttle_);
254264 }
255265
256266 first_iteration_ = true ;
@@ -277,7 +287,8 @@ void FailsafeController::deactivate(void) {
277287
278288/* updateInactive() //{ */
279289
280- void FailsafeController::updateInactive (const mrs_msgs::msg::UavState &uav_state, [[maybe_unused]] const std::optional<mrs_msgs::msg::TrackerCommand> &tracker_command) {
290+ void FailsafeController::updateInactive (const mrs_msgs::msg::UavState &uav_state,
291+ [[maybe_unused]] const std::optional<mrs_msgs::msg::TrackerCommand> &tracker_command) {
281292
282293 mrs_lib::set_mutexed (mutex_uav_state_, uav_state, uav_state_);
283294
@@ -290,10 +301,12 @@ void FailsafeController::updateInactive(const mrs_msgs::msg::UavState &uav_state
290301
291302/* //{ updateWhenAcctive() */
292303
293- FailsafeController::ControlOutput FailsafeController::updateActive (const mrs_msgs::msg::UavState &uav_state, [[maybe_unused]] const mrs_msgs::msg::TrackerCommand &tracker_command) {
304+ FailsafeController::ControlOutput FailsafeController::updateActive (const mrs_msgs::msg::UavState &uav_state,
305+ [[maybe_unused]] const mrs_msgs::msg::TrackerCommand &tracker_command) {
294306
295307 mrs_lib::Routine profiler_routine = profiler_.createRoutine (" update" );
296- mrs_lib::ScopeTimer timer = mrs_lib::ScopeTimer (node_, " FailsafeController::update" , common_handlers_->scope_timer .logger , common_handlers_->scope_timer .enabled );
308+ mrs_lib::ScopeTimer timer =
309+ mrs_lib::ScopeTimer (node_, " FailsafeController::update" , common_handlers_->scope_timer .logger , common_handlers_->scope_timer .enabled );
297310
298311 {
299312 std::scoped_lock lock (mutex_uav_state_);
@@ -477,7 +490,8 @@ FailsafeController::ControlOutput FailsafeController::updateActive(const mrs_msg
477490 // | mixer |
478491 // --------------------------------------------------------------
479492
480- mrs_msgs::msg::HwApiActuatorCmd actuator_cmd = common::actuatorMixer (node_, control_group_command.value (), common_handlers_->detailed_model_params ->control_group_mixer );
493+ mrs_msgs::msg::HwApiActuatorCmd actuator_cmd =
494+ common::actuatorMixer (node_, control_group_command.value (), common_handlers_->detailed_model_params ->control_group_mixer );
481495
482496 RCLCPP_DEBUG_THROTTLE (node_->get_logger (), *clock_, 1000 , " [FailsafeController]: returning actuators output" );
483497 control_output.control_output = actuator_cmd;
@@ -516,7 +530,8 @@ void FailsafeController::resetDisturbanceEstimators(void) {
516530
517531/* setConstraints() //{ */
518532
519- const std::shared_ptr<mrs_msgs::srv::DynamicsConstraintsSrv::Response> FailsafeController::setConstraints ([[maybe_unused]] const std::shared_ptr<mrs_msgs::srv::DynamicsConstraintsSrv::Request> &constraints) {
533+ const std::shared_ptr<mrs_msgs::srv::DynamicsConstraintsSrv::Response> FailsafeController::setConstraints (
534+ [[maybe_unused]] const std::shared_ptr<mrs_msgs::srv::DynamicsConstraintsSrv::Request> &constraints) {
520535
521536 std::shared_ptr<mrs_msgs::srv::DynamicsConstraintsSrv::Response> response = std::make_shared<mrs_msgs::srv::DynamicsConstraintsSrv::Response>();
522537
0 commit comments