Skip to content

Commit 45fdcd5

Browse files
Add convenience function for setting references
1 parent a394560 commit 45fdcd5

File tree

2 files changed

+22
-75
lines changed

2 files changed

+22
-75
lines changed

pid_controller/test/test_pid_controller.cpp

Lines changed: 8 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
#include "test_pid_controller.hpp"
1919

20-
#include <limits>
2120
#include <memory>
2221
#include <string>
2322
#include <vector>
@@ -246,15 +245,7 @@ TEST_F(PidControllerTest, test_update_logic_feedforward_off)
246245
EXPECT_TRUE(std::isnan(interface));
247246
}
248247

249-
std::shared_ptr<ControllerCommandMsg> msg = std::make_shared<ControllerCommandMsg>();
250-
msg->dof_names = dof_names_;
251-
msg->values.resize(dof_names_.size(), 0.0);
252-
for (size_t i = 0; i < dof_command_values_.size(); ++i)
253-
{
254-
msg->values[i] = dof_command_values_[i];
255-
}
256-
msg->values_dot.resize(dof_names_.size(), std::numeric_limits<double>::quiet_NaN());
257-
controller_->input_ref_.writeFromNonRT(msg);
248+
controller_->set_reference(dof_command_values_);
258249

259250
for (size_t i = 0; i < dof_command_values_.size(); ++i)
260251
{
@@ -308,15 +299,7 @@ TEST_F(PidControllerTest, test_update_logic_feedforward_on_with_zero_feedforward
308299
EXPECT_TRUE(std::isnan(interface));
309300
}
310301

311-
std::shared_ptr<ControllerCommandMsg> msg = std::make_shared<ControllerCommandMsg>();
312-
msg->dof_names = dof_names_;
313-
msg->values.resize(dof_names_.size(), 0.0);
314-
for (size_t i = 0; i < dof_command_values_.size(); ++i)
315-
{
316-
msg->values[i] = dof_command_values_[i];
317-
}
318-
msg->values_dot.resize(dof_names_.size(), std::numeric_limits<double>::quiet_NaN());
319-
controller_->input_ref_.writeFromNonRT(msg);
302+
controller_->set_reference(dof_command_values_);
320303

321304
controller_->control_mode_.writeFromNonRT(feedforward_mode_type::ON);
322305
EXPECT_EQ(*(controller_->control_mode_.readFromRT()), feedforward_mode_type::ON);
@@ -588,15 +571,7 @@ TEST_F(PidControllerTest, test_update_chained_feedforward_with_gain)
588571
ASSERT_EQ(*(controller_->control_mode_.readFromRT()), feedforward_mode_type::ON);
589572

590573
// send a message to update reference interface
591-
std::shared_ptr<ControllerCommandMsg> msg = std::make_shared<ControllerCommandMsg>();
592-
msg->dof_names = controller_->params_.dof_names;
593-
msg->values.resize(msg->dof_names.size(), 0.0);
594-
for (size_t i = 0; i < msg->dof_names.size(); ++i)
595-
{
596-
msg->values[i] = target_value;
597-
}
598-
msg->values_dot.resize(msg->dof_names.size(), std::numeric_limits<double>::quiet_NaN());
599-
controller_->input_ref_.writeFromNonRT(msg);
574+
controller_->set_reference({target_value});
600575
ASSERT_EQ(
601576
controller_->update_reference_from_subscribers(
602577
rclcpp::Time(0), rclcpp::Duration::from_seconds(0.01)),
@@ -654,15 +629,7 @@ TEST_F(PidControllerTest, test_update_chained_feedforward_off_with_gain)
654629
ASSERT_EQ(*(controller_->control_mode_.readFromRT()), feedforward_mode_type::OFF);
655630

656631
// send a message to update reference interface
657-
std::shared_ptr<ControllerCommandMsg> msg = std::make_shared<ControllerCommandMsg>();
658-
msg->dof_names = controller_->params_.dof_names;
659-
msg->values.resize(msg->dof_names.size(), 0.0);
660-
for (size_t i = 0; i < msg->dof_names.size(); ++i)
661-
{
662-
msg->values[i] = target_value;
663-
}
664-
msg->values_dot.resize(msg->dof_names.size(), std::numeric_limits<double>::quiet_NaN());
665-
controller_->input_ref_.writeFromNonRT(msg);
632+
controller_->set_reference({target_value});
666633
ASSERT_EQ(
667634
controller_->update_reference_from_subscribers(
668635
rclcpp::Time(0), rclcpp::Duration::from_seconds(0.01)),
@@ -698,15 +665,7 @@ TEST_F(PidControllerTest, test_save_i_term_off)
698665
ASSERT_EQ(controller_->on_activate(rclcpp_lifecycle::State()), NODE_SUCCESS);
699666
ASSERT_FALSE(controller_->is_in_chained_mode());
700667

701-
std::shared_ptr<ControllerCommandMsg> msg = std::make_shared<ControllerCommandMsg>();
702-
msg->dof_names = dof_names_;
703-
msg->values.resize(dof_names_.size(), 0.0);
704-
for (size_t i = 0; i < dof_command_values_.size(); ++i)
705-
{
706-
msg->values[i] = dof_command_values_[i];
707-
}
708-
msg->values_dot.resize(dof_names_.size(), std::numeric_limits<double>::quiet_NaN());
709-
controller_->input_ref_.writeFromNonRT(msg);
668+
controller_->set_reference(dof_command_values_);
710669

711670
ASSERT_EQ(
712671
controller_->update(rclcpp::Time(0), rclcpp::Duration::from_seconds(0.01)),
@@ -723,16 +682,7 @@ TEST_F(PidControllerTest, test_save_i_term_off)
723682

724683
// deactivate the controller and set command=state
725684
ASSERT_EQ(controller_->on_deactivate(rclcpp_lifecycle::State()), NODE_SUCCESS);
726-
727-
msg = std::make_shared<ControllerCommandMsg>();
728-
msg->dof_names = dof_names_;
729-
msg->values.resize(dof_names_.size(), 0.0);
730-
for (size_t i = 0; i < dof_command_values_.size(); ++i)
731-
{
732-
msg->values[i] = dof_state_values_[i];
733-
}
734-
msg->values_dot.resize(dof_names_.size(), std::numeric_limits<double>::quiet_NaN());
735-
controller_->input_ref_.writeFromNonRT(msg);
685+
controller_->set_reference(dof_state_values_);
736686

737687
// reactivate the controller, the integral term should NOT be saved
738688
ASSERT_EQ(controller_->on_activate(rclcpp_lifecycle::State()), NODE_SUCCESS);
@@ -765,15 +715,7 @@ TEST_F(PidControllerTest, test_save_i_term_on)
765715
ASSERT_EQ(controller_->on_activate(rclcpp_lifecycle::State()), NODE_SUCCESS);
766716
ASSERT_FALSE(controller_->is_in_chained_mode());
767717

768-
std::shared_ptr<ControllerCommandMsg> msg = std::make_shared<ControllerCommandMsg>();
769-
msg->dof_names = dof_names_;
770-
msg->values.resize(dof_names_.size(), 0.0);
771-
for (size_t i = 0; i < dof_command_values_.size(); ++i)
772-
{
773-
msg->values[i] = dof_command_values_[i];
774-
}
775-
msg->values_dot.resize(dof_names_.size(), std::numeric_limits<double>::quiet_NaN());
776-
controller_->input_ref_.writeFromNonRT(msg);
718+
controller_->set_reference(dof_command_values_);
777719

778720
ASSERT_EQ(
779721
controller_->update(rclcpp::Time(0), rclcpp::Duration::from_seconds(0.01)),
@@ -790,16 +732,7 @@ TEST_F(PidControllerTest, test_save_i_term_on)
790732

791733
// deactivate the controller and set command=state
792734
ASSERT_EQ(controller_->on_deactivate(rclcpp_lifecycle::State()), NODE_SUCCESS);
793-
794-
msg = std::make_shared<ControllerCommandMsg>();
795-
msg->dof_names = dof_names_;
796-
msg->values.resize(dof_names_.size(), 0.0);
797-
for (size_t i = 0; i < dof_command_values_.size(); ++i)
798-
{
799-
msg->values[i] = dof_state_values_[i];
800-
}
801-
msg->values_dot.resize(dof_names_.size(), std::numeric_limits<double>::quiet_NaN());
802-
controller_->input_ref_.writeFromNonRT(msg);
735+
controller_->set_reference(dof_state_values_);
803736

804737
// reactivate the controller, the integral term should be saved
805738
ASSERT_EQ(controller_->on_activate(rclcpp_lifecycle::State()), NODE_SUCCESS);

pid_controller/test/test_pid_controller.hpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#include <gmock/gmock.h>
2222

2323
#include <chrono>
24+
#include <limits>
2425
#include <memory>
2526
#include <string>
2627
#include <utility>
@@ -104,6 +105,19 @@ class TestablePidController : public pid_controller::PidController
104105
{
105106
wait_for_command(executor, timeout);
106107
}
108+
109+
void set_reference(const std::vector<double> & target_value)
110+
{
111+
std::shared_ptr<ControllerCommandMsg> msg = std::make_shared<ControllerCommandMsg>();
112+
msg->dof_names = params_.dof_names;
113+
msg->values.resize(msg->dof_names.size(), 0.0);
114+
for (size_t i = 0; i < msg->dof_names.size(); ++i)
115+
{
116+
msg->values[i] = target_value[i];
117+
}
118+
msg->values_dot.resize(msg->dof_names.size(), std::numeric_limits<double>::quiet_NaN());
119+
input_ref_.writeFromNonRT(msg);
120+
}
107121
};
108122

109123
// We are using template class here for easier reuse of Fixture in specializations of controllers

0 commit comments

Comments
 (0)