17 #ifndef COMMAND_LIST_MANAGER_H 18 #define COMMAND_LIST_MANAGER_H 22 #include <boost/optional.hpp> 26 #include <moveit_msgs/MotionPlanResponse.h> 28 #include "pilz_msgs/MotionSequenceRequest.h" 36 using RobotTrajCont = std::vector<robot_trajectory::RobotTrajectoryPtr>;
86 const pilz_msgs::MotionSequenceRequest& req_list);
113 const planning_pipeline::PlanningPipelinePtr& planning_pipeline,
114 const pilz_msgs::MotionSequenceRequest &req_list)
const;
122 const double radii_A,
124 const double radii_B)
const;
132 const std::string &group_name);
139 const std::string &group_name,
140 moveit_msgs::RobotState& start_state);
151 const pilz_msgs::MotionSequenceRequest &req_list);
160 const pilz_msgs::MotionSequenceItem& item_A,
161 const pilz_msgs::MotionSequenceItem& item_B);
178 const std::string& group_name);
184 static void checkStartStates(
const pilz_msgs::MotionSequenceRequest &req_list);
206 if(req_list.items.back().blend_radius != 0.0)
208 throw LastBlendRadiusNotZeroException(
"The last blending radius must be zero");
214 #endif // COMMAND_LIST_MANAGER_H Helper class to encapsulate the merge and blend process of trajectories.
PlanComponentsBuilder plan_comp_builder_
Builder to construct the container containing the final trajectories.
static RadiiCont extractBlendRadii(const moveit::core::RobotModel &model, const pilz_msgs::MotionSequenceRequest &req_list)
std::vector< planning_interface::MotionPlanResponse > MotionResponseCont
static bool isInvalidBlendRadii(const moveit::core::RobotModel &model, const pilz_msgs::MotionSequenceItem &item_A, const pilz_msgs::MotionSequenceItem &item_B)
bool checkRadiiForOverlap(const robot_trajectory::RobotTrajectory &traj_A, const double radii_A, const robot_trajectory::RobotTrajectory &traj_B, const double radii_B) const
boost::optional< const robot_state::RobotState & > RobotState_OptRef
std::vector< robot_trajectory::RobotTrajectoryPtr > RobotTrajCont
std::vector< std::string > GroupNamesCont
CommandListManager(const ros::NodeHandle &nh, const robot_model::RobotModelConstPtr &model)
static GroupNamesCont getGroupNames(const pilz_msgs::MotionSequenceRequest &req_list)
CREATE_MOVEIT_ERROR_CODE_EXCEPTION(NegativeBlendRadiusException, moveit_msgs::MoveItErrorCodes::INVALID_MOTION_PLAN)
This class orchestrates the planning of single commands and command lists.
MotionResponseCont solveSequenceItems(const planning_scene::PlanningSceneConstPtr &planning_scene, const planning_pipeline::PlanningPipelinePtr &planning_pipeline, const pilz_msgs::MotionSequenceRequest &req_list) const
Solve each sequence item individually.
moveit::core::RobotModelConstPtr model_
Robot model.
ros::NodeHandle nh_
Node handle.
std::vector< double > RadiiCont
static void setStartState(const MotionResponseCont &motion_plan_responses, const std::string &group_name, moveit_msgs::RobotState &start_state)
Set start state to end state of previous calculated trajectory from group.
RobotTrajCont solve(const planning_scene::PlanningSceneConstPtr &planning_scene, const planning_pipeline::PlanningPipelinePtr &planning_pipeline, const pilz_msgs::MotionSequenceRequest &req_list)
Generates trajectories for the specified list of motion commands.
static void checkStartStatesOfGroup(const pilz_msgs::MotionSequenceRequest &req_list, const std::string &group_name)
Checks that only the first request of the specified group has a start state in the specified request ...
void checkForOverlappingRadii(const MotionResponseCont &resp_cont, const RadiiCont &radii) const
Validates that two consecutive blending radii do not overlap.
static void checkForNegativeRadii(const pilz_msgs::MotionSequenceRequest &req_list)
Checks that all blend radii are greater or equal to zero.
static RobotState_OptRef getPreviousEndState(const MotionResponseCont &motion_plan_responses, const std::string &group_name)
static void checkLastBlendRadiusZero(const pilz_msgs::MotionSequenceRequest &req_list)
Checks that last blend radius is zero.
static void checkStartStates(const pilz_msgs::MotionSequenceRequest &req_list)
Checks that each group in the specified request list has only one start state.