29#ifndef CONTROL_TOOLBOX__PID_ROS_HPP_
30#define CONTROL_TOOLBOX__PID_ROS_HPP_
35#include "control_msgs/msg/pid_state.hpp"
37#include "rclcpp/clock.hpp"
38#include "rclcpp/duration.hpp"
39#include "rclcpp/node.hpp"
41#include "realtime_tools/realtime_buffer.hpp"
42#include "realtime_tools/realtime_publisher.hpp"
44#include "control_toolbox/pid.hpp"
67 template <
class NodeT>
69 std::shared_ptr<NodeT> node_ptr,
const std::string & param_prefix,
70 const std::string & topic_prefix)
72 node_ptr->get_node_base_interface(), node_ptr->get_node_logging_interface(),
73 node_ptr->get_node_parameters_interface(), node_ptr->get_node_topics_interface(),
74 param_prefix, topic_prefix, !topic_prefix.empty())
92 template <
class NodeT>
94 std::shared_ptr<NodeT> node_ptr,
const std::string & param_prefix,
95 const std::string & topic_prefix,
bool activate_state_publisher)
97 node_ptr->get_node_base_interface(), node_ptr->get_node_logging_interface(),
98 node_ptr->get_node_parameters_interface(), node_ptr->get_node_topics_interface(),
99 param_prefix, topic_prefix, activate_state_publisher)
115 rclcpp::node_interfaces::NodeBaseInterface::SharedPtr node_base,
116 rclcpp::node_interfaces::NodeLoggingInterface::SharedPtr node_logging,
117 rclcpp::node_interfaces::NodeParametersInterface::SharedPtr node_params,
118 rclcpp::node_interfaces::NodeTopicsInterface::SharedPtr topics_interface,
119 const std::string & param_prefix,
const std::string & topic_prefix,
120 bool activate_state_publisher);
139 double p,
double i,
double d,
double u_max,
double u_min,
161 void reset(
bool save_i_term);
186 double compute_command(
double error,
double error_dot,
const rclcpp::Duration & dt);
213 double p,
double i,
double d,
double u_max,
double u_min,
261 inline rclcpp::node_interfaces::OnSetParametersCallbackHandle::SharedPtr
264 return parameter_callback_;
268 std::string topic_prefix_;
269 std::string param_prefix_;
272 void set_parameter_event_callback();
274 void publish_pid_state(
double cmd,
double error, rclcpp::Duration dt);
276 void declare_param(
const std::string & param_name, rclcpp::ParameterValue param_value);
278 bool get_double_param(
const std::string & param_name,
double & value);
280 bool get_boolean_param(
const std::string & param_name,
bool & value);
282 bool get_string_param(
const std::string & param_name, std::string & value);
284 rclcpp::node_interfaces::OnSetParametersCallbackHandle::SharedPtr parameter_callback_;
286 rclcpp::node_interfaces::NodeBaseInterface::SharedPtr node_base_;
287 rclcpp::node_interfaces::NodeLoggingInterface::SharedPtr node_logging_;
288 rclcpp::node_interfaces::NodeParametersInterface::SharedPtr node_params_;
289 rclcpp::node_interfaces::NodeTopicsInterface::SharedPtr topics_interface_;
291 std::shared_ptr<realtime_tools::RealtimePublisher<control_msgs::msg::PidState>> rt_state_pub_;
292 control_msgs::msg::PidState pid_state_msg_;
293 std::shared_ptr<rclcpp::Publisher<control_msgs::msg::PidState>> state_pub_;