2121#include < string>
2222#include < vector>
2323
24- using pid_controller::feedforward_mode_type;
25-
2624class PidControllerTest : public PidControllerFixture <TestablePidController>
2725{
2826};
@@ -205,21 +203,68 @@ TEST_F(PidControllerTest, test_feedforward_mode_service)
205203 executor.add_node (service_caller_node_->get_node_base_interface ());
206204
207205 // initially set to OFF
208- ASSERT_EQ (*(controller_->control_mode_ .readFromRT ()), feedforward_mode_type::OFF );
206+ ASSERT_EQ (*(controller_->feedforward_mode_enabled_ .readFromRT ()), false );
209207
210208 ASSERT_EQ (controller_->on_configure (rclcpp_lifecycle::State ()), NODE_SUCCESS);
211209 ASSERT_EQ (controller_->on_activate (rclcpp_lifecycle::State ()), NODE_SUCCESS);
212210
213211 // should stay false
214- ASSERT_EQ (*(controller_->control_mode_ .readFromRT ()), feedforward_mode_type::OFF );
212+ ASSERT_EQ (*(controller_->feedforward_mode_enabled_ .readFromRT ()), false );
215213
216214 // set to true
217215 ASSERT_NO_THROW (call_service (true , executor));
218- ASSERT_EQ (*(controller_->control_mode_ .readFromRT ()), feedforward_mode_type::ON );
216+ ASSERT_EQ (*(controller_->feedforward_mode_enabled_ .readFromRT ()), true );
219217
220218 // set back to false
221219 ASSERT_NO_THROW (call_service (false , executor));
222- ASSERT_EQ (*(controller_->control_mode_ .readFromRT ()), feedforward_mode_type::OFF);
220+ ASSERT_EQ (*(controller_->feedforward_mode_enabled_ .readFromRT ()), false );
221+ }
222+
223+ TEST_F (PidControllerTest, test_feedforward_mode_parameter)
224+ {
225+ SetUpController ();
226+
227+ // Check updating mode during on_configure
228+
229+ // initially set to OFF
230+ ASSERT_EQ (*(controller_->feedforward_mode_enabled_ .readFromRT ()), false );
231+ ASSERT_EQ (controller_->on_configure (rclcpp_lifecycle::State ()), NODE_SUCCESS);
232+ ASSERT_EQ (*(controller_->feedforward_mode_enabled_ .readFromRT ()), false );
233+
234+ // Reconfigure after setting parameter to true
235+ ASSERT_EQ (controller_->on_cleanup (rclcpp_lifecycle::State ()), NODE_SUCCESS);
236+ EXPECT_TRUE (controller_->get_node ()->set_parameter ({" enable_feedforward" , true }).successful );
237+ ASSERT_EQ (controller_->on_configure (rclcpp_lifecycle::State ()), NODE_SUCCESS);
238+ ASSERT_EQ (*(controller_->feedforward_mode_enabled_ .readFromRT ()), true );
239+ ASSERT_EQ (controller_->on_cleanup (rclcpp_lifecycle::State ()), NODE_SUCCESS);
240+ EXPECT_TRUE (controller_->get_node ()->set_parameter ({" enable_feedforward" , false }).successful );
241+
242+ // initially set to ON
243+ ASSERT_EQ (*(controller_->feedforward_mode_enabled_ .readFromRT ()), true );
244+ ASSERT_EQ (controller_->on_configure (rclcpp_lifecycle::State ()), NODE_SUCCESS);
245+ ASSERT_EQ (*(controller_->feedforward_mode_enabled_ .readFromRT ()), false );
246+
247+ // Check updating mode during update_and_write_commands
248+ ASSERT_EQ (controller_->on_activate (rclcpp_lifecycle::State ()), NODE_SUCCESS);
249+ ASSERT_EQ (*(controller_->feedforward_mode_enabled_ .readFromRT ()), false );
250+
251+ // Switch to ON
252+ ASSERT_EQ (
253+ controller_->update (rclcpp::Time (0 ), rclcpp::Duration::from_seconds (0.01 )),
254+ controller_interface::return_type::OK);
255+ ASSERT_EQ (*(controller_->feedforward_mode_enabled_ .readFromRT ()), false );
256+ EXPECT_TRUE (controller_->get_node ()->set_parameter ({" enable_feedforward" , true }).successful );
257+ ASSERT_EQ (
258+ controller_->update (rclcpp::Time (0 ), rclcpp::Duration::from_seconds (0.01 )),
259+ controller_interface::return_type::OK);
260+ ASSERT_EQ (*(controller_->feedforward_mode_enabled_ .readFromRT ()), true );
261+
262+ // Switch to OFF
263+ EXPECT_TRUE (controller_->get_node ()->set_parameter ({" enable_feedforward" , false }).successful );
264+ ASSERT_EQ (
265+ controller_->update (rclcpp::Time (0 ), rclcpp::Duration::from_seconds (0.01 )),
266+ controller_interface::return_type::OK);
267+ ASSERT_EQ (*(controller_->feedforward_mode_enabled_ .readFromRT ()), false );
223268}
224269
225270/* *
@@ -239,7 +284,7 @@ TEST_F(PidControllerTest, test_update_logic_feedforward_off)
239284 ASSERT_EQ (controller_->on_activate (rclcpp_lifecycle::State ()), NODE_SUCCESS);
240285 ASSERT_FALSE (controller_->is_in_chained_mode ());
241286 EXPECT_TRUE (std::isnan ((*(controller_->input_ref_ .readFromRT ()))->values [0 ]));
242- EXPECT_EQ (*(controller_->control_mode_ .readFromRT ()), feedforward_mode_type::OFF );
287+ EXPECT_EQ (*(controller_->feedforward_mode_enabled_ .readFromRT ()), false );
243288 for (const auto & interface : controller_->reference_interfaces_ )
244289 {
245290 EXPECT_TRUE (std::isnan (interface));
@@ -258,7 +303,7 @@ TEST_F(PidControllerTest, test_update_logic_feedforward_off)
258303 controller_->update (rclcpp::Time (0 ), rclcpp::Duration::from_seconds (0.01 )),
259304 controller_interface::return_type::OK);
260305
261- EXPECT_EQ (*(controller_->control_mode_ .readFromRT ()), feedforward_mode_type::OFF );
306+ EXPECT_EQ (*(controller_->feedforward_mode_enabled_ .readFromRT ()), false );
262307 EXPECT_EQ (
263308 controller_->reference_interfaces_ .size (), dof_names_.size () * state_interfaces_.size ());
264309 EXPECT_EQ (controller_->reference_interfaces_ .size (), dof_state_values_.size ());
@@ -293,16 +338,16 @@ TEST_F(PidControllerTest, test_update_logic_feedforward_on_with_zero_feedforward
293338 ASSERT_EQ (controller_->on_activate (rclcpp_lifecycle::State ()), NODE_SUCCESS);
294339 ASSERT_FALSE (controller_->is_in_chained_mode ());
295340 EXPECT_TRUE (std::isnan ((*(controller_->input_ref_ .readFromRT ()))->values [0 ]));
296- EXPECT_EQ (*(controller_->control_mode_ .readFromRT ()), feedforward_mode_type::OFF );
341+ EXPECT_EQ (*(controller_->feedforward_mode_enabled_ .readFromRT ()), false );
297342 for (const auto & interface : controller_->reference_interfaces_ )
298343 {
299344 EXPECT_TRUE (std::isnan (interface));
300345 }
301346
302347 controller_->set_reference (dof_command_values_);
303348
304- controller_->control_mode_ .writeFromNonRT (feedforward_mode_type::ON );
305- EXPECT_EQ (*(controller_->control_mode_ .readFromRT ()), feedforward_mode_type::ON );
349+ controller_->feedforward_mode_enabled_ .writeFromNonRT (true );
350+ EXPECT_EQ (*(controller_->feedforward_mode_enabled_ .readFromRT ()), true );
306351
307352 for (size_t i = 0 ; i < dof_command_values_.size (); ++i)
308353 {
@@ -315,7 +360,7 @@ TEST_F(PidControllerTest, test_update_logic_feedforward_on_with_zero_feedforward
315360 controller_->update (rclcpp::Time (0 ), rclcpp::Duration::from_seconds (0.01 )),
316361 controller_interface::return_type::OK);
317362
318- EXPECT_EQ (*(controller_->control_mode_ .readFromRT ()), feedforward_mode_type::ON );
363+ EXPECT_EQ (*(controller_->feedforward_mode_enabled_ .readFromRT ()), true );
319364 EXPECT_EQ (
320365 controller_->reference_interfaces_ .size (), dof_names_.size () * state_interfaces_.size ());
321366 EXPECT_EQ (controller_->reference_interfaces_ .size (), dof_state_values_.size ());
@@ -355,7 +400,7 @@ TEST_F(PidControllerTest, test_update_logic_chainable_not_use_subscriber_update)
355400 ASSERT_EQ (controller_->on_activate (rclcpp_lifecycle::State ()), NODE_SUCCESS);
356401 ASSERT_TRUE (controller_->is_in_chained_mode ());
357402 // feedforward mode is off as default, use this for convenience
358- EXPECT_EQ (*(controller_->control_mode_ .readFromRT ()), feedforward_mode_type::OFF );
403+ EXPECT_EQ (*(controller_->feedforward_mode_enabled_ .readFromRT ()), false );
359404
360405 // update reference interface which will be used for calculation
361406 const double ref_interface_value = 5.0 ;
@@ -567,8 +612,8 @@ TEST_F(PidControllerTest, test_update_chained_feedforward_with_gain)
567612 ASSERT_TRUE (controller_->is_in_chained_mode ());
568613
569614 // turn on feedforward
570- controller_->control_mode_ .writeFromNonRT (feedforward_mode_type::ON );
571- ASSERT_EQ (*(controller_->control_mode_ .readFromRT ()), feedforward_mode_type::ON );
615+ controller_->feedforward_mode_enabled_ .writeFromNonRT (true );
616+ ASSERT_EQ (*(controller_->feedforward_mode_enabled_ .readFromRT ()), true );
572617
573618 // send a message to update reference interface
574619 controller_->set_reference ({target_value});
@@ -626,7 +671,7 @@ TEST_F(PidControllerTest, test_update_chained_feedforward_off_with_gain)
626671 ASSERT_TRUE (controller_->is_in_chained_mode ());
627672
628673 // feedforward by default is OFF
629- ASSERT_EQ (*(controller_->control_mode_ .readFromRT ()), feedforward_mode_type::OFF );
674+ ASSERT_EQ (*(controller_->feedforward_mode_enabled_ .readFromRT ()), false );
630675
631676 // send a message to update reference interface
632677 controller_->set_reference ({target_value});
0 commit comments