64 JOINT_TRAJECTORY_CONTROLLER_PUBLIC
67 JOINT_TRAJECTORY_CONTROLLER_PUBLIC
68 controller_interface::return_type init(
const std::string & controller_name)
override;
74 JOINT_TRAJECTORY_CONTROLLER_PUBLIC
81 JOINT_TRAJECTORY_CONTROLLER_PUBLIC
84 JOINT_TRAJECTORY_CONTROLLER_PUBLIC
85 controller_interface::return_type update()
override;
87 JOINT_TRAJECTORY_CONTROLLER_PUBLIC
88 rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn on_configure(
89 const rclcpp_lifecycle::State & previous_state)
override;
91 JOINT_TRAJECTORY_CONTROLLER_PUBLIC
92 rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn on_activate(
93 const rclcpp_lifecycle::State & previous_state)
override;
95 JOINT_TRAJECTORY_CONTROLLER_PUBLIC
96 rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn on_deactivate(
97 const rclcpp_lifecycle::State & previous_state)
override;
99 JOINT_TRAJECTORY_CONTROLLER_PUBLIC
100 rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn on_cleanup(
101 const rclcpp_lifecycle::State & previous_state)
override;
103 JOINT_TRAJECTORY_CONTROLLER_PUBLIC
104 rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn on_error(
105 const rclcpp_lifecycle::State & previous_state)
override;
107 JOINT_TRAJECTORY_CONTROLLER_PUBLIC
108 rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn on_shutdown(
109 const rclcpp_lifecycle::State & previous_state)
override;
112 std::vector<std::string> joint_names_;
113 std::vector<std::string> command_interface_types_;
114 std::vector<std::string> state_interface_types_;
118 const std::vector<std::string> allowed_interface_types_ = {
119 hardware_interface::HW_IF_POSITION,
120 hardware_interface::HW_IF_VELOCITY,
121 hardware_interface::HW_IF_ACCELERATION,
122 hardware_interface::HW_IF_EFFORT,
129 trajectory_msgs::msg::JointTrajectoryPoint last_commanded_state_;
134 template <
typename T>
135 using InterfaceReferences = std::vector<std::vector<std::reference_wrapper<T>>>;
137 InterfaceReferences<hardware_interface::LoanedCommandInterface> joint_command_interface_;
138 InterfaceReferences<hardware_interface::LoanedStateInterface> joint_state_interface_;
140 bool has_velocity_state_interface_ =
false;
141 bool has_acceleration_state_interface_ =
false;
142 bool has_position_command_interface_ =
false;
143 bool has_velocity_command_interface_ =
false;
144 bool has_acceleration_command_interface_ =
false;
153 bool subscriber_is_active_ =
false;
154 rclcpp::Subscription<trajectory_msgs::msg::JointTrajectory>::SharedPtr joint_command_subscriber_ =
157 std::shared_ptr<Trajectory> * traj_point_active_ptr_ =
nullptr;
158 std::shared_ptr<Trajectory> traj_external_point_ptr_ =
nullptr;
159 std::shared_ptr<Trajectory> traj_home_point_ptr_ =
nullptr;
160 std::shared_ptr<trajectory_msgs::msg::JointTrajectory> traj_msg_home_ptr_ =
nullptr;
162 traj_msg_external_point_ptr_;
166 bool is_halted_ =
true;
168 using ControllerStateMsg = control_msgs::msg::JointTrajectoryControllerState;
170 using StatePublisherPtr = std::unique_ptr<StatePublisher>;
171 rclcpp::Publisher<ControllerStateMsg>::SharedPtr publisher_;
172 StatePublisherPtr state_publisher_;
174 rclcpp::Duration state_publisher_period_ = rclcpp::Duration(20ms);
175 rclcpp::Time last_state_publish_time_;
177 using FollowJTrajAction = control_msgs::action::FollowJointTrajectory;
179 using RealtimeGoalHandlePtr = std::shared_ptr<RealtimeGoalHandle>;
182 rclcpp_action::Server<FollowJTrajAction>::SharedPtr action_server_;
183 bool allow_partial_joints_goal_ =
false;
185 rclcpp::TimerBase::SharedPtr goal_handle_timer_;
186 rclcpp::Duration action_monitor_period_ = rclcpp::Duration(50ms);
189 JOINT_TRAJECTORY_CONTROLLER_PUBLIC
190 rclcpp_action::GoalResponse goal_callback(
191 const rclcpp_action::GoalUUID & uuid, std::shared_ptr<const FollowJTrajAction::Goal> goal);
192 JOINT_TRAJECTORY_CONTROLLER_PUBLIC
193 rclcpp_action::CancelResponse cancel_callback(
195 JOINT_TRAJECTORY_CONTROLLER_PUBLIC
196 void feedback_setup_callback(
201 JOINT_TRAJECTORY_CONTROLLER_PUBLIC
202 void fill_partial_goal(
203 std::shared_ptr<trajectory_msgs::msg::JointTrajectory> trajectory_msg)
const;
205 JOINT_TRAJECTORY_CONTROLLER_PUBLIC
206 void sort_to_local_joint_order(
207 std::shared_ptr<trajectory_msgs::msg::JointTrajectory> trajectory_msg);
208 JOINT_TRAJECTORY_CONTROLLER_PUBLIC
209 bool validate_trajectory_msg(
const trajectory_msgs::msg::JointTrajectory & trajectory)
const;
210 JOINT_TRAJECTORY_CONTROLLER_PUBLIC
211 void add_new_trajectory_msg(
212 const std::shared_ptr<trajectory_msgs::msg::JointTrajectory> & traj_msg);
213 JOINT_TRAJECTORY_CONTROLLER_PUBLIC
214 bool validate_trajectory_point_field(
215 size_t joint_names_size,
const std::vector<double> & vector_field,
216 const std::string & string_for_vector_field,
size_t i,
bool allow_empty)
const;
220 JOINT_TRAJECTORY_CONTROLLER_PUBLIC
221 void preempt_active_goal();
222 JOINT_TRAJECTORY_CONTROLLER_PUBLIC
223 void set_hold_position();
225 JOINT_TRAJECTORY_CONTROLLER_PUBLIC
228 using JointTrajectoryPoint = trajectory_msgs::msg::JointTrajectoryPoint;
229 JOINT_TRAJECTORY_CONTROLLER_PUBLIC
231 const JointTrajectoryPoint & desired_state,
const JointTrajectoryPoint & current_state,
232 const JointTrajectoryPoint & state_error);
234 void read_state_from_hardware(JointTrajectoryPoint & state);
236 bool read_state_from_command_interfaces(JointTrajectoryPoint & state);
239 bool contains_interface_type(
240 const std::vector<std::string> & interface_type_list,
const std::string & interface_type);
242 void resize_joint_trajectory_point(
243 trajectory_msgs::msg::JointTrajectoryPoint & point,
size_t size);