1
- :moveit1:
2
-
3
- ..
4
- Once updated for MoveIt 2, remove all lines above title (including this comment and :moveit1: tag)
5
-
6
1
Pilz Industrial Motion Planner
7
2
==============================
8
3
9
4
``pilz_industrial_motion_planner `` provides a trajectory generator to plan standard robot
10
- motions like PTP, LIN, CIRC with the interface of a MoveIt PlannerManager
11
- plugin.
5
+ motions like point-to-point, linear, and circular with MoveIt.
12
6
13
- User Interface MoveGroup
14
- ------------------------
15
-
16
- This package implements the ``planning_interface::PlannerManager ``
17
- interface of MoveIt. By loading the corresponding planning pipeline
18
- (``pilz_industrial_motion_planner_planning_pipeline.launch.xml `` in your
7
+ By loading the corresponding planning pipeline
8
+ (``pilz_industrial_motion_planner_planning_planner.yaml `` in your
19
9
``*_moveit_config `` package), the trajectory generation
20
- functionalities can be accessed through the user interface (c++, python
21
- or rviz) provided by the ``move_group `` node, e.g.
22
- ``/plan_kinematics_path `` service and ``/move_group `` action. For
23
- detailed usage tutorials please refer to :doc: `/doc/examples/move_group_interface/move_group_interface_tutorial `.
10
+ functionalities can be accessed through the user interface (C++, Python
11
+ or RViz) provided by the ``move_group `` node, e.g.
12
+ ``/plan_kinematic_path `` service and ``/move_action `` action.
13
+ For detailed usage tutorials, please refer to
14
+ :doc: `/doc/examples/moveit_cpp/moveitcpp_tutorial ` and
15
+ :doc: `/doc/examples/move_group_interface/move_group_interface_tutorial `.
24
16
25
17
Joint Limits
26
18
------------
27
19
28
- For all commands the planner uses maximum velocities and accelerations from
29
- the parameter server. Using the MoveIt setup assistant the file ``joint_limits.yaml ``
20
+ The planner uses maximum velocities and accelerations from the
21
+ parameters of the ROS node that is operating the Pilz planning pipeline.
22
+ Using the MoveIt Setup Assistant the file ``joint_limits.yaml ``
30
23
is auto-generated with proper defaults and loaded during startup.
31
24
32
- The limits on the parameter server override the limits from the URDF robot description.
25
+ The specified limits override the limits from the URDF robot description.
33
26
Note that while setting position limits and velocity limits is possible
34
- in both the URDF and the parameter server setting acceleration limits is
35
- only possible via the parameter server. In extension to the common
36
- ``has_acceleration `` and ``max_acceleration `` parameter we added the
37
- ability to also set ``has_deceleration `` and
38
- ``max_deceleration ``\ (<0.0).
27
+ in both the URDF and a parameter file, setting acceleration limits is
28
+ only possible using a parameter file. In addition to the common
29
+ ``has_acceleration `` and ``max_acceleration `` parameters, we added the
30
+ ability to also set ``has_deceleration `` and ``max_deceleration ``\ (<0.0).
39
31
40
32
The limits are merged under the premise that the limits from the
41
- parameter server must be stricter or at least equal to the parameters
33
+ node parameters must be stricter or at least equal to the parameters
42
34
set in the URDF.
43
35
44
- Currently the calculated trajectory will respect the limits by using the
36
+ Currently, the calculated trajectory will respect the limits by using the
45
37
strictest combination of all limits as a common limit for all joints.
46
38
47
39
Cartesian Limits
48
40
----------------
49
41
50
- For cartesian trajectory generation (LIN/CIRC) the planner needs an
51
- information about the maximum speed in 3D cartesian space. Namely
42
+ For Cartesian trajectory generation (LIN/CIRC), the planner needs
43
+ information about the maximum speed in 3D Cartesian space. Namely,
52
44
translational/rotational velocity/acceleration/deceleration need to be
53
- set on the parameter server like this:
45
+ set in the node parameters like this:
54
46
55
47
.. code :: yaml
56
48
@@ -60,22 +52,25 @@ set on the parameter server like this:
60
52
max_trans_dec : -5
61
53
max_rot_vel : 1.57
62
54
55
+ You can specify Cartesian velocity and acceleration limits in a file named
56
+ ``pilz_cartesian_limits.yaml `` in your ``*_moveit_config `` package.
57
+
63
58
The planners assume the same acceleration ratio for translational and
64
- rotational trapezoidal shapes. So the rotational acceleration is
65
- calculated as ``max\_trans\_acc / max\_trans\_vel \* max\_rot\_vel `` (and
66
- for deceleration accordingly).
59
+ rotational trapezoidal shapes. The rotational acceleration is
60
+ calculated as ``max_trans_acc / max_trans_vel * max_rot_vel ``
61
+ (and for deceleration accordingly).
67
62
68
63
Planning Interface
69
64
------------------
70
65
71
- This package uses ``moveit_msgs::MotionPlanRequest `` and ``moveit_msgs::MotionPlanResponse ``
66
+ This package uses ``moveit_msgs::msgs:: MotionPlanRequest `` and ``moveit_msgs::msg ::MotionPlanResponse ``
72
67
as input and output for motion planning. The parameters needed for each planning algorithm
73
68
are explained below.
74
69
75
- For a general introduction on how to fill a ``MotionPlanRequest `` see
70
+ For a general introduction on how to fill a ``MotionPlanRequest ``, see
76
71
:ref: `move_group_interface-planning-to-pose-goal `.
77
72
78
- You can specify "PTP", "LIN" or "CIRC" as the ``planner\_id`` of the ``MotionPlanRequest ``.
73
+ You can specify `` "PTP" ``, `` "LIN" `` or `` "CIRC" `` as the ``planner_id `` of the ``MotionPlanRequest ``.
79
74
80
75
The PTP motion command
81
76
----------------------
@@ -95,12 +90,12 @@ phases as the lead axis.
95
90
PTP Input Parameters in ``moveit_msgs::MotionPlanRequest ``
96
91
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
97
92
98
- - ``planner_id ``: PTP
99
- - ``group_name ``: name of the planning group
93
+ - ``planner_id ``: `` " PTP" ``
94
+ - ``group_name ``: the name of the planning group
100
95
- ``max_velocity_scaling_factor ``: scaling factor of maximal joint velocity
101
96
- ``max_acceleration_scaling_factor ``: scaling factor of maximal joint acceleration/deceleration
102
- - ``start_state/joint_state/(name, position and velocity ``: joint name/position/velocity(optional) of the start state.
103
- - ``goal_constraints `` (goal can be given in joint space or Cartesian space)
97
+ - ``start_state/joint_state/(name, position and velocity) ``: joint name/position/velocity (optional) of the start state.
98
+ - ``goal_constraints ``: (goal can be given in joint space or Cartesian space)
104
99
- for a goal in joint space
105
100
- ``goal_constraints/joint_constraints/joint_name ``: goal joint name
106
101
- ``goal_constraints/joint_constraints/position ``: goal joint position
@@ -123,13 +118,13 @@ PTP Planning Result in ``moveit_msg::MotionPlanResponse``
123
118
positions/velocities/accelerations of all joints (same order as the
124
119
joint names) and time from start. The last point will have zero
125
120
velocity and acceleration.
126
- - ``group_name ``: name of the planning group
121
+ - ``group_name ``: the name of the planning group
127
122
- ``error_code/val ``: error code of the motion planning
128
123
129
124
The LIN motion command
130
125
----------------------
131
126
132
- This planner generates linear Cartesian trajectory between goal and
127
+ This planner generates a linear Cartesian trajectory between goal and
133
128
start poses. The planner uses the Cartesian limits to generate a
134
129
trapezoidal velocity profile in Cartesian space. The translational
135
130
motion is a linear interpolation between start and goal position vector.
@@ -143,8 +138,8 @@ violation of joint space limits.
143
138
LIN Input Parameters in ``moveit_msgs::MotionPlanRequest ``
144
139
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
145
140
146
- - ``planner_id ``: LIN
147
- - ``group_name ``: name of the planning group
141
+ - ``planner_id ``: `` " LIN" ``
142
+ - ``group_name ``: the name of the planning group
148
143
- ``max_velocity_scaling_factor ``: scaling factor of maximal Cartesian
149
144
translational/rotational velocity
150
145
- ``max_acceleration_scaling_factor ``: scaling factor of maximal
@@ -184,7 +179,7 @@ LIN Planning Result in ``moveit_msg::MotionPlanResponse``
184
179
positions/velocities/accelerations of all joints (same order as the
185
180
joint names) and time from start. The last point will have zero
186
181
velocity and acceleration.
187
- - ``group_name ``: name of the planning group
182
+ - ``group_name ``: the name of the planning group
188
183
- ``error_code/val ``: error code of the motion planning
189
184
190
185
The CIRC motion command
@@ -206,16 +201,16 @@ velocity/acceleration/deceleration need to be set and the planner uses
206
201
these limits to generate a trapezoidal velocity profile in Cartesian
207
202
space. The rotational motion is quaternion slerp between start and goal
208
203
orientation. The translational and rotational motion is synchronized in
209
- time. This planner only accepts start state with zero velocity. Planning
204
+ time. This planner only accepts start state with zero velocity. The planning
210
205
result is a joint trajectory. The user needs to adapt the Cartesian
211
206
velocity/acceleration scaling factor if motion plan fails due to
212
207
violation of joint limits.
213
208
214
209
CIRC Input Parameters in ``moveit_msgs::MotionPlanRequest ``
215
210
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
216
211
217
- - ``planner_id ``: CIRC
218
- - ``group_name ``: name of the planning group
212
+ - ``planner_id ``: `` " CIRC" ``
213
+ - ``group_name ``: the name of the planning group
219
214
- ``max_velocity_scaling_factor ``: scaling factor of maximal Cartesian
220
215
translational/rotational velocity
221
216
- ``max_acceleration_scaling_factor ``: scaling factor of maximal
@@ -262,42 +257,87 @@ CIRC Planning Result in ``moveit_msg::MotionPlanResponse``
262
257
positions/velocities/accelerations of all joints (same order as the
263
258
joint names) and time from start. The last point will have zero
264
259
velocity and acceleration.
265
- - ``group_name ``: name of the planning group
260
+ - ``group_name ``: the name of the planning group
266
261
- ``error_code/val ``: error code of the motion planning
267
262
268
- Example
269
- -------
263
+ Examples
264
+ --------
270
265
271
266
By running
272
267
273
268
::
274
269
275
- roslaunch prbt_moveit_config demo.launch
270
+ ros2 launch moveit2_tutorials demo.launch.py rviz_config:=panda_hello_moveit.rviz
276
271
277
- the user can interact with the planner through rviz .
272
+ you can interact with the planner through the RViz MotionPlanning panel .
278
273
279
274
.. figure :: rviz_planner.png
280
275
:alt: rviz figure
281
276
277
+ To use the planner through the MoveGroup Interface, refer to
278
+ :codedir: `the MoveGroup Interface C++ example <examples/pilz_industrial_motion_planner/src/pilz_move_group.cpp> `.
279
+ To run this, execute the following commands in separate Terminals:
280
+
281
+ ::
282
+
283
+ ros2 launch moveit2_tutorials demo.launch.py rviz_config:=panda_hello_moveit.rviz
284
+ ros2 run moveit2_tutorials pilz_move_group
285
+
286
+
287
+ To use the planner using MoveIt Task Constructor, refer to
288
+ :codedir: `the MoveIt Task Constructor C++ example <examples/pilz_industrial_motion_planner/src/pilz_mtc.cpp> `.
289
+ To run this, execute the following commands in separate Terminals:
290
+
291
+ ::
292
+
293
+ ros2 launch moveit2_tutorials mtc_demo.launch.py
294
+ ros2 launch moveit2_tutorials pilz_mtc.launch.py
295
+
282
296
Using the planner
283
297
-----------------
284
298
285
299
The *pilz_industrial_motion_planner::CommandPlanner * is provided as a MoveIt Motion Planning
286
300
Pipeline and, therefore, can be used with all other manipulators using
287
301
MoveIt. Loading the plugin requires the param
288
- ``/move_group/planning_plugin `` to be set to ``pilz_industrial_motion_planner:: CommandPlanner ``
302
+ ``/move_group/<pipeline_name>/ planning_plugin `` to be set to ``pilz_industrial_motion_planner/ CommandPlanner ``
289
303
before the ``move_group `` node is started.
304
+ For example, the `panda_moveit_config package
305
+ <https://github.com/ros-planning/moveit_resources/blob/ros2/panda_moveit_config> `_
306
+ has a ``pilz_industrial_motion_planner `` pipeline set up as follows:
307
+
308
+
309
+ ::
310
+
311
+ ros2 param get /move_group pilz_industrial_motion_planner.planning_plugin
312
+
313
+ String value is: pilz_industrial_motion_planner/CommandPlanner
314
+
290
315
291
- To use the command planner cartesian limits have to be defined. The
316
+ To use the command planner, Cartesian limits have to be defined. The
292
317
limits are expected to be under the namespace
293
- ``<robot_description>_planning ``. Where ``<robot_description> `` refers
294
- to the parameter under which the URDF is loaded. E.g. if the URDF was
295
- loaded into ``/robot_description `` the cartesian limits have to be
296
- defined at ``/robot_description_planning ``.
318
+ ``<robot_description>_planning ``, where ``<robot_description> `` refers
319
+ to the parameter name under which the URDF is loaded.
320
+ For example, if the URDF was loaded into ``/robot_description `` the
321
+ Cartesian limits have to be defined at ``/robot_description_planning ``.
322
+
323
+ You can set these using a ``pilz_cartesian_limits.yaml `` file in your
324
+ ``*_moveit_config `` package.
325
+ An example showing this file can be found in `panda_moveit_config
326
+ <https://github.com/ros-planning/moveit_resources/blob/ros2/panda_moveit_config/config/pilz_cartesian_limits.yaml> `_.
327
+
328
+ To verify the limits were set correctly, you can check the parameters for your
329
+ ``move_group `` node. For example,
330
+
331
+ ::
332
+
333
+ ros2 param list /move_group --filter .*cartesian_limits
334
+
335
+ /move_group:
336
+ robot_description_planning.cartesian_limits.max_rot_vel
337
+ robot_description_planning.cartesian_limits.max_trans_acc
338
+ robot_description_planning.cartesian_limits.max_trans_dec
339
+ robot_description_planning.cartesian_limits.max_trans_vel
297
340
298
- An example showing the cartesian limits which have to be defined can be
299
- found in `prbt_moveit_config
300
- <https://github.com/ros-planning/moveit_resources/blob/master/prbt_moveit_config/config/cartesian_limits.yaml> `_.
301
341
302
342
Sequence of multiple segments
303
343
=============================
@@ -316,9 +356,10 @@ multiple groups (e.g. "Manipulator", "Gripper")
316
356
User interface sequence capability
317
357
----------------------------------
318
358
319
- A specialized MoveIt capability takes a
320
- ``moveit_msgs::MotionSequenceRequest `` as input. The request contains a
321
- list of subsequent goals as described above and an additional
359
+ A specialized MoveIt functionality known as the
360
+ :moveit_codedir: `command list manager<moveit_planners/pilz_industrial_motion_planner/include/pilz_industrial_motion_planner/command_list_manager.h> `
361
+ takes a ``moveit_msgs::msg::MotionSequenceRequest `` as input.
362
+ The request contains a list of subsequent goals as described above and an additional
322
363
``blend_radius `` parameter. If the given ``blend_radius `` in meter is
323
364
greater than zero, the corresponding trajectory is merged together with
324
365
the following goal such that the robot does not stop at the current
@@ -330,8 +371,8 @@ the trajectory it would have taken without blending.
330
371
.. figure :: blend_radius.png
331
372
:alt: blend figure
332
373
333
- Implementation details are available ` as pdf
334
- <https://github.com/ros-planning/moveit/blob/master/ moveit_planners/pilz_industrial_motion_planner/doc/MotionBlendAlgorithmDescription.pdf> `_ .
374
+ Implementation details are available
375
+ :moveit_codedir: ` as PDF< moveit_planners/pilz_industrial_motion_planner/doc/MotionBlendAlgorithmDescription.pdf> `.
335
376
336
377
Restrictions for ``MotionSequenceRequest ``
337
378
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -345,24 +386,24 @@ Restrictions for ``MotionSequenceRequest``
345
386
Action interface
346
387
~~~~~~~~~~~~~~~~
347
388
348
- In analogy to the ``MoveGroup `` action interface the user can plan and
389
+ In analogy to the ``MoveGroup `` action interface, the user can plan and
349
390
execute a ``moveit_msgs::MotionSequenceRequest `` through the action server
350
391
at ``/sequence_move_group ``.
351
392
352
393
In one point the ``MoveGroupSequenceAction `` differs from the standard
353
394
MoveGroup capability: If the robot is already at the goal position, the
354
395
path is still executed. The underlying PlannerManager can check, if the
355
- constraints of an individual ``moveit_msgs::MotionPlanRequest `` are
396
+ constraints of an individual ``moveit_msgs::msg:: MotionPlanRequest `` are
356
397
already satisfied but the ``MoveGroupSequenceAction `` capability doesn't
357
398
implement such a check to allow moving on a circular or comparable path.
358
399
359
- See the ``pilz_robot_programming `` package for an `example python script
400
+ See the ``pilz_robot_programming `` package for an `ROS1 python script
360
401
<https://github.com/PilzDE/pilz_industrial_motion/blob/melodic-devel/pilz_robot_programming/examples/demo_program.py> `_
361
402
that shows how to use the capability.
362
403
363
404
Service interface
364
405
~~~~~~~~~~~~~~~~~
365
406
366
407
The service ``plan_sequence_path `` allows the user to generate a joint
367
- trajectory for a ``moveit_msgs::MotionSequenceRequest ``. The trajectory is
368
- returned and not executed.
408
+ trajectory for a ``moveit_msgs::msg:: MotionSequenceRequest ``.
409
+ The trajectory is returned and not executed.
0 commit comments