Skip to content

Commit ef7404a

Browse files
Tomas BacaTomas Baca
authored andcommitted
added explicit callback groups
1 parent af64375 commit ef7404a

File tree

3 files changed

+227
-110
lines changed

3 files changed

+227
-110
lines changed

src/failsafe_controller.cpp

Lines changed: 31 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ namespace failsafe_controller
3636
class FailsafeController : public mrs_uav_managers::Controller {
3737

3838
public:
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

6163
private:
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

204213
void 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

Comments
 (0)