Skip to content

Commit 9e89020

Browse files
KentaKatochristophfroehlichbmagyarsaikishor
authored
Use ParamListener::try_get_params to Avoid Blocking in Real-Time Contexts (#1198)
Co-authored-by: Christoph Fröhlich <christophfroehlich@users.noreply.github.com> Co-authored-by: Bence Magyar <bence.magyar.robotics@gmail.com> Co-authored-by: Sai Kishor Kothakota <sai.kishor@pal-robotics.com>
1 parent e1f5116 commit 9e89020

File tree

7 files changed

+9
-26
lines changed

7 files changed

+9
-26
lines changed

admittance_controller/include/admittance_controller/admittance_rule_impl.hpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -120,10 +120,8 @@ controller_interface::return_type AdmittanceRule::reset(const size_t num_joints)
120120

121121
void AdmittanceRule::apply_parameters_update()
122122
{
123-
if (parameter_handler_->is_old(parameters_))
124-
{
125-
parameters_ = parameter_handler_->get_params();
126-
}
123+
parameter_handler_->try_get_params(parameters_);
124+
127125
// update param values
128126
end_effector_weight_[2] = -parameters_.gravity_compensation.CoG.force;
129127
vec_to_eigen(parameters_.gravity_compensation.CoG.pos, cog_pos_);

diff_drive_controller/src/diff_drive_controller.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -311,9 +311,8 @@ controller_interface::CallbackReturn DiffDriveController::on_configure(
311311
auto logger = get_node()->get_logger();
312312

313313
// update parameters if they have changed
314-
if (param_listener_->is_old(params_))
314+
if (param_listener_->try_update_params(params_))
315315
{
316-
params_ = param_listener_->get_params();
317316
RCLCPP_INFO(logger, "Parameters were updated");
318317
}
319318

force_torque_sensor_broadcaster/src/force_torque_sensor_broadcaster.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -144,10 +144,8 @@ controller_interface::CallbackReturn ForceTorqueSensorBroadcaster::on_deactivate
144144
controller_interface::return_type ForceTorqueSensorBroadcaster::update_and_write_commands(
145145
const rclcpp::Time & time, const rclcpp::Duration & /*period*/)
146146
{
147-
if (param_listener_->is_old(params_))
148-
{
149-
params_ = param_listener_->get_params();
150-
}
147+
param_listener_->try_get_params(params_);
148+
151149
if (realtime_publisher_ && realtime_publisher_->trylock())
152150
{
153151
realtime_publisher_->msg_.header.stamp = time;

joint_trajectory_controller/src/joint_trajectory_controller.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -159,9 +159,8 @@ controller_interface::return_type JointTrajectoryController::update(
159159

160160
auto logger = this->get_node()->get_logger();
161161
// update dynamic parameters
162-
if (param_listener_->is_old(params_))
162+
if (param_listener_->try_update_params(params_))
163163
{
164-
params_ = param_listener_->get_params();
165164
default_tolerances_ = get_segment_tolerances(logger, params_);
166165
// update the PID gains
167166
// variable use_closed_loop_pid_adapter_ is updated in on_configure only

pid_controller/include/pid_controller/pid_controller.hpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,6 @@ class PidController : public controller_interface::ChainableControllerInterface
101101
bool on_set_chained_mode(bool chained_mode) override;
102102

103103
// internal methods
104-
void update_parameters();
105104
controller_interface::CallbackReturn configure_parameters();
106105

107106
private:

pid_controller/src/pid_controller.cpp

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -87,18 +87,9 @@ controller_interface::CallbackReturn PidController::on_init()
8787
return controller_interface::CallbackReturn::SUCCESS;
8888
}
8989

90-
void PidController::update_parameters()
91-
{
92-
if (!param_listener_->is_old(params_))
93-
{
94-
return;
95-
}
96-
params_ = param_listener_->get_params();
97-
}
98-
9990
controller_interface::CallbackReturn PidController::configure_parameters()
10091
{
101-
update_parameters();
92+
params_ = param_listener_->get_params();
10293

10394
if (!params_.reference_and_state_dof_names.empty())
10495
{
@@ -466,7 +457,7 @@ controller_interface::return_type PidController::update_and_write_commands(
466457
const rclcpp::Time & time, const rclcpp::Duration & period)
467458
{
468459
// check for any parameter updates
469-
update_parameters();
460+
param_listener_->try_get_params(params_);
470461

471462
// Update feedback either from external measured state or from state interfaces
472463
if (params_.use_external_measured_states)

tricycle_controller/src/tricycle_controller.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -221,9 +221,8 @@ CallbackReturn TricycleController::on_configure(const rclcpp_lifecycle::State &
221221
auto logger = get_node()->get_logger();
222222

223223
// update parameters if they have changed
224-
if (param_listener_->is_old(params_))
224+
if (param_listener_->try_update_params(params_))
225225
{
226-
params_ = param_listener_->get_params();
227226
RCLCPP_INFO(logger, "Parameters were updated");
228227
}
229228

0 commit comments

Comments
 (0)