motion_planning_interfaces ========================== ``motion_planning_interfaces`` defines 37 interface(s). Messages -------- AppendCollisionConcept ~~~~~~~~~~~~~~~~~~~~~~ ----------------------------------- # Append collision concept THIS MESSAGE is OPTIONAL and can be left empty ----------------------------------- # .. code-block:: text # The workcell can only hold two types of objects. # WR: Robot Objects from Workcell # WC: Obstacle Objects from Workcell # These are unique. Objects in WR cannot be in WC. # Usually these are defined in the URDF file. # The motion planning has a different set of groups for collision checking: # R: Robot Objects # O: Obstacle Objects # MR: Manipulables attached to a robot link # MO: Manipulables attached to the world frame. # An object can only be in one of the four groups R, O, MR, and MO. # Objects above can be declared as: # TL: Touching Links are objects in R that are allowed to collide # TO: Touching Obstacles are objects in O that are allowed to collide # as an allowed collision between certain groups of R, O, MR, and MO explained below. # Collision Checking # 1. R : R -> Self check collision of R # 2. (R - TL) : MR -> Check collision R with MR with allowed collision of TL # 3. (R - TL) : MO -> Check collision R with MO with allowed collision of TL # 4. MR : (O - TO) -> Check collision of MR with O with allowed collision of TO # 5. R : O-> Check collision R with O # THIS MESSAGE modifies groups WR and WC defined in workcell to the collision check groups # R, O, MR, and MO, with the TL, and TO for motion planning. # ----------------------------------- # # First, WR automatically becomes R, and WO automatically becomes O # MANIPULABLES from Workcell # Define manipulables MR or MO, from any object defined in R or O from workcell # Objects defined here gets removed from groups R or O. # Look into ManipulableFromWorkcell.msg for details. ManipulableFromWorkcell[] manipulables_from_workcell # TL: See definition above # Any links part of the robot R string[] touching_links # TO: See definition above # Any objects part of the obstacles O string[] touching_obstacles # Note: Any added objects below must have unique name # not previously defined in R or O # Add additional objects to the MR group # frame_id must be an object in R common_msgs/Object[] r_manipulables # Add additional objects to the MO group # frame_id must be "world_frame" common_msgs/Object[] o_manipulables # Add additional objects to the R group # frame_id must be an object in R common_msgs/Object[] r_objects # Add additional objects to the O group # frame_id must be "world_frame" common_msgs/Object[] o_objects # Add additional object settings ObjectSettings[] object_settings CartesianInterpolateConfig ~~~~~~~~~~~~~~~~~~~~~~~~~~ Interpolate the translation and rotation separately. .. code-block:: text uint8 R3XSO3 = 1 # Interpolate in SE3 (translation and rotation together) uint8 SE3 = 2 uint8 type 1 # Number of points in a cartesian interpolated path is determined by this function # std::max((int)(cart_space_->distance(se3_start, se3_goal) * 10), n_points) # If n_points is -1, then the number of points will be set by above expression # If we set n_points, and that is larger than the compared number, then the path will be n_points long # If n_points is less than the compared number, then the planning will fail with a specific error code int32 n_points -1 ContactInfo ~~~~~~~~~~~ Signed distance value to represent penetration depth of two objects in collision .. code-block:: text float64 signed_distance # The normal direction of the penetration wrt World frame geometry_msgs/Vector3 normal # The names of the two objects in collision string[] collided_object_pair ErrorCodes ~~~~~~~~~~ @radian: Copied from moveit_msgs https://github.com/ros-planning/moveit_msgs .. code-block:: text int32 val # overall behavior int32 SUCCESS=1 int32 PARTIAL_SUCCESS=2 int32 FAILURE=99999 int32 PLANNING_FAILED=-1 int32 MOTION_PLAN_INVALIDATED_BY_ENVIRONMENT_CHANGE=-3 int32 TIMED_OUT=-6 int32 GOALS_AND_PLAN_TYPES_SIZE_NOT_EQUAL = -7 # planning & kinematics request errors int32 CART_INTP_RETURNS_MORE_THAN_N_POINTS=-9 int32 START_STATE_IN_COLLISION=-10 int32 START_STATE_VIOLATES_PATH_CONSTRAINTS=-11 int32 COUPLED_START_STATE_NOT_VALID = -12 int32 COUPLED_START_STATE_IN_COLLISION =-13 int32 GOAL_IN_COLLISION=-14 int32 GOAL_VIOLATES_PATH_CONSTRAINTS=-15 # invalid inputs int32 INVALID_JOINT_CONSTRAINT = -16 int32 INVALID_ROBOT_STATE=-17 int32 INVALID_LINK_NAME=-18 int32 INVALID_OBJECT_NAME=-19 int32 INVALID_GOAL_TYPE = -20 int32 UNSPECIFIED_GOAL_TYPE = -21 int32 INVALID_PATH = -22 int32 INVALID_INPUT_TYPE = -40 int32 START_AND_GOAL_STATE_TOO_CLOSE = -23 int32 START_AND_GOAL_POSE_TOO_CLOSE = -24 # parameterization errors int32 PARAMETERIZATION_FAILED = -25 # kinematics errors int32 NO_IK_SOLUTION=-31 # workcell related int32 FAILED_TO_UPDATE_OBJECTS = -36 int32 SERVER_POOL_EXHAUSTED = -37 Goal ~~~~ --- Use --- Specify robot_state .. code-block:: text common_msgs/RobotState robot_state # --- OR --- # Specify a pose waypoint # tip frame is tf.child_frame_id # root frame is tf.header.frame_id geometry_msgs/TransformStamped tf # ----------- uint8 ROBOT_STATE = 1 uint8 TRANSFORM = 2 uint8 type IKConfig ~~~~~~~~ .. code-block:: text uint8 MANIPULABILITY1 = 1 uint8 MANIPULABILITY2 = 2 uint8 DISTANCE = 3 uint8 type 3 # True to check_collision of the output joint states. bool check_collision 1 # The maximum output of the return solutions of the IK uint16 max_output_num 5 # Maximum allowed time for IK calculation float64 timeout_sec 0.1 IntRange ~~~~~~~~ A range of int. Example: [0, 4] .. code-block:: text int32 lower int32 upper IptpConfig ~~~~~~~~~~ --- IPTP ONLY ---- .. code-block:: text uint16 max_iteration 1000 float64 max_time_change_per_iteration 0.001 JointCoupledPlanConfig ~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: text JointCouplingMatrix joint_coupling_matrix JointCouplingMatrix ~~~~~~~~~~~~~~~~~~~ The joint coupling matrix is an augmented matrix in the form of [A_mxn \| b_m], where m is the number of all joints, n is the number of joints to plan and m > n. So the matrix actually has the size of mx(n+1) During the planning, we use this equation to get the complete joint states of the robot: q_m = A_mxn \* q_n + b_m .. code-block:: text # For example, the joint coupling matrix for palletting using vertically installed GP180 is: # | 1, 0, 0, 0, 0 | # | 0, 1, 0, 0, 0 | # | 0, 0, 1, 0, 0 | # | 0, 0, 0, 0, 0 | # | 0, 1, -1, 0, -0.5*M_PI | # | 0, 0, 0, 1, 0 | #, which is a 6x5 matrix. # This matrix forces the joint 4 to be zero and couples the joint 2, 3, 5 together. # With this matrix, we can plan the path in the R4 space instead of R6. # That is we can just plan for the joint 1, 2, 3, 6 and get the joint 4 and joint 5 values # through this matrix and the equation above. uint16 num_rows uint16 num_cols #rows then columns float64[] values # A 3x2 example: # num_rows = 3; # num_cols = 2; # values: [a11 a12 a21 a22 a31 a32] JointPlanConfig ~~~~~~~~~~~~~~~ OPTIONAL Specify constraints on the path .. code-block:: text PathConstraint path_constraint ManipulableFromWorkcell ~~~~~~~~~~~~~~~~~~~~~~~ Refer to AppendCollisionConcept.msg for the abbreviation meanings .. code-block:: text # The name of the object. Must have been defined in R or O (WR or WO) string name # If left empty, an object in R, becomes MR, an object in O, becomes MO. # Use .header.frame_id to override the reference frame of the object # If .header.frame_id is an object in R, this object becomes MR # If .header.frame_id is "world_frame", this object becomes MO # Other values are not valid. # .pose is the pose of the object wrt .header.frame_id. geometry_msgs/PoseStamped[<=1] override_pose_stamped ObjectSettings ~~~~~~~~~~~~~~ Object name .. code-block:: text string name # This collision object should be farther away to other objects it is collision checked with by a min_signed_dtance. # So valid_signed_distance is signed_distance > min_signed_distance. # A negative number for min_signed_distance means that it is allowed to penetrate into # that object up to that value. Please use the negative values carefully. float64 min_signed_distance OrientationConstraint ~~~~~~~~~~~~~~~~~~~~~ @radian: Copied from moveit_msgs https://github.com/ros-planning/moveit_msgs .. code-block:: text # All is wrt to world frame # The desired orientation of the robot link specified as a quaternion geometry_msgs/Quaternion orientation # The robot link this constraint refers to string link_name # axis-angle error tolerances float64 absolute_x_axis_tolerance float64 absolute_y_axis_tolerance float64 absolute_z_axis_tolerance ParameterizeConfig ~~~~~~~~~~~~~~~~~~ .. code-block:: text uint8 TOTG = 1 uint8 TOPPRA = 2 uint8 IPTP = 3 uint8 type 1 # REQUIRED Set with correct values lower than joint_limit.velocity # from GetJointLimit.srv of workcell_description. # Must be size of DOF of arm with correct joint names in order of root to tip. common_msgs/RealVectorConstraint joint_velocity_constraint # REQUIRED Set with correct values lower than joint_limit.acceleration # from GetJointLimit.srv of workcell_description. If joint_limit.acceleration # was not defined by workcell_decription (joint_limit.acceleration = [ALL ZEROS]), # users can define any value. # Must be size of DOF of arm with correct joint names in order of root to tip. common_msgs/RealVectorConstraint joint_acceleration_constraint # The output trajectory is sampled with a fixed time between points. # Note: the second to last point is deleted. # Example: # Sampled trajectory time stamps: [0.0 0.1 0.2 0.3 0.4 0.50 0.51] # Output trajectory time stamps: [0.0 0.1 0.2 0.3 0.4 0.51] float64 time_increment 0.02 # The maximum path deviation from the original input in [rad]. # This is because parameterize does path smoothing at the corners. float64 max_path_deviation 5 ToppraConfig toppra_config IptpConfig iptp_config PathConstraint ~~~~~~~~~~~~~~ All points of the path must constrain a certain link position within a 3d cartesian box volume wrt to world frame .. code-block:: text PositionConstraint[] position_constraints # All points of the path must constrain a certain link orientation within # a desired orientation and tolerances OrientationConstraint[] orientation_constraints Payload ~~~~~~~ .. code-block:: text bool use 0 # Mass [Kg] float64 mass # Inertia Tensor [kg-m^2] # | ixx ixy ixz | # I = | ixy iyy iyz | # | ixz iyz izz | float64 ixx float64 ixy float64 iyy float64 iyz float64 izz float64 ixz # Center of mass transform. # pose_stamped.header.frame_id is the link reference frame # specified in URDF that the payload is attached to geometry_msgs/PoseStamped com PlannerParams ~~~~~~~~~~~~~ @radian: Copied from moveit_msgs https://github.com/ros-planning/moveit_msgs .. code-block:: text # parameter names (same size as values) string[] keys # parameter values (same size as keys) string[] values # parameter description (can be empty) string[] descriptions PositionConstraint ~~~~~~~~~~~~~~~~~~ @radian: Copied from moveit_msgs BoundingVolume was changed with the contents of WorkspaceParameters.msg https://github.com/ros-planning/moveit_msgs .. code-block:: text # All is wrt to world frame # The robot link this constraint refers to string link_name # The offset (in the link frame) for the target point on the link we are planning for geometry_msgs/Vector3 target_point_offset # The minimum corner of the box, with respect to the robot starting pose geometry_msgs/Vector3 min_corner # The maximum corner of the box, with respect to the robot starting pose geometry_msgs/Vector3 max_corner RobotStateVec ~~~~~~~~~~~~~ .. code-block:: text common_msgs/RobotState[] goal_states ToppraConfig ~~~~~~~~~~~~ The cartesian acceleration limit referenced in constrained_tip_name's coordinate frame [x, y, z, rotation x, rotation y, rotation z] limits. README: Think hard a long before doing this. The acceleration on Earth with gravity of a non-moving frame xyz where z is facing up is [0, 0, 9.81, 0, 0, 0]; Therefore constraining az < 9.81 (ax or ay < 9.81 and your end effector x or y axis at one point faces gravity) will report failure in this algorithm. .. code-block:: text TwistConstraint[] frame_acceleration_constraints # Joint torque contraints only work if there is a Hb Matrix for you robot arm # AND you have identified the dynamic parameters (base_parm vector) TorqueConstraint torque_constraint # Base force wrench limit referenced in base frame. # Note: If the robot.urdf does not have correct Mass and Inertia parameters, # this calculation will be incorrect. WrenchConstraint base_wrench_constraint # The discretization number of the algorithm. This is used to calculate the constraints # and the solving the lp2d problem to adhere to the constraints in a time optimal fashion. # uint16 algorithm_discretization_num 200 # If the previous algorithm_discretization_num fails, it will be increased until a maximum of # max_tries. # uint16 max_tries 5 TorqueConstraint ~~~~~~~~~~~~~~~~ User must have specified a inverse_dynamics_config json file during initialization of motion planning The json file specifies the base_params values and the so file of the inverse_dynamics_package which has the Hb matrix .. code-block:: text # Torque constraint explanation: # predicted_torque = calc_torque(q, qd, qdd) # = Hb(q, qd, qdd) * b # torque equals the Hb matrix with input values of joint positions, q, joint velocities, qd, # and joint accelerations, qdd, multiplied by the vector of lumped dynamic parameters, b (base_params). # This predicted_torque is used to design a trajectory during parameterization which is below the torque limit. # User must specify 1 to use the torque constraint bool use 0 # Add a payload to correct the base_params values. # You must have a base_param_correction function in the inverse_dynamics package # for the type chosen, otherwise this will return false. # Note!! In this implementation, the payload is always attached to last link of the robot_arm. # t_link for motoman. payload.com.header.frame_id does nothing. Payload payload # The torque limit is the values which causes motor saturation. Feel free to set the limit # to anything near or below those values # Only max is used. The torque limit size must be the same size of number of joints in the robot arm. # [Nm] if you provided the gearbox ratio in robot_dynamics_identification_toolbox # If you did not provide the gearbox ratio, these values are anything you used to obtain # the torque data and saturation. For example, number of pulses, control box percent torque, # voltages V, etc. common_msgs/RealVectorConstraint limit TwistConstraint ~~~~~~~~~~~~~~~ The link name for which this constraint is applied to. The link must be defined in .urdf .. code-block:: text string name geometry_msgs/Twist max geometry_msgs/Twist min WrenchConstraint ~~~~~~~~~~~~~~~~ .. code-block:: text string name geometry_msgs/Wrench max geometry_msgs/Wrench min Services -------- CheckPathCollision ~~~~~~~~~~~~~~~~~~ Check collision of a path between ROBOT group and other groups. Groups should be defined and set from WorkcellDescription. Checks self collision of "ROBOT" objects. .. code-block:: text # Update the objects from WorkcellDescription node before calculating this service. # Calls GetAllObjects.srv bool update_objects 1 # Append extra objects and definitions on top of the objects obtained from the WorkcellDescription. # Everything defined here only last for this service call (stateless) AppendCollisionConcept append_collision_concept # A valid path has a minimal of two points with the # position[] fields filled. trajectory_msgs/JointTrajectory path # CHECK_ALL_POINTS will check collision of all points of the trajectory # CHECK_UNTIL_COLLISION will check a collision of a path from start to end, and stop # if a collision is found or if it reached the end of the path uint8 CHECK_ALL_POINTS = 1 uint8 CHECK_UNTIL_COLLISION = 2 uint8 type 1 --- # The point indexes in collision expressed in a vector of ranges. # Example: A path with 10 points. Index starts at 0 and end at 9 # index_ranges_in_collision = {[1, 2], [4, 6]} points with index 1, 2, 4, 5, and 6 are in collision. # Example: Same path above with 10 points. quick_check = 1 # index_ranges_in_collision = {[1, -1]}. -1 means an unknown range which means the rest of the points were not checked # Example: A path with no collisions # index_ranges_in_collision = {}. Is empty # Example: A path with 10 points. A range with only one point in collision # index_ranges_in_collision = {[6, 6]} IntRange[] index_ranges_in_collision ErrorCodes error_code CheckRobotCollision ~~~~~~~~~~~~~~~~~~~ Check collision between ROBOT group and other groups. Groups should be defined and set from WorkcellDescription. Checks self collision of "ROBOT" objects. .. code-block:: text # Update the objects from WorkcellDescription node before calculating this service. # Calls GetAllObjects.srv bool update_objects 1 # Append extra objects and definitions on top of the objects obtained from the WorkcellDescription. # Everything defined here only last for this service call (stateless) AppendCollisionConcept append_collision_concept # Input the robot_state to determine ROBOT object poses common_msgs/RobotState robot_state bool get_contact_infos 0 --- # True if one or more objects is in collision bool is_in_collision # The collision info ContactInfo[] contact_infos ErrorCodes error_code ComputeFK ~~~~~~~~~ Service to calculate the forward kinematics between two link frames specified in the .urdf. .. code-block:: text # Specify the robot_state # Only position[] in JointState is used # Temporary: Fill out multi_dof_joint_state.transforms with # 1 transform for mobile robot base_pose common_msgs/RobotState robot_state # Specify the root_frame. Must be defined in .urdf string root_frame # Specify the tip_frame. Must be defined in .urdf string tip_frame --- # The output transform. The root_frame and tip_frame fields are filled inside. geometry_msgs/TransformStamped tf ErrorCodes error_code ComputeFKBatch ~~~~~~~~~~~~~~ Service to calculate the forward kinematics(FK) between two link frames specified in the .urdf. .. code-block:: text # ----------- Input ----------- # A vector of robot states can be described with a JointTrajectory # we use JointTrajectory for ease of use with ComputeMotionPlan.srv trajectory_msgs/JointTrajectory trajectory # A vector of robot states common_msgs/RobotState[] robot_states # Input can be a trajectory or robot_states uint8 TRAJECTORY = 1 uint8 ROBOT_STATES = 2 uint8 type 1 # ----------------------------- # Specify the root_frame. Must be defined in .urdf string root_frame # Specify the tip_frame. Must be defined in .urdf string tip_frame # Input must have positions filled bool do_fk_position 1 # Input must have positions and velocities filled bool do_fk_velocity 0 # Input must have positions, velocities, and accelerations filled bool do_fk_acceleration 0 --- string root_frame string tip_frame # All these vectors below will have the same size as # the size of points in input (trajectory.points or robot_states) # Will be filled if do_fk_position = 1 geometry_msgs/Transform[] transforms # Will be filled if do_fk_velocity = 1 geometry_msgs/Twist[] cartesian_velocities # Will be filled if do_fk_acceleration = 1 geometry_msgs/Twist[] cartesian_accelerations # return SUCCESS if all input points successfully compute all of the do_fk_xxx computations ErrorCodes error_code ComputeIK ~~~~~~~~~ A service call to carry out an inverse kinematics computation between any two link frames from .urdf .. code-block:: text # Update the objects from WorkcellDescription node before calculating this service. # Calls GetAllObjects.srv bool update_objects 1 # Append extra objects and definitions on top of the objects obtained from the WorkcellDescription. # Everything defined here only last for this service call (stateless) AppendCollisionConcept append_collision_concept # Specify the transform to calculate the IK. # root_frame and tip_frame must be specified inside. geometry_msgs/TransformStamped root_to_tip_tf # OPTIONAL A reference_state to sort the goal_states solution. # If empty, will use 0.0, 0.0, 0.0 ... to sort # Temporary: Fill out multi_dof_joint_state.transforms with # 1 transform for mobile robot base_pose common_msgs/RobotState reference_state # OPTIONAL Specify joints that are fixed, the position[] field will be used as fixed values in this service. common_msgs/RobotState fixed_state # If empty, will use joint limit from GetJointLimit.srv of workcell_description common_msgs/RealVectorConstraint joint_position_constraint IKConfig config --- # Multiple goal_states are returned as a solution common_msgs/RobotState[] goal_states ErrorCodes error_code ComputeIKBatch ~~~~~~~~~~~~~~ A service call to carry out an inverse kinematics computation between any two link frames from .urdf .. code-block:: text # Update the objects from WorkcellDescription node before calculating this service. # Calls GetAllObjects.srv bool update_objects 1 # Append extra objects and definitions on top of the objects obtained from the WorkcellDescription. # Everything defined here only last for this service call (stateless) AppendCollisionConcept append_collision_concept # Specify the transforms to calculate the IK. # root_frame and tip_frame must be specified inside. geometry_msgs/TransformStamped[] root_to_tip_tfs # OPTIONAL A reference_state to sort the goal_states solution. # If empty, will use 0.0, 0.0, 0.0 ... to sort # Temporary: Fill out multi_dof_joint_state.transforms with # 1 transform for mobile robot base_pose common_msgs/RobotState reference_state # OPTIONAL Specify joints that are fixed, the position[] field will be used as fixed values in this service. common_msgs/RobotState fixed_state # If empty, will use joint limit from GetJointLimit.srv of workcell_description common_msgs/RealVectorConstraint joint_position_constraint IKConfig config --- # For each tf in root_to_tip_tfs a vector of goal states is returned. If the IK computation fails for a tf, # the corresponding element in goal_states_vec will be an empty vector. goal_states_vec will be of the same # length as root_to_tip_tfs RobotStateVec[] goal_states_vec # Returns SUCCESS if all tfs return successful IK results, PARTIAL_SUCCESS if some tfs have successfully IK # computation and FAILURE if all tfs fail IK computation. ErrorCodes error_code ComputeMotionPlan ~~~~~~~~~~~~~~~~~ This service calculates a path/trajectory given a start_state and list of goals. A goal can either be a pose of a link or a robot_state. This means that this service, if given a pose, does IK, then does either joint plan, cartesian interpolate, or joint coupled plan, then appends the paths, and if do_parameterize, parameterizes for you. .. code-block:: text # Update the objects from WorkcellDescription node before calculating this service. # Calls GetAllObjects.srv bool update_objects 1 # Append extra objects and definitions on top of the objects obtained from the WorkcellDescription. # Everything defined here only last for this service call (stateless) AppendCollisionConcept append_collision_concept # Specify the start # Temporary: Fill out multi_dof_joint_state.transforms with # 1 transform for mobile robot base_pose common_msgs/RobotState start_state # Specify the goals which the path needs to sequentially go to. Goal[] goals # For each goal state, define the path plan type. # This means if path_plan_types[0] = JOINT_PLAN, then from start_state to goals[0] will be a JOINT_PLAN. # Of course this means that the size of path_plan_types must equal to the size of goals. uint8[] path_plan_types uint8 JOINT_PLAN = 1 uint8 CARTESIAN_INTERPOLATE = 2 uint8 JOINT_COUPLED_PLAN = 3 # OPTIONAL Specify joints that are fixed, the position[] field will be used as a fixed value in this service. common_msgs/RobotState fixed_state # If empty, will use joint_limit from GetJointLimit.srv of workcell_description common_msgs/RealVectorConstraint joint_position_constraint # If parameterization fails, it will still return the path. error_code = PARAMETERIZATION_FAILED bool do_parameterize 1 # ---- These have default values ---- IKConfig ik_config # This service always checks collision in ik. JointPlanConfig joint_plan_config CartesianInterpolateConfig cartesian_interpolate_config JointCoupledPlanConfig joint_coupled_plan_config #if do_parameterize = 1, you MUST specify joint_velocity_constraint and joint_acceleration_constraint # inside parameterize_config ParameterizeConfig parameterize_config --- # Appends paths between goal_states. # Returns a path if do_parameterize = 0. trajectory_msgs/JointTrajectory trajectory # This service still returns a path/trajectory even if it stopped prematurely at x reached_goals. # Success should have reached_goals == goals.size() uint16 reached_goals # The final goal state of the path/trajectory. If its partial trajectory, returns the last state of that trajectory. common_msgs/RobotState goal_state # Overall service error code should return SUCCESS. If PARTIAL_SUCCESS, that means only part of the path/trajectory # is calculated and you can check the planning_error_code for what went wrong. ErrorCodes error_code # If error_code == PARTIAL_SUCCESS, you can check planning_error_code # to see what went wrong in the planning part. ErrorCodes planning_error_code ComputeParameterize ~~~~~~~~~~~~~~~~~~~ Update the objects from WorkcellDescription node before calculating this service. Calls GetAllObjects.srv .. code-block:: text bool update_objects 1 # Append extra objects and definitions on top of the objects obtained from the WorkcellDescription. # Everything defined here only last for this service call (stateless) AppendCollisionConcept append_collision_concept # Specify a path to parameterize. A valid path has a minimal of two points with the # position[] fields filled. trajectory_msgs/JointTrajectory path # Temporary: base pose for collision checking. Must be size 1 to work. geometry_msgs/Transform[<=1] base_tfs ParameterizeConfig config --- # Returns a trajectory which is properly parameterized (time stamps, positions, and velocities filled out) trajectory_msgs/JointTrajectory trajectory ErrorCodes error_code GetManipulability ~~~~~~~~~~~~~~~~~ Now can only use robot_state.joint_state .. code-block:: text common_msgs/RobotState robot_state # Manipulability is calculated (not only) with how close the robot state is to the position limit # TODO: Add position limit for robot_state.multi_dof_joint_state common_msgs/RealVectorConstraint joint_position_limit --- float64 manipulability RemovePlanner ~~~~~~~~~~~~~ This service removes a planner by id .. code-block:: text uint16 planner_id --- # True if successful bool is_success ReplacePlanner ~~~~~~~~~~~~~~ This service replaces planner_params of a already set planner. .. code-block:: text # Specify the planner_id uint16 planner_id # Specify the PlannerParams. Any unsuccessful ones will be handled and result will be printed. PlannerParams planner_params --- # True if successful. bool is_success SetPlanner ~~~~~~~~~~ This service sets up a planner .. code-block:: text # Valid fields are: # RTConnect, RRTSTAR, KPIECE # This changes based on the different implementations in dr_arm_planning string planner_name # Specify the planner_id uint16 planner_id # The number of identical planners to set for parallel planning. uint16 number_of_planners # Specify the PlannerParams. Any unsuccessful ones will be handled and result will be printed. PlannerParams planner_params --- # True if successful. bool is_success UpdateObjects ~~~~~~~~~~~~~ This service calls GetAllObjects.srv from WorkcellDescription node. .. code-block:: text --- # True if successful bool is_success