Moveit中Motion Planning Pipeline的理解
官方文档
官方tutorial中关于Motion Planning Pipeline的介绍并不详细,但博主在官方documentation找到了比较详细的解释。
先放出官方的解释:
The complete motion planning pipeline chains together a motion planner with other components called planning request adapters. Planning request adapters allow for pre-processing motion plan requests and post-processing motion plan responses. Pre-processing is useful in several situations, e.g. when a start state for the robot is slightly outside the specified joint limits for the robot. Post-processing is needed for several other operations, e.g. to convert paths generated for a robot into time-parameterized trajectories. MoveIt provides a set of default motion planning adapters that each perform a very specific function.
- FixStartStateBounds
The fix start state bounds adapter fixes the start state to be within the joint limits specified in the URDF. The need for this adapter arises in situations where the joint limits for the physical robot are not properly configured. The robot may then end up in a configuration where one or more of its joints is slightly outside its joint limits. In this case, the motion planner is unable to plan since it will think that the starting state is outside joint limits. The “FixStartStateBounds” planning request adapter will “fix” the start state by moving it to the joint limit. However, this is obviously not the right solution every time - e.g. where the joint is really outside its joint limits by a large amount. A parameter for the adapter specifies how much the joint can be outside its limits for it to be “fixable”.
- FixWorkspaceBounds
The fix workspace bounds adapter will specify a default workspace for planning: a cube of size 10 m x 10 m x 10 m. This workspace will only be specified if the planning request to the planner does not have these fields filled in.
- FixStartStateCollision
The fix start state collision adapter will attempt to sample a new collision-free configuration near a specified configuration (in collision) by perturbing the joint values by a small amount. The amount that it will perturb the values by is specified by a “jiggle_fraction” parameter that controls the perturbation as a percentage of the total range of motion for the joint. The other parameter for this adapter specifies how many random perturbations the adapter will sample before giving up.
- FixStartStatePathConstraints
This adapter is applied when the start state for a motion plan does not obey the specified path constraints. It will attempt to plan a path between the current configuration of the robot to a new location where the path constraint is obeyed. The new location will serve as the start state for planning.
- AddTimeParameterization
The motion planners will typically generate “kinematic paths”, i.e., paths that do not obey any velocity or acceleration constraints and are not time parameterized. This adapter will “time parameterize” the motion plans by applying velocity and acceleration constraints.
- ResolveConstraintFrames
Goal constraints can be set using subframes (e.g. a pose goal in the frame cup/handle, where handle is a subframe on the object cup). This adapter changes the frame of constraints to an object or robot frame (e.g. cup).
个人理解
其上面的解释已经非常清明了了,博主个人总结如下:
motion planning pipeline就是组合了motion planner(运动规划器)和一些planning request adapters(规划请求调整器)的pipeline。motion planner这部分与Motion Planning API没什么不同;最大的区别在于planning request adapters,上面列出了很多个adapters,它主要用于对运动规划的前处理和后处理。
以FixStartStateBounds这个planning request adapters为例解读一下:
假如机器人的关节限位阈值没有配置正确(例如URDF关节的设置阈值比真实的要窄),如果当前机器人部分关节处于较小的超限状态(相对URDF来说),而你恰好想以当前姿态为初始点利用moveit做一个规划,这种情况下利用Motion Planning API是无法规划出来的,但是采用motion planning pipeline的FixStartStateBounds规划适配器就能解决这个问题,它能将小超限调整到合理的范围内,然后再进行规划,但是对于大的超限,FixStartStateBounds是无法处理的。
前处理和后处理在这里面简单来说就是以planning request adapters是在motion planner之前还是之后来划分,FixStartStateBounds, FixWorkspaceBounds, FixStartStateCollision, FixStartStatePathConstraints属于前处理,AddTimeParameterization, ResolveConstraintFrames属于后处理。
参考链接: