Skip to content

Commit 138e501

Browse files
authored
Add Non-Blocking try_get_params Function for Real-Time Control Systems (#205)
1 parent 4ad23ba commit 138e501

File tree

2 files changed

+24
-4
lines changed

2 files changed

+24
-4
lines changed

example/test/example_test_gtest.cpp

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,17 +40,17 @@ class ExampleTest : public ::testing::Test {
4040
void SetUp() {
4141
example_test_node_ = std::make_shared<rclcpp::Node>("example_test_node");
4242

43-
std::shared_ptr<admittance_controller::ParamListener> param_listener =
44-
std::make_shared<admittance_controller::ParamListener>(
45-
example_test_node_->get_node_parameters_interface());
46-
params_ = param_listener->get_params();
43+
param_listener_ = std::make_shared<admittance_controller::ParamListener>(
44+
example_test_node_->get_node_parameters_interface());
45+
params_ = param_listener_->get_params();
4746
}
4847

4948
void TearDown() { example_test_node_.reset(); }
5049

5150
protected:
5251
std::shared_ptr<rclcpp::Node> example_test_node_;
5352
admittance_controller::Params params_;
53+
std::shared_ptr<admittance_controller::ParamListener> param_listener_;
5454
};
5555

5656
TEST_F(ExampleTest, check_parameters) {
@@ -64,6 +64,15 @@ TEST_F(ExampleTest, check_parameters) {
6464
ASSERT_EQ(params_.ft_sensor.filter_coefficient, 0.1);
6565
}
6666

67+
TEST_F(ExampleTest, try_get_params) {
68+
ASSERT_TRUE(param_listener_->try_get_params(params_));
69+
70+
const rclcpp ::Parameter new_param("interpolation_mode", "linear");
71+
example_test_node_->set_parameter(new_param);
72+
ASSERT_TRUE(param_listener_->try_get_params(params_));
73+
ASSERT_EQ(params_.interpolation_mode, "linear");
74+
}
75+
6776
int main(int argc, char** argv) {
6877
::testing::InitGoogleTest(&argc, argv);
6978
rclcpp::init(argc, argv);

generate_parameter_library_py/generate_parameter_library_py/jinja_templates/cpp/parameter_library_header

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,17 @@ struct StackParams {
123123
return params_;
124124
}
125125

126+
bool try_get_params(Params & params_in) const {
127+
if (mutex_.try_lock()) {
128+
if (const bool is_old = params_in.__stamp != params_.__stamp; is_old) {
129+
params_in = params_;
130+
}
131+
mutex_.unlock();
132+
return true;
133+
}
134+
return false;
135+
}
136+
126137
bool is_old(Params const& other) const {
127138
std::lock_guard<std::mutex> lock(mutex_);
128139
return params_.__stamp != other.__stamp;

0 commit comments

Comments
 (0)