From 7ec783b9744110c54f37a9d5823771f052eabe5c Mon Sep 17 00:00:00 2001 From: Lennart Nachtigall Date: Thu, 15 Aug 2024 08:04:58 +0200 Subject: [PATCH 1/3] fix segfault at reconfigure --- .../admittance_controller/admittance_rule_impl.hpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/admittance_controller/include/admittance_controller/admittance_rule_impl.hpp b/admittance_controller/include/admittance_controller/admittance_rule_impl.hpp index 77f1277b35..1d06846220 100644 --- a/admittance_controller/include/admittance_controller/admittance_rule_impl.hpp +++ b/admittance_controller/include/admittance_controller/admittance_rule_impl.hpp @@ -46,11 +46,14 @@ controller_interface::return_type AdmittanceRule::configure( { try { - kinematics_loader_ = - std::make_shared>( - parameters_.kinematics.plugin_package, "kinematics_interface::KinematicsInterface"); - kinematics_ = std::unique_ptr( - kinematics_loader_->createUnmanagedInstance(parameters_.kinematics.plugin_name)); + //Do not create a new instance in case of a reinit + if(!kinematics_loader_ ){ + kinematics_loader_ = + std::make_shared>( + parameters_.kinematics.plugin_package, "kinematics_interface::KinematicsInterface"); + kinematics_ = std::unique_ptr( + kinematics_loader_->createUnmanagedInstance(parameters_.kinematics.plugin_name)); + } if (!kinematics_->initialize( node->get_node_parameters_interface(), parameters_.kinematics.tip)) { From ca0dcb4d3ef97981ba0d8fa4f1d9784eaa4879d3 Mon Sep 17 00:00:00 2001 From: Lennart Nachtigall Date: Thu, 15 Aug 2024 08:13:40 +0200 Subject: [PATCH 2/3] run formatting --- .../include/admittance_controller/admittance_rule_impl.hpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/admittance_controller/include/admittance_controller/admittance_rule_impl.hpp b/admittance_controller/include/admittance_controller/admittance_rule_impl.hpp index 1d06846220..b2aec905ac 100644 --- a/admittance_controller/include/admittance_controller/admittance_rule_impl.hpp +++ b/admittance_controller/include/admittance_controller/admittance_rule_impl.hpp @@ -46,8 +46,9 @@ controller_interface::return_type AdmittanceRule::configure( { try { - //Do not create a new instance in case of a reinit - if(!kinematics_loader_ ){ + // Do not create a new instance in case of a reinit + if (!kinematics_loader_) + { kinematics_loader_ = std::make_shared>( parameters_.kinematics.plugin_package, "kinematics_interface::KinematicsInterface"); From 9c7c7331678dc0db567f8073239141f56f937ab9 Mon Sep 17 00:00:00 2001 From: Lennart Nachtigall Date: Wed, 21 Aug 2024 10:04:35 +0200 Subject: [PATCH 3/3] Adapt fix to comments --- .../admittance_rule_impl.hpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/admittance_controller/include/admittance_controller/admittance_rule_impl.hpp b/admittance_controller/include/admittance_controller/admittance_rule_impl.hpp index b2aec905ac..cab8b4cf45 100644 --- a/admittance_controller/include/admittance_controller/admittance_rule_impl.hpp +++ b/admittance_controller/include/admittance_controller/admittance_rule_impl.hpp @@ -46,15 +46,17 @@ controller_interface::return_type AdmittanceRule::configure( { try { - // Do not create a new instance in case of a reinit - if (!kinematics_loader_) + // Make sure we destroy the interface first. Otherwise we might run into a segfault + if (kinematics_loader_) { - kinematics_loader_ = - std::make_shared>( - parameters_.kinematics.plugin_package, "kinematics_interface::KinematicsInterface"); - kinematics_ = std::unique_ptr( - kinematics_loader_->createUnmanagedInstance(parameters_.kinematics.plugin_name)); + kinematics_.reset(); } + kinematics_loader_ = + std::make_shared>( + parameters_.kinematics.plugin_package, "kinematics_interface::KinematicsInterface"); + kinematics_ = std::unique_ptr( + kinematics_loader_->createUnmanagedInstance(parameters_.kinematics.plugin_name)); + if (!kinematics_->initialize( node->get_node_parameters_interface(), parameters_.kinematics.tip)) {