Skip to content

Commit

Permalink
add mutex lock for plugin param callbacks
Browse files Browse the repository at this point in the history
  • Loading branch information
bpwilcox committed Dec 4, 2019
1 parent a76e5fa commit 7ddaaf4
Show file tree
Hide file tree
Showing 5 changed files with 17 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,6 @@ class InflationLayer : public Layer

// Indicates that the entire costmap should be reinflated next time around.
bool need_reinflation_;
std::recursive_mutex mutex_;
};

} // namespace nav2_costmap_2d
Expand Down
2 changes: 2 additions & 0 deletions nav2_costmap_2d/include/nav2_costmap_2d/layer.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,8 @@ class Layer // TODO(mjeronimo): public nav2_util::LifecycleHelperInterface
// Names of the parameters declared on the ROS node
std::unordered_set<std::string> local_params_;

std::recursive_mutex mutex_;

private:
std::vector<geometry_msgs::msg::Point> footprint_spec_;
};
Expand Down
2 changes: 2 additions & 0 deletions nav2_costmap_2d/plugins/inflation_layer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -101,12 +101,14 @@ InflationLayer::setParamCallbacks()
if (param_subscriber_) {
callback_handles_.push_back(param_subscriber_->add_parameter_callback(name_ + ".enabled",
[&](const rclcpp::Parameter & p) {
std::lock_guard<std::recursive_mutex> lock(mutex_);
enabled_ = p.get_value<bool>();
need_reinflation_ = true;
}));
callback_handles_.push_back(param_subscriber_->add_parameter_callback(name_ +
".inflate_unknown",
[&](const rclcpp::Parameter & p) {
std::lock_guard<std::recursive_mutex> lock(mutex_);
inflate_unknown_ = p.get_value<bool>();
need_reinflation_ = true;
}));
Expand Down
4 changes: 4 additions & 0 deletions nav2_costmap_2d/plugins/obstacle_layer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -252,21 +252,25 @@ ObstacleLayer::setParamCallbacks()
if (param_subscriber_) {
callback_handles_.push_back(param_subscriber_->add_parameter_callback(name_ + ".enabled",
[&](const rclcpp::Parameter & p) {
std::lock_guard<std::recursive_mutex> lock(mutex_);
enabled_ = p.get_value<bool>();
}));
callback_handles_.push_back(param_subscriber_->add_parameter_callback(name_ +
".footprint_clearing_enabled",
[&](const rclcpp::Parameter & p) {
std::lock_guard<std::recursive_mutex> lock(mutex_);
footprint_clearing_enabled_ = p.get_value<bool>();
}));
callback_handles_.push_back(param_subscriber_->add_parameter_callback(name_ +
".max_obstacle_height",
[&](const rclcpp::Parameter & p) {
std::lock_guard<std::recursive_mutex> lock(mutex_);
max_obstacle_height_ = p.get_value<double>();
}));
callback_handles_.push_back(param_subscriber_->add_parameter_callback(name_ +
".combination_method",
[&](const rclcpp::Parameter & p) {
std::lock_guard<std::recursive_mutex> lock(mutex_);
combination_method_ = p.get_value<int>();
}));
}
Expand Down
9 changes: 9 additions & 0 deletions nav2_costmap_2d/plugins/voxel_layer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -104,42 +104,51 @@ VoxelLayer::setParamCallbacks()
if (param_subscriber_) {
callback_handles_.push_back(param_subscriber_->add_parameter_callback(name_ + ".enabled",
[&](const rclcpp::Parameter & p) {
std::lock_guard<std::recursive_mutex> lock(mutex_);
enabled_ = p.get_value<bool>();
}));
callback_handles_.push_back(param_subscriber_->add_parameter_callback(name_ +
".footprint_clearing_enabled",
[&](const rclcpp::Parameter & p) {
std::lock_guard<std::recursive_mutex> lock(mutex_);
footprint_clearing_enabled_ = p.get_value<bool>();
}));
callback_handles_.push_back(param_subscriber_->add_parameter_callback(name_ +
".max_obstacle_height",
[&](const rclcpp::Parameter & p) {
std::lock_guard<std::recursive_mutex> lock(mutex_);
max_obstacle_height_ = p.get_value<double>();
}));
callback_handles_.push_back(param_subscriber_->add_parameter_callback(name_ +
".combination_method",
[&](const rclcpp::Parameter & p) {
std::lock_guard<std::recursive_mutex> lock(mutex_);
combination_method_ = p.get_value<int>();
}));
callback_handles_.push_back(param_subscriber_->add_parameter_callback(name_ + ".z_voxels",
[&](const rclcpp::Parameter & p) {
std::lock_guard<std::recursive_mutex> lock(mutex_);
size_z_ = p.get_value<int>();
}));
callback_handles_.push_back(param_subscriber_->add_parameter_callback(name_ + ".origin_z",
[&](const rclcpp::Parameter & p) {
std::lock_guard<std::recursive_mutex> lock(mutex_);
origin_z_ = p.get_value<double>();
}));
callback_handles_.push_back(param_subscriber_->add_parameter_callback(name_ + ".z_resolution",
[&](const rclcpp::Parameter & p) {
std::lock_guard<std::recursive_mutex> lock(mutex_);
z_resolution_ = p.get_value<double>();
}));
callback_handles_.push_back(param_subscriber_->add_parameter_callback(name_ +
".unknown_threshold",
[&](const rclcpp::Parameter & p) {
std::lock_guard<std::recursive_mutex> lock(mutex_);
unknown_threshold_ = p.get_value<int>() + (VOXEL_BITS - size_z_);
}));
callback_handles_.push_back(param_subscriber_->add_parameter_callback(name_ + ".mark_threshold",
[&](const rclcpp::Parameter & p) {
std::lock_guard<std::recursive_mutex> lock(mutex_);
mark_threshold_ = p.get_value<int>();
}));
}
Expand Down

0 comments on commit 7ddaaf4

Please sign in to comment.