43 #include <moveit_msgs/msg/robot_trajectory.hpp>
44 #include <moveit_msgs/msg/robot_state.hpp>
45 #include <moveit_msgs/msg/planner_interface_description.hpp>
46 #include <moveit_msgs/msg/constraints.hpp>
47 #include <moveit_msgs/msg/grasp.hpp>
52 #include <moveit_msgs/action/move_group.hpp>
53 #include <moveit_msgs/action/execute_trajectory.hpp>
55 #include <moveit_msgs/msg/motion_plan_request.hpp>
56 #include <geometry_msgs/msg/pose_stamped.hpp>
58 #include <rclcpp_action/rclcpp_action.hpp>
62 #include <tf2_ros/buffer.h>
64 #include <moveit_move_group_interface_export.h>
89 Options(std::string group_name, std::string desc = ROBOT_DESCRIPTION, std::string move_group_namespace =
"")
90 : group_name_(std::move(group_name))
91 , robot_description_(std::move(desc))
92 , move_group_namespace_(std::move(move_group_namespace))
135 const std::shared_ptr<tf2_ros::Buffer>& tf_buffer = std::shared_ptr<tf2_ros::Buffer>(),
136 const rclcpp::Duration& wait_for_servers = rclcpp::Duration::from_seconds(-1));
146 const std::shared_ptr<tf2_ros::Buffer>& tf_buffer = std::shared_ptr<tf2_ros::Buffer>(),
147 const rclcpp::Duration& wait_for_servers = rclcpp::Duration::from_seconds(-1));
162 const std::string& getName()
const;
166 const std::vector<std::string>& getNamedTargets()
const;
169 moveit::core::RobotModelConstPtr getRobotModel()
const;
175 const std::string& getPlanningFrame()
const;
178 const std::vector<std::string>& getJointModelGroupNames()
const;
181 const std::vector<std::string>& getJointNames()
const;
184 const std::vector<std::string>& getLinkNames()
const;
187 std::map<std::string, double> getNamedTargetValues(
const std::string&
name)
const;
190 const std::vector<std::string>& getActiveJoints()
const;
193 const std::vector<std::string>& getJoints()
const;
197 unsigned int getVariableCount()
const;
200 bool getInterfaceDescriptions(std::vector<moveit_msgs::msg::PlannerInterfaceDescription>& desc)
const;
203 bool getInterfaceDescription(moveit_msgs::msg::PlannerInterfaceDescription& desc)
const;
206 std::map<std::string, std::string> getPlannerParams(
const std::string& planner_id,
207 const std::string&
group =
"")
const;
210 void setPlannerParams(
const std::string& planner_id,
const std::string&
group,
211 const std::map<std::string, std::string>& params,
bool bReplace =
false);
213 std::string getDefaultPlanningPipelineId()
const;
216 void setPlanningPipelineId(
const std::string& pipeline_id);
219 const std::string& getPlanningPipelineId()
const;
222 std::string getDefaultPlannerId(
const std::string&
group =
"")
const;
225 void setPlannerId(
const std::string& planner_id);
228 const std::string& getPlannerId()
const;
231 void setPlanningTime(
double seconds);
235 void setNumPlanningAttempts(
unsigned int num_planning_attempts);
242 void setMaxVelocityScalingFactor(
double max_velocity_scaling_factor);
249 void setMaxAccelerationScalingFactor(
double max_acceleration_scaling_factor);
252 double getPlanningTime()
const;
256 double getGoalJointTolerance()
const;
260 double getGoalPositionTolerance()
const;
264 double getGoalOrientationTolerance()
const;
272 void setGoalTolerance(
double tolerance);
276 void setGoalJointTolerance(
double tolerance);
279 void setGoalPositionTolerance(
double tolerance);
282 void setGoalOrientationTolerance(
double tolerance);
288 void setWorkspace(
double minx,
double miny,
double minz,
double maxx,
double maxy,
double maxz);
292 void setStartState(
const moveit_msgs::msg::RobotState& start_state);
299 void setStartStateToCurrentState();
303 void setSupportSurfaceName(
const std::string&
name);
334 bool setJointValueTarget(
const std::vector<double>& group_variable_values);
351 bool setJointValueTarget(
const std::map<std::string, double>& variable_values);
368 bool setJointValueTarget(
const std::vector<std::string>& variable_names,
const std::vector<double>& variable_values);
392 bool setJointValueTarget(
const std::string& joint_name,
const std::vector<double>& values);
405 bool setJointValueTarget(
const std::string& joint_name,
double value);
417 bool setJointValueTarget(
const sensor_msgs::msg::JointState& state);
430 bool setJointValueTarget(
const geometry_msgs::msg::Pose& eef_pose,
const std::string& end_effector_link =
"");
443 bool setJointValueTarget(
const geometry_msgs::msg::PoseStamped& eef_pose,
const std::string& end_effector_link =
"");
456 bool setJointValueTarget(
const Eigen::Isometry3d& eef_pose,
const std::string& end_effector_link =
"");
468 bool setApproximateJointValueTarget(
const geometry_msgs::msg::Pose& eef_pose,
469 const std::string& end_effector_link =
"");
481 bool setApproximateJointValueTarget(
const geometry_msgs::msg::PoseStamped& eef_pose,
482 const std::string& end_effector_link =
"");
494 bool setApproximateJointValueTarget(
const Eigen::Isometry3d& eef_pose,
const std::string& end_effector_link =
"");
500 void setRandomTarget();
504 bool setNamedTarget(
const std::string&
name);
507 void getJointValueTarget(std::vector<double>& group_variable_values)
const;
533 bool setPositionTarget(
double x,
double y,
double z,
const std::string& end_effector_link =
"");
542 bool setRPYTarget(
double roll,
double pitch,
double yaw,
const std::string& end_effector_link =
"");
552 bool setOrientationTarget(
double x,
double y,
double z,
double w,
const std::string& end_effector_link =
"");
561 bool setPoseTarget(
const Eigen::Isometry3d& end_effector_pose,
const std::string& end_effector_link =
"");
570 bool setPoseTarget(
const geometry_msgs::msg::Pose& target,
const std::string& end_effector_link =
"");
579 bool setPoseTarget(
const geometry_msgs::msg::PoseStamped& target,
const std::string& end_effector_link =
"");
599 bool setPoseTargets(
const EigenSTL::vector_Isometry3d& end_effector_pose,
const std::string& end_effector_link =
"");
619 bool setPoseTargets(
const std::vector<geometry_msgs::msg::Pose>& target,
const std::string& end_effector_link =
"");
639 bool setPoseTargets(
const std::vector<geometry_msgs::msg::PoseStamped>& target,
640 const std::string& end_effector_link =
"");
643 void setPoseReferenceFrame(
const std::string& pose_reference_frame);
648 bool setEndEffectorLink(
const std::string& end_effector_link);
652 bool setEndEffector(
const std::string& eef_name);
655 void clearPoseTarget(
const std::string& end_effector_link =
"");
658 void clearPoseTargets();
666 const geometry_msgs::msg::PoseStamped& getPoseTarget(
const std::string& end_effector_link =
"")
const;
673 const std::vector<geometry_msgs::msg::PoseStamped>& getPoseTargets(
const std::string& end_effector_link =
"")
const;
680 const std::string& getEndEffectorLink()
const;
687 const std::string& getEndEffector()
const;
691 const std::string& getPoseReferenceFrame()
const;
709 rclcpp_action::Client<moveit_msgs::action::MoveGroup>& getMoveGroupClient()
const;
743 double computeCartesianPath(
const std::vector<geometry_msgs::msg::Pose>&
waypoints,
double eef_step,
744 double jump_threshold, moveit_msgs::msg::RobotTrajectory& trajectory,
745 bool avoid_collisions =
true, moveit_msgs::msg::MoveItErrorCodes* error_code =
nullptr);
759 double computeCartesianPath(
const std::vector<geometry_msgs::msg::Pose>&
waypoints,
double eef_step,
760 double jump_threshold, moveit_msgs::msg::RobotTrajectory& trajectory,
761 const moveit_msgs::msg::Constraints&
path_constraints,
bool avoid_collisions =
true,
762 moveit_msgs::msg::MoveItErrorCodes* error_code =
nullptr);
768 void allowReplanning(
bool flag);
771 void setReplanAttempts(int32_t attempts);
774 void setReplanDelay(
double delay);
778 void allowLooking(
bool flag);
781 void setLookAroundAttempts(int32_t attempts);
886 bool attachObject(
const std::string&
object,
const std::string& link =
"");
896 bool attachObject(
const std::string&
object,
const std::string& link,
const std::vector<std::string>& touch_links);
903 bool detachObject(
const std::string&
name =
"");
917 bool startStateMonitor(
double wait = 1.0);
920 std::vector<double> getCurrentJointValues()
const;
923 moveit::core::RobotStatePtr getCurrentState(
double wait = 1)
const;
928 geometry_msgs::msg::PoseStamped getCurrentPose(
const std::string& end_effector_link =
"")
const;
933 std::vector<double> getCurrentRPY(
const std::string& end_effector_link =
"")
const;
936 std::vector<double> getRandomJointValues()
const;
941 geometry_msgs::msg::PoseStamped getRandomPose(
const std::string& end_effector_link =
"")
const;
954 void rememberJointValues(
const std::string&
name);
960 void rememberJointValues(
const std::string&
name,
const std::vector<double>& values);
965 return remembered_joint_values_;
969 void forgetJointValues(
const std::string&
name);
979 void setConstraintsDatabase(
const std::string& host,
unsigned int port);
982 std::vector<std::string> getKnownConstraints()
const;
987 moveit_msgs::msg::Constraints getPathConstraints()
const;
992 bool setPathConstraints(
const std::string& constraint);
997 void setPathConstraints(
const moveit_msgs::msg::Constraints& constraint);
1001 void clearPathConstraints();
1003 moveit_msgs::msg::TrajectoryConstraints getTrajectoryConstraints()
const;
1004 void setTrajectoryConstraints(
const moveit_msgs::msg::TrajectoryConstraints& constraint);
1005 void clearTrajectoryConstraints();
1014 std::map<std::string, std::vector<double> > remembered_joint_values_;
1015 class MoveGroupInterfaceImpl;
1016 MoveGroupInterfaceImpl* impl_;
a wrapper around moveit_msgs::MoveItErrorCodes to make it easier to return an error code message from...
Representation of a robot's state. This includes position, velocity, acceleration and effort.
Client class to conveniently use the ROS interfaces provided by the move_group node.
static const std::string ROBOT_DESCRIPTION
Default ROS parameter name from where to read the robot's URDF. Set to 'robot_description'.
MOVEIT_STRUCT_FORWARD(Plan)
MoveGroupInterface(const MoveGroupInterface &)=delete
This class owns unique resources (e.g. action clients, threads) and its not very meaningful to copy....
MoveGroupInterface & operator=(const MoveGroupInterface &)=delete
const std::map< std::string, std::vector< double > > & getRememberedJointValues() const
Get the currently remembered map of names to joint values.
rclcpp::Node::SharedPtr getNodeHandle()
Get the ROS node handle of this instance operates on.
MOVEIT_CLASS_FORWARD(MoveGroupInterface)
moveit::core::MoveItErrorCode MoveItErrorCode
Main namespace for MoveIt.
This namespace includes the base class for MoveIt planners.
moveit_msgs::msg::MotionPlanRequest MotionPlanRequest
Specification of options to use when constructing the MoveGroupInterface class.
std::string group_name_
The group to construct the class instance for.
Options(std::string group_name, std::string desc=ROBOT_DESCRIPTION, std::string move_group_namespace="")
std::string move_group_namespace_
The namespace for the move group node.
moveit::core::RobotModelConstPtr robot_model_
Optionally, an instance of the RobotModel to use can be also specified.
std::string robot_description_
The robot description parameter name (if different from default)
The representation of a motion plan (as ROS messasges)
moveit_msgs::msg::RobotTrajectory trajectory_
The trajectory of the robot (may not contain joints that are the same as for the start_state_)
moveit_msgs::msg::RobotState start_state_
The full starting state used for planning.
double planning_time_
The amount of time it took to generate the plan.