62 auto node =
context_->moveit_cpp_->getNode();
64 execute_action_server_ = rclcpp_action::create_server<ExecTrajectory>(
65 node->get_node_base_interface(), node->get_node_clock_interface(), node->get_node_logging_interface(),
66 node->get_node_waitables_interface(), EXECUTE_ACTION_NAME,
67 [](
const rclcpp_action::GoalUUID& ,
const std::shared_ptr<const ExecTrajectory::Goal>& ) {
68 return rclcpp_action::GoalResponse::ACCEPT_AND_EXECUTE;
70 [](
const std::shared_ptr<ExecTrajectoryGoal>& ) { return rclcpp_action::CancelResponse::ACCEPT; },
71 [
this](
const auto& goal) { executePathCallback(goal); });
74void MoveGroupExecuteTrajectoryAction::executePathCallback(
const std::shared_ptr<ExecTrajectoryGoal>& goal)
76 auto action_res = std::make_shared<ExecTrajectory::Result>();
77 if (!
context_->trajectory_execution_manager_)
79 const std::string response =
"Cannot execute trajectory since ~allow_trajectory_execution was set to false";
80 action_res->error_code.val = moveit_msgs::msg::MoveItErrorCodes::CONTROL_FAILED;
81 goal->abort(action_res);
85 executePath(goal, action_res);
88 auto fb = std::make_shared<ExecTrajectory::Feedback>();
90 if (action_res->error_code.val == moveit_msgs::msg::MoveItErrorCodes::SUCCESS)
92 goal->publish_feedback(fb);
93 goal->succeed(action_res);
97 goal->publish_feedback(fb);
98 goal->abort(action_res);
101 setExecuteTrajectoryState(
IDLE, goal);
104void MoveGroupExecuteTrajectoryAction::executePath(
const std::shared_ptr<ExecTrajectoryGoal>& goal,
105 std::shared_ptr<ExecTrajectory::Result>& action_res)
107 RCLCPP_INFO(
getLogger(),
"Execution request received");
109 context_->trajectory_execution_manager_->clear();
110 if (
context_->trajectory_execution_manager_->push(goal->get_goal()->trajectory, goal->get_goal()->controller_names))
112 setExecuteTrajectoryState(
MONITOR, goal);
113 context_->trajectory_execution_manager_->execute();
117 action_res->error_code.val = moveit_msgs::msg::MoveItErrorCodes::SUCCESS;
121 action_res->error_code.val = moveit_msgs::msg::MoveItErrorCodes::PREEMPTED;
125 action_res->error_code.val = moveit_msgs::msg::MoveItErrorCodes::TIMED_OUT;
129 action_res->error_code.val = moveit_msgs::msg::MoveItErrorCodes::CONTROL_FAILED;
135 action_res->error_code.val = moveit_msgs::msg::MoveItErrorCodes::CONTROL_FAILED;
139void MoveGroupExecuteTrajectoryAction::preemptExecuteTrajectoryCallback()
141 context_->trajectory_execution_manager_->stopExecution(
true);
144void MoveGroupExecuteTrajectoryAction::setExecuteTrajectoryState(
MoveGroupState state,
145 const std::shared_ptr<ExecTrajectoryGoal>& goal)
147 auto execute_feedback = std::make_shared<ExecTrajectory::Feedback>();
149 goal->publish_feedback(execute_feedback);
154#include <pluginlib/class_list_macros.hpp>
PLUGINLIB_EXPORT_CLASS(cached_ik_kinematics_plugin::CachedIKKinematicsPlugin< kdl_kinematics_plugin::KDLKinematicsPlugin >, kinematics::KinematicsBase)
MoveGroupContextPtr context_
std::string getActionResultString(const moveit_msgs::msg::MoveItErrorCodes &error_code, bool planned_trajectory_empty, bool plan_only)
std::string stateToStr(MoveGroupState state) const
MoveGroupExecuteTrajectoryAction()
void initialize() override
rclcpp::Logger getLogger()
rclcpp::Logger getLogger(const std::string &name)
Creates a namespaced logger.
The reported execution status.
std::string asString() const
Convert the execution status to a string.