@@ -85,7 +85,11 @@ TEST_F(PidControllerTest, check_exported_interfaces)
8585
8686 // check ref itfs
8787 auto ref_if_conf = controller_->export_reference_interfaces ();
88- ASSERT_EQ (ref_if_conf.size (), dof_state_values_.size ());
88+ size_t expected_ref_size = dof_names_.size () * state_interfaces_.size () +
89+ (controller_->params_ .export_gain_references
90+ ? dof_names_.size () * controller_->GAIN_INTERFACES .size ()
91+ : 0 );
92+ ASSERT_EQ (ref_if_conf.size (), expected_ref_size);
8993 size_t ri_index = 0 ;
9094 for (const auto & interface : state_interfaces_)
9195 {
@@ -141,8 +145,11 @@ TEST_F(PidControllerTest, activate_success)
141145 {
142146 EXPECT_TRUE (std::isnan (cmd));
143147 }
144-
145- EXPECT_EQ (controller_->reference_interfaces_ .size (), dof_state_values_.size ());
148+ size_t expected_ref_size = dof_names_.size () * state_interfaces_.size () +
149+ (controller_->params_ .export_gain_references
150+ ? dof_names_.size () * controller_->GAIN_INTERFACES .size ()
151+ : 0 );
152+ EXPECT_EQ (controller_->reference_interfaces_ .size (), expected_ref_size);
146153 for (const auto & interface : controller_->reference_interfaces_ )
147154 {
148155 EXPECT_TRUE (std::isnan (interface));
@@ -226,10 +233,12 @@ TEST_F(PidControllerTest, test_update_logic_zero_feedforward_gain)
226233 ASSERT_EQ (
227234 controller_->update (rclcpp::Time (0 ), rclcpp::Duration::from_seconds (0.01 )),
228235 controller_interface::return_type::OK);
229-
230- EXPECT_EQ (
231- controller_->reference_interfaces_ .size (), dof_names_.size () * state_interfaces_.size ());
232- EXPECT_EQ (controller_->reference_interfaces_ .size (), dof_state_values_.size ());
236+ size_t expected_ref_size = dof_names_.size () * state_interfaces_.size () +
237+ (controller_->params_ .export_gain_references
238+ ? dof_names_.size () * controller_->GAIN_INTERFACES .size ()
239+ : 0 );
240+ EXPECT_EQ (controller_->reference_interfaces_ .size (), expected_ref_size);
241+ EXPECT_EQ (controller_->reference_interfaces_ .size (), expected_ref_size);
233242 for (size_t i = 0 ; i < dof_command_values_.size (); ++i)
234243 {
235244 EXPECT_TRUE (std::isnan (controller_->input_ref_ .get ().values [i]));
@@ -284,10 +293,13 @@ TEST_F(PidControllerTest, test_update_logic_chainable_not_use_subscriber_update)
284293 controller_interface::return_type::OK);
285294
286295 ASSERT_TRUE (controller_->is_in_chained_mode ());
296+ size_t expected_ref_size = dof_names_.size () * state_interfaces_.size () +
297+ (controller_->params_ .export_gain_references
298+ ? dof_names_.size () * controller_->GAIN_INTERFACES .size ()
299+ : 0 );
287300
288- EXPECT_EQ (
289- controller_->reference_interfaces_ .size (), dof_names_.size () * state_interfaces_.size ());
290- EXPECT_EQ (controller_->reference_interfaces_ .size (), dof_state_values_.size ());
301+ EXPECT_EQ (controller_->reference_interfaces_ .size (), expected_ref_size);
302+ EXPECT_EQ (controller_->reference_interfaces_ .size (), expected_ref_size);
291303
292304 // check the command value
293305 // ref = 5.0, state = 1.1, ds = 0.01, p_gain = 1.0, i_gain = 2.0, d_gain = 3.0
@@ -435,10 +447,20 @@ TEST_F(PidControllerTest, receive_message_and_publish_updated_status)
435447 controller_->update (rclcpp::Time (0 ), rclcpp::Duration::from_seconds (0.01 )),
436448 controller_interface::return_type::OK);
437449
438- for (size_t i = 0 ; i < controller_->reference_interfaces_ .size (); ++i)
450+ size_t num_control_references = dof_names_.size () * state_interfaces_.size ();
451+
452+ for (size_t i = 0 ; i < num_control_references; ++i)
439453 {
440454 ASSERT_EQ (controller_->reference_interfaces_ [i], 0.45 );
441455 }
456+ if (controller_->params_ .export_gain_references )
457+ {
458+ for (size_t i = num_control_references; i < controller_->reference_interfaces_ .size (); ++i)
459+ {
460+ // Check the remaining interfaces (P, I, D gains) are NaN
461+ EXPECT_TRUE (std::isnan (controller_->reference_interfaces_ [i]));
462+ }
463+ }
442464
443465 subscribe_and_get_messages (msg);
444466
0 commit comments