-
 

Package Summary

Tags No category tags.
Version 0.3.10
License LGPLv3
Build type CATKIN
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/PilzDE/pilz_industrial_motion.git
VCS Type git
VCS Version kinetic-devel
Last Updated 2023-11-22
Dev Status END-OF-LIFE
CI status Continuous Integration
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

The pilz_trajectory_generation package containing the MoveIt! plugin pilz_command_planner.

Additional Links

Maintainers

  • Immanuel Martini

Authors

No additional authors.

Overview

This package provides a trajectory generator to plan standard robot motions like PTP, LIN, CIRC in the form of a MoveIt! PlannerManager plugin.

MoveIt!

MoveIt! is state of the art software for mobile manipulation, incorporating the latest advances in motion planning, manipulation, 3D perception, kinematics, control and navigation. For detailed information, please refer to the MoveIt! website.

ROS API

User Interface MoveGroup

This package implements the planning_interface::PlannerManager interface of MoveIt!. By loading the corresponding planning pipeline (pilz_command_planner_planning_pipeline.launch.xml in prbt_moveit_config package), the trajectory generation functionalities can be accessed through the user interface (c++, python or rviz) provided by the move_group node, e.g. /plan_kinematics_path service and /move_group action. For detailed tutorials please refer to MoveIt! Tutorials.

Joint Limits

For all commands the planner needs to know the limitations of each robot joint. The limits used are calculated from the limits set in the urdf as well as the limits set on the parameter server (usually put there by loading a *.yaml file such as prbt_moveit_config/config/joint_limits.yaml).

Note that while setting position limits and velocity limits is possible in both the urdf and the parameter server setting acceleration limits is only possible via the parameter server. In extension to the common has_acceleration and max_acceleration parameter we added the ability to also set has_deceleration and max_deceleration(<0!).

The limits are merged under the premise that the limits from the parameter server must be stricter or at least equal to the parameters set in the urdf.

Currently the calculated trajectory will respect the limits by using the strictest combination of all limits as a common limit for all joints.

Cartesian Limits

For cartesian trajectory generation (LIN/CIRC) the planner needs an information about the maximum speed in 3D cartesian space. Namely translational/rotational velocity/acceleration/deceleration need to be set on the parameter server like this:

cartesian_limits:
  max_trans_vel: 1
  max_trans_acc: 2.25
  max_trans_dec: -5
  max_rot_vel: 1.57

The planners assume the same acceleration ratio for translational and rotational trapezoidal shapes. So the rotational acceleration is calculated as max_trans_acc / max_trans_vel * max_rot_vel (and for deceleration accordingly).

Planning Interface

As defined by the user interface of MoveIt!, this package uses moveit_msgs::MotionPlanRequest and moveit_msgs::MotionPlanResponse as input and output for motion planning. These message types are designed to be comprehensive and general. The parameters needed by specific planning algorithm are explained below in detail.

For a general introduction how to fill a MotionPlanRequest see the Move Group Interface Tutorial.

The planner is able to handle all the different commands. Just put “PTP”, “LIN” or “CIRC” as planner_id in the motion request.

The PTP motion command

This planner generates full synchronized point to point trajectories with trapezoidal joint velocity profile. All joints are assumed to have the same maximal joint velocity/acceleration/deceleration limits. If not, the strictest limits are adopted. The axis with the longest time to reach the goal is selected as the lead axis. Other axes are decelerated so that they share the same acceleration/constant velocity/deceleration phases as the lead axis.

ptp no vel

Input parameters in moveit_msgs::MotionPlanRequest

  • planner_id: PTP
  • group_name: name of the planning group
  • max_velocity_scaling_factor: scaling factor of maximal joint velocity
  • max_acceleration_scaling_factor: scaling factor of maximal joint acceleration/deceleration
  • start_state/joint_state/(name, position and velocity: joint name/position/velocity(optional) of the start state.
  • goal_constraints (goal can be given in joint space or Cartesian space)
    • for goal in joint space
      • goal_constraints/joint_constraints/joint_name: goal joint name
      • goal_constraints/joint_constraints/position: goal joint position
    • for goal in Cartesian space
      • goal_constraints/position_constraints/header/frame_id: frame this data is associated with
      • goal_constraints/position_constraints/link_name: target link name
      • goal_constraints/position_constraints/constraint_region: bounding volume of the target point
      • goal_constraints/position_constraints/target_point_offset: offset (in the link frame) for the target point on the target link (optional)
  • max_velocity_scaling_factor: rescale the maximal velocity
  • max_acceleration_scaling_factor: rescale the maximal acceleration/deceleration

planning results in moveit_msg::MotionPlanResponse

  • trajectory_start: bypass the start_state in moveit_msgs::MotionPlanRequest
  • trajectory/joint_trajectory/joint_names: a list of the joint names of the generated joint trajectory
  • trajectory/joint_trajectory/points/(positions,velocities,accelerations,time_from_start): a list of generated way points. Each point has positions/velocities/accelerations of all joints (same order as the joint names) and time from start. The last point will have zero velocity and acceleration.
  • group_name: name of the planning group
  • error_code/val: error code of the motion planning

The LIN motion command

This planner generates linear Cartesian trajectory between goal and start poses. The planner uses the Cartesian limits to generate a trapezoidal velocity profile in Cartesian space. The translational motion is a linear interpolation between start and goal position vector. The rotational motion is quaternion slerp between start and goal orientation. The translational and rotational motion is synchronized in time. This planner only accepts start state with zero velocity. Planning result is a joint trajectory. The user needs to adapt the Cartesian velocity/acceleration scaling factor if motion plan fails due to violation of joint space limits.

Input parameters in moveit_msgs::MotionPlanRequest

  • planner_id: LIN
  • group_name: name of the planning group
  • max_velocity_scaling_factor: scaling factor of maximal Cartesian translational/rotational velocity
  • max_acceleration_scaling_factor: scaling factor of maximal Cartesian translational/rotational acceleration/deceleration
  • start_state/joint_state/(name, position and velocity: joint name/position of the start state.
  • goal_constraints (goal can be given in joint space or Cartesian space)
    • for goal in joint space
      • goal_constraints/joint_constraints/joint_name: goal joint name
      • goal_constraints/joint_constraints/position: goal joint position
    • for goal in Cartesian space
      • goal_constraints/position_constraints/header/frame_id: frame this data is associated with
      • goal_constraints/position_constraints/link_name: target link name
      • goal_constraints/position_constraints/constraint_region: bounding volume of the target point
      • goal_constraints/position_constraints/target_point_offset: offset (in the link frame) for the target point on the target link (optional)
  • max_velocity_scaling_factor: rescale the maximal velocity
  • max_acceleration_scaling_factor: rescale the maximal acceleration

planning results in moveit_msg::MotionPlanResponse

  • trajectory_start: bypass the start_state in moveit_msgs::MotionPlanRequest
  • trajectory/joint_trajectory/joint_names: a list of the joint names of the generated joint trajectory
  • trajectory/joint_trajectory/points/(positions,velocities,accelerations,time_from_start): a list of generated way points. Each point has positions/velocities/accelerations of all joints (same order as the joint names) and time from start. The last point will have zero velocity and acceleration.
  • group_name: name of the planning group
  • error_code/val: error code of the motion planning

The CIRC motion command

This planner generates a circular arc trajectory in Cartesian space between goal and start poses. There are two options for giving a path constraint:

  • the center point of the circle: The planner always generates the shorter arc between start and goal and cannot generate a half circle,
  • an interim point on the arc: The generated trajectory always goes through the interim point. The planner cannot generate a full circle.

The Cartesian limits, namely translational/rotational velocity/acceleration/deceleration need to be set and the planner uses these limits to generate a trapezoidal velocity profile in Cartesian space. The rotational motion is quaternion slerp between start and goal orientation. The translational and rotational motion is synchronized in time. This planner only accepts start state with zero velocity. Planning result is a joint trajectory. The user needs to adapt the Cartesian velocity/acceleration scaling factor if motion plan fails due to violation of joint limits.

Input parameters in moveit_msgs::MotionPlanRequest

  • planner_id: CIRC
  • group_name: name of the planning group
  • max_velocity_scaling_factor: scaling factor of maximal Cartesian translational/rotational velocity
  • max_acceleration_scaling_factor: scaling factor of maximal Cartesian translational/rotational acceleration/deceleration
  • start_state/joint_state/(name, position and velocity: joint name/position of the start state.
  • goal_constraints (goal can be given in joint space or Cartesian space)
    • for goal in joint space
      • goal_constraints/joint_constraints/joint_name: goal joint name
      • goal_constraints/joint_constraints/position: goal joint position
    • for goal in Cartesian space
      • goal_constraints/position_constraints/header/frame_id: frame this data is associated with
      • goal_constraints/position_constraints/link_name: target link name
      • goal_constraints/position_constraints/constraint_region: bounding volume of the target point
      • goal_constraints/position_constraints/target_point_offset: offset (in the link frame) for the target point on the target link (optional)
  • path_constraints (position of the interim/center point)
    • path_constraints/name: interim or center
    • path_constraints/position_constraints/constraint_region/primitive_poses/point: position of the point
  • max_velocity_scaling_factor: rescale the maximal velocity
  • max_acceleration_scaling_factor: rescale the maximal acceleration

planning results in moveit_msg::MotionPlanResponse

  • trajectory_start: bypass the start_state in moveit_msgs::MotionPlanRequest
  • trajectory/joint_trajectory/joint_names: a list of the joint names of the generated joint trajectory
  • trajectory/joint_trajectory/points/(positions,velocities,accelerations,time_from_start): a list of generated way points. Each point has positions/velocities/accelerations of all joints (same order as the joint names) and time from start. The last point will have zero velocity and acceleration.
  • group_name: name of the planning group
  • error_code/val: error code of the motion planning

Example

By running

roslaunch prbt_moveit_config demo.launch

the user can interact with the planner through rviz.

rviz figure

Using the command planner

The pilz::CommandPlanner is provided as MoveIt! Motion Planning Pipeline and, therefore, can be used with all other manipulators using MoveIt!. Loading the plugin requires the param /move_group/planner_plugin to be set to pilz::CommandPlanner before the move_group node is started.

To use the command planner cartesian limits have to be defined. The limits are expected to be under the namespace <robot_description>_planning. Where <robot_description> refers to the parameter under which the urdf is loaded. E.g. if the urdf was loaded into /robot_description the cartesian limits have to be defined at /robot_description_planning.

An example showing the cartesian limits which have to be defined can be found here.

Sequence of multiple segments

To concatenate multiple trajectories and plan the trajectory at once, you can use the sequence capability. This reduces the planning overhead and allows to follow a pre-desribed path without stopping at intermediate points.

Please note: In case the planning of a command in a sequence fails, non of the commands in the sequence are executed.

Please note: Sequences commands are allowed to contain commands for multiple groups (e.g. “Manipulator”, “Gripper”)

User interface sequence capability

A specialized MoveIt! capability takes a pilz_msgs::MotionSequenceRequest as input. The request contains a list of subsequent goals as described above and an additional blend_radius parameter. If the given blend_radius in meter is greater than zero, the corresponding trajectory is merged together with the following goal in a way, that the robot does not stop at the current goal. When the tcp comes closer to the goal than the given blend_radius, it is allowed to travel towards the next goal already. When leaving a sphere around the current goal, the robot returns onto the trajectory he would have taken without blending.

For details about the blend algorithm please refer to doc/MotionBlendAlgorithmDescription.pdf.

blend figure

Restrictions for MotionSequenceRequest

  • Only the first goal may have a start state. Following trajectories start at the previous goal.
  • Two subsequent blend_radius spheres must not overlap. blend_radius(i) + blend_radius(i+1) has to be smaller than the distance between the goals.

Action interface

In analogy to the MoveGroup action interface the user can plan and execute a pilz_msgs::MotionSequenceRequest through the action server at /sequence_move_group.

In one point the MoveGroupSequenceAction differs from the standard MoveGroup capability: If the robot is already at the goal position, the path is still executed. The underlying PlannerManager can check, if the constraints of an individual moveit_msgs::MotionPlanRequest are already satisfied but the MoveGroupSequenceAction capability doesn’t implement such a check to allow moving on a circular or comparable path.

See the pilz_robot_programming package for an example python script that shows how to use the capability.

Service interface

The service plan_sequence_path allows the user to generate a joint trajectory for a pilz_msgs::MotionSequenceRequest. The trajectory is returned and not executed.

CHANGELOG

Changelog for package pilz_trajectory_generation

0.3.10 (2019-09-11)

  • Fix clang-tidy issues
  • integrate clang-tidy via CMake flag
  • Contributors: Pilz GmbH and Co. KG

0.3.9 (2019-09-05)

  • Adapt to changes in pilz_robots
  • add static code analyzing (clang-tidy)
  • drop deprecated isRobotStateEqual()
  • Contributors: Pilz GmbH and Co. KG

0.3.8 (2019-07-02)

  • Commenting unstable test with franka emika panda

0.3.7 (2019-05-09)

  • fixed an error that led to trajectories not strictly increasing in time
  • update dependencies of trajectory_generation
  • fix CIRC path generator and increase test coverage
  • adopt strictest limits in ptp planner (refactor JointLimitsContainer and TrajectoryGeneratorPTP)
  • Enable gripper commands inside a sequence
  • Contributors: Pilz GmbH and Co. KG

0.3.6 (2019-02-26)

  • refactor the testdataloader

0.3.5 (2019-02-06)

  • Increase line coverage for blending to 100%

0.3.4 (2019-02-05)

  • refactor determining the trajectory alignment in the blend implementation
  • extend and refactor unittest of blender_transition_window
  • add planning group check to blender_transition_window

0.3.3 (2019-01-25)

  • add more details to blend algorithm description
  • change handling of empty sequences in capabilities to be non-erroneous
  • rename command_planner -> pilz_command_planner

0.3.2 (2019-01-18)

  • use pilz_testutils package for blend test
  • use collision-aware ik calculation
  • Contributors: Pilz GmbH and Co. KG

0.3.1 (2018-12-17)

0.3.0 (2018-11-28)

  • add append method for avoiding duplicate points in robot_trajectory trajectories
  • Relax the precondition on trajectory generators from v_start==0 to < 1e-10 to gain robustness
  • Set last point of generated trajectories to have vel=acc=0 to match the first point.
  • add sequence action and service capabilities to concatenate multiple requests
  • Contributors: Pilz GmbH and Co. KG

0.1.1 (2018-09-25)

  • port to melodic
  • drop unused dependencies
  • Contributors: Pilz GmbH and Co. KG

0.1.0 (2018-09-14)

  • Created trajectory generation package with ptp, lin, circ and blend planner
  • Contributors: Pilz GmbH and Co. KG

Wiki Tutorials

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Launch files

  • test/test_robots/prbt/launch/test_context.launch
      • gripper [default: ]
      • robot_description [default: robot_description]
      • robot_description [default: robot_description_$(arg gripper)]
  • test/test_robots/abb_irb2400/launch/move_group.launch
      • pipeline [default: pilz_command_planner]
      • debug [default: false]
      • info [default: $(arg debug)]
      • allow_trajectory_execution [default: true]
      • fake_execution [default: false]
      • max_safe_path_cost [default: 1]
      • jiggle_fraction [default: 0.05]
      • publish_monitored_planning_scene [default: true]
  • test/test_robots/abb_irb2400/launch/run_abb_irb2400.launch
    • Copyright (c) 2018 Pilz GmbH & Co. KG This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see .
      • debug [default: false]
  • test/test_robots/frankaemika_panda/launch/moveit_planning_execution.launch
    • Copyright (c) 2018 Pilz GmbH & Co. KG This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see .
      • pipeline [default: ompl]
      • load_robot_description [default: true]
  • test/test_robots/frankaemika_panda/launch/move_group.launch
      • load_gripper [default: true]
      • debug [default: false]
      • info [default: $(arg debug)]
      • allow_trajectory_execution [default: true]
      • fake_execution [default: false]
      • max_safe_path_cost [default: 1]
      • jiggle_fraction [default: 0.05]
      • publish_monitored_planning_scene [default: true]

Messages

No message files found.

Services

No service files found

Recent questions tagged pilz_trajectory_generation at Robotics Stack Exchange

Package Deprecated

This package has been integrated into MoveIt. Please consider using the new package pilz_industrial_motion_planner: https://moveit.ros.org/documentation/planners/

Package Summary

Tags No category tags.
Version 0.4.14
License LGPLv3
Build type CATKIN
Use DEPRECATED

Repository Summary

Checkout URI https://github.com/PilzDE/pilz_industrial_motion.git
VCS Type git
VCS Version melodic-devel
Last Updated 2023-11-22
Dev Status END-OF-LIFE
CI status
Released RELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Package Description

The pilz_trajectory_generation package containing the MoveIt! plugin pilz_command_planner.

Additional Links

Maintainers

  • Immanuel Martini

Authors

No additional authors.

This package has been integrated into moveit and is deprecated here.

Overview

This package provides a trajectory generator to plan standard robot motions like PTP, LIN, CIRC in the form of a MoveIt! PlannerManager plugin.

MoveIt!

MoveIt! is state of the art software for mobile manipulation, incorporating the latest advances in motion planning, manipulation, 3D perception, kinematics, control and navigation. For detailed information, please refer to the MoveIt! website.

ROS API

User Interface MoveGroup

This package implements the planning_interface::PlannerManager interface of MoveIt!. By loading the corresponding planning pipeline (pilz_command_planner_planning_pipeline.launch.xml in prbt_moveit_config package), the trajectory generation functionalities can be accessed through the user interface (c++, python or rviz) provided by the move_group node, e.g. /plan_kinematics_path service and /move_group action. For detailed tutorials please refer to MoveIt! Tutorials.

Joint Limits

For all commands the planner needs to know the limitations of each robot joint. The limits used are calculated from the limits set in the urdf as well as the limits set on the parameter server (usually put there by loading a *.yaml file such as prbt_moveit_config/config/joint_limits.yaml).

Note that while setting position limits and velocity limits is possible in both the urdf and the parameter server setting acceleration limits is only possible via the parameter server. In extension to the common has_acceleration and max_acceleration parameter we added the ability to also set has_deceleration and max_deceleration(<0!).

The limits are merged under the premise that the limits from the parameter server must be stricter or at least equal to the parameters set in the urdf.

Currently the calculated trajectory will respect the limits by using the strictest combination of all limits as a common limit for all joints.

Cartesian Limits

For cartesian trajectory generation (LIN/CIRC) the planner needs an information about the maximum speed in 3D cartesian space. Namely translational/rotational velocity/acceleration/deceleration need to be set on the parameter server like this:

cartesian_limits:
  max_trans_vel: 1
  max_trans_acc: 2.25
  max_trans_dec: -5
  max_rot_vel: 1.57

The planners assume the same acceleration ratio for translational and rotational trapezoidal shapes. So the rotational acceleration is calculated as max_trans_acc / max_trans_vel * max_rot_vel (and for deceleration accordingly).

Planning Interface

As defined by the user interface of MoveIt!, this package uses moveit_msgs::MotionPlanRequest and moveit_msgs::MotionPlanResponse as input and output for motion planning. These message types are designed to be comprehensive and general. The parameters needed by specific planning algorithm are explained below in detail.

For a general introduction how to fill a MotionPlanRequest see the Move Group Interface Tutorial.

The planner is able to handle all the different commands. Just put “PTP”, “LIN” or “CIRC” as planner_id in the motion request.

The PTP motion command

This planner generates full synchronized point to point trajectories with trapezoidal joint velocity profile. All joints are assumed to have the same maximal joint velocity/acceleration/deceleration limits. If not, the strictest limits are adopted. The axis with the longest time to reach the goal is selected as the lead axis. Other axes are decelerated so that they share the same acceleration/constant velocity/deceleration phases as the lead axis.

ptp no vel

Input parameters in moveit_msgs::MotionPlanRequest

  • planner_id: PTP
  • group_name: name of the planning group
  • max_velocity_scaling_factor: scaling factor of maximal joint velocity
  • max_acceleration_scaling_factor: scaling factor of maximal joint acceleration/deceleration
  • start_state/joint_state/(name, position and velocity: joint name/position/velocity(optional) of the start state.
  • goal_constraints (goal can be given in joint space or Cartesian space)
    • for goal in joint space
      • goal_constraints/joint_constraints/joint_name: goal joint name
      • goal_constraints/joint_constraints/position: goal joint position
    • for goal in Cartesian space
      • goal_constraints/position_constraints/header/frame_id: frame this data is associated with
      • goal_constraints/position_constraints/link_name: target link name
      • goal_constraints/position_constraints/constraint_region: bounding volume of the target point
      • goal_constraints/position_constraints/target_point_offset: offset (in the link frame) for the target point on the target link (optional)
  • max_velocity_scaling_factor: rescale the maximal velocity
  • max_acceleration_scaling_factor: rescale the maximal acceleration/deceleration

planning results in moveit_msg::MotionPlanResponse

  • trajectory_start: bypass the start_state in moveit_msgs::MotionPlanRequest
  • trajectory/joint_trajectory/joint_names: a list of the joint names of the generated joint trajectory
  • trajectory/joint_trajectory/points/(positions,velocities,accelerations,time_from_start): a list of generated way points. Each point has positions/velocities/accelerations of all joints (same order as the joint names) and time from start. The last point will have zero velocity and acceleration.
  • group_name: name of the planning group
  • error_code/val: error code of the motion planning

The LIN motion command

This planner generates linear Cartesian trajectory between goal and start poses. The planner uses the Cartesian limits to generate a trapezoidal velocity profile in Cartesian space. The translational motion is a linear interpolation between start and goal position vector. The rotational motion is quaternion slerp between start and goal orientation. The translational and rotational motion is synchronized in time. This planner only accepts start state with zero velocity. Planning result is a joint trajectory. The user needs to adapt the Cartesian velocity/acceleration scaling factor if motion plan fails due to violation of joint space limits.

Input parameters in moveit_msgs::MotionPlanRequest

  • planner_id: LIN
  • group_name: name of the planning group
  • max_velocity_scaling_factor: scaling factor of maximal Cartesian translational/rotational velocity
  • max_acceleration_scaling_factor: scaling factor of maximal Cartesian translational/rotational acceleration/deceleration
  • start_state/joint_state/(name, position and velocity: joint name/position of the start state.
  • goal_constraints (goal can be given in joint space or Cartesian space)
    • for goal in joint space
      • goal_constraints/joint_constraints/joint_name: goal joint name
      • goal_constraints/joint_constraints/position: goal joint position
    • for goal in Cartesian space
      • goal_constraints/position_constraints/header/frame_id: frame this data is associated with
      • goal_constraints/position_constraints/link_name: target link name
      • goal_constraints/position_constraints/constraint_region: bounding volume of the target point
      • goal_constraints/position_constraints/target_point_offset: offset (in the link frame) for the target point on the target link (optional)
  • max_velocity_scaling_factor: rescale the maximal velocity
  • max_acceleration_scaling_factor: rescale the maximal acceleration

planning results in moveit_msg::MotionPlanResponse

  • trajectory_start: bypass the start_state in moveit_msgs::MotionPlanRequest
  • trajectory/joint_trajectory/joint_names: a list of the joint names of the generated joint trajectory
  • trajectory/joint_trajectory/points/(positions,velocities,accelerations,time_from_start): a list of generated way points. Each point has positions/velocities/accelerations of all joints (same order as the joint names) and time from start. The last point will have zero velocity and acceleration.
  • group_name: name of the planning group
  • error_code/val: error code of the motion planning

The CIRC motion command

This planner generates a circular arc trajectory in Cartesian space between goal and start poses. There are two options for giving a path constraint:

  • the center point of the circle: The planner always generates the shorter arc between start and goal and cannot generate a half circle,
  • an interim point on the arc: The generated trajectory always goes through the interim point. The planner cannot generate a full circle.

The Cartesian limits, namely translational/rotational velocity/acceleration/deceleration need to be set and the planner uses these limits to generate a trapezoidal velocity profile in Cartesian space. The rotational motion is quaternion slerp between start and goal orientation. The translational and rotational motion is synchronized in time. This planner only accepts start state with zero velocity. Planning result is a joint trajectory. The user needs to adapt the Cartesian velocity/acceleration scaling factor if motion plan fails due to violation of joint limits.

Input parameters in moveit_msgs::MotionPlanRequest

  • planner_id: CIRC
  • group_name: name of the planning group
  • max_velocity_scaling_factor: scaling factor of maximal Cartesian translational/rotational velocity
  • max_acceleration_scaling_factor: scaling factor of maximal Cartesian translational/rotational acceleration/deceleration
  • start_state/joint_state/(name, position and velocity: joint name/position of the start state.
  • goal_constraints (goal can be given in joint space or Cartesian space)
    • for goal in joint space
      • goal_constraints/joint_constraints/joint_name: goal joint name
      • goal_constraints/joint_constraints/position: goal joint position
    • for goal in Cartesian space
      • goal_constraints/position_constraints/header/frame_id: frame this data is associated with
      • goal_constraints/position_constraints/link_name: target link name
      • goal_constraints/position_constraints/constraint_region: bounding volume of the target point
      • goal_constraints/position_constraints/target_point_offset: offset (in the link frame) for the target point on the target link (optional)
  • path_constraints (position of the interim/center point)
    • path_constraints/name: interim or center
    • path_constraints/position_constraints/constraint_region/primitive_poses/point: position of the point
  • max_velocity_scaling_factor: rescale the maximal velocity
  • max_acceleration_scaling_factor: rescale the maximal acceleration

planning results in moveit_msg::MotionPlanResponse

  • trajectory_start: bypass the start_state in moveit_msgs::MotionPlanRequest
  • trajectory/joint_trajectory/joint_names: a list of the joint names of the generated joint trajectory
  • trajectory/joint_trajectory/points/(positions,velocities,accelerations,time_from_start): a list of generated way points. Each point has positions/velocities/accelerations of all joints (same order as the joint names) and time from start. The last point will have zero velocity and acceleration.
  • group_name: name of the planning group
  • error_code/val: error code of the motion planning

Example

By running

roslaunch prbt_moveit_config demo.launch

the user can interact with the planner through rviz.

rviz figure

Using the command planner

The pilz::CommandPlanner is provided as MoveIt! Motion Planning Pipeline and, therefore, can be used with all other manipulators using MoveIt!. Loading the plugin requires the param /move_group/planner_plugin to be set to pilz::CommandPlanner before the move_group node is started.

To use the command planner cartesian limits have to be defined. The limits are expected to be under the namespace <robot_description>_planning. Where <robot_description> refers to the parameter under which the urdf is loaded. E.g. if the urdf was loaded into /robot_description the cartesian limits have to be defined at /robot_description_planning.

An example showing the cartesian limits which have to be defined can be found here.

Sequence of multiple segments

To concatenate multiple trajectories and plan the trajectory at once, you can use the sequence capability. This reduces the planning overhead and allows to follow a pre-desribed path without stopping at intermediate points.

Please note: In case the planning of a command in a sequence fails, non of the commands in the sequence are executed.

Please note: Sequences commands are allowed to contain commands for multiple groups (e.g. “Manipulator”, “Gripper”)

User interface sequence capability

A specialized MoveIt! capability takes a pilz_msgs::MotionSequenceRequest as input. The request contains a list of subsequent goals as described above and an additional blend_radius parameter. If the given blend_radius in meter is greater than zero, the corresponding trajectory is merged together with the following goal in a way, that the robot does not stop at the current goal. When the tcp comes closer to the goal than the given blend_radius, it is allowed to travel towards the next goal already. When leaving a sphere around the current goal, the robot returns onto the trajectory he would have taken without blending.

For details about the blend algorithm please refer to doc/MotionBlendAlgorithmDescription.pdf.

blend figure

Restrictions for MotionSequenceRequest

  • Only the first goal may have a start state. Following trajectories start at the previous goal.
  • Two subsequent blend_radius spheres must not overlap. blend_radius(i) + blend_radius(i+1) has to be smaller than the distance between the goals.

Action interface

In analogy to the MoveGroup action interface the user can plan and execute a pilz_msgs::MotionSequenceRequest through the action server at /sequence_move_group.

In one point the MoveGroupSequenceAction differs from the standard MoveGroup capability: If the robot is already at the goal position, the path is still executed. The underlying PlannerManager can check, if the constraints of an individual moveit_msgs::MotionPlanRequest are already satisfied but the MoveGroupSequenceAction capability doesn’t implement such a check to allow moving on a circular or comparable path.

See the pilz_robot_programming package for an example python script that shows how to use the capability.

Service interface

The service plan_sequence_path allows the user to generate a joint trajectory for a pilz_msgs::MotionSequenceRequest. The trajectory is returned and not executed.

CHANGELOG

Changelog for package pilz_trajectory_generation

0.4.14 (2021-07-22)

0.4.13 (2021-07-12)

0.4.12 (2020-11-24)

0.4.11 (2020-07-16)

  • Fix CodeCoverage warnings (Remove warnings on normal builds).
  • Contributors: Pilz GmbH and Co. KG

0.4.10 (2019-12-04)

0.4.9 (2019-11-28)

0.4.8 (2019-11-22)

0.4.7 (2019-09-10)

  • Fix clang-tidy issues
  • integrate clang-tidy via CMake flag
  • Contributors: Pilz GmbH and Co. KG

0.4.6 (2019-09-04)

0.4.5 (2019-09-03)

  • Adapt to changes in pilz_robots
  • add static code analyzing (clang-tidy)
  • drop deprecated isRobotStateEqual()
  • Contributors: Pilz GmbH and Co. KG

0.4.4 (2019-06-19)

  • fixed an error that led to trajectories not strictly increasing in time
  • Contributors: Pilz GmbH and Co. KG

0.4.3 (2019-04-08)

  • update dependencies of trajectory_generation
  • fix CIRC path generator and increase test coverage
  • adopt strictest limits in ptp planner (refactor JointLimitsContainer and TrajectoryGeneratorPTP)
  • Enable gripper commands inside a sequence
  • Contributors: Pilz GmbH and Co. KG

0.4.2 (2019-03-13)

  • re-adapt to new RobotState API: remove #attempts
  • Contributors: Pilz GmbH and Co. KG

0.4.1 (2019-02-27)

0.3.6 (2019-02-26)

  • refactor the testdataloader
  • adapt to new RobotState API: remove #attempts
  • Contributors: Pilz GmbH and Co. KG

0.3.5 (2019-02-06)

  • Increase line coverage for blending to 100%
  • refactor determining the trajectory alignment in the blend implementation
  • extend and refactor unittest of blender_transition_window
  • add planning group check to blender_transition_window
  • add more details to blend algorithm description
  • change handling of empty sequences in capabilities to be non-erroneous
  • rename command_planner -> pilz_command_planner
  • use pilz_testutils package for blend test
  • use collision-aware ik calculation
  • Contributors: Pilz GmbH and Co. KG

0.4.0 (2018-12-18)

  • Use Eigen::Isometry3d to keep up with the recent changes in moveit
  • Contributors: Chris Lalancette

0.3.1 (2018-12-17)

0.3.0 (2018-11-28)

  • add append method for avoiding duplicate points in robot_trajectory trajectories
  • Relax the precondition on trajectory generators from v_start==0 to < 1e-10 to gain robustness
  • Set last point of generated trajectories to have vel=acc=0 to match the first point.
  • add sequence action and service capabilities to concatenate multiple requests
  • Contributors: Pilz GmbH and Co. KG

0.2.2 (2018-09-26)

0.2.1 (2018-09-25)

0.1.1 (2018-09-25)

  • port to melodic
  • drop unused dependencies
  • Contributors: Pilz GmbH and Co. KG

0.2.0 (2018-09-14)

  • Changes for melodic
  • Contributors: Pilz GmbH and Co. KG

0.1.0 (2018-09-14)

  • Created trajectory generation package with ptp, lin, circ and blend planner
  • Contributors: Pilz GmbH and Co. KG

Wiki Tutorials

This package does not provide any links to tutorials in it's rosindex metadata. You can check on the ROS Wiki Tutorials page for the package.

Launch files

  • test/test_robots/prbt/launch/test_context.launch
      • gripper [default: ]
      • robot_description [default: robot_description]
      • robot_description [default: robot_description_$(arg gripper)]
  • test/test_robots/abb_irb2400/launch/move_group.launch
      • pipeline [default: pilz_command_planner]
      • debug [default: false]
      • info [default: $(arg debug)]
      • allow_trajectory_execution [default: true]
      • fake_execution [default: false]
      • max_safe_path_cost [default: 1]
      • jiggle_fraction [default: 0.05]
      • publish_monitored_planning_scene [default: true]
  • test/test_robots/abb_irb2400/launch/run_abb_irb2400.launch
    • Copyright (c) 2018 Pilz GmbH & Co. KG This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see .
      • debug [default: false]
  • test/test_robots/frankaemika_panda/launch/moveit_planning_execution.launch
    • Copyright (c) 2018 Pilz GmbH & Co. KG This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see .
      • pipeline [default: ompl]
      • load_robot_description [default: true]
  • test/test_robots/frankaemika_panda/launch/move_group.launch
      • load_gripper [default: true]
      • debug [default: false]
      • info [default: $(arg debug)]
      • allow_trajectory_execution [default: true]
      • fake_execution [default: false]
      • max_safe_path_cost [default: 1]
      • jiggle_fraction [default: 0.05]
      • publish_monitored_planning_scene [default: true]

Messages

No message files found.

Services

No service files found

Recent questions tagged pilz_trajectory_generation at Robotics Stack Exchange