运动规划
运动规划插件
MoveIt 通过**插件接口**与运动规划器配合使用。
这允许 MoveIt 与来自多个库的不同运动规划器进行通信并使用它们,从而使 MoveIt 易于扩展。运动规划器的接口是通过 ROS 操作或服务(由 move_group
节点提供)实现的。
move_group 的默认运动规划器使用 OMPL 和 MoveIt 接口通过 MoveIt 设置助手配置到 OMPL。
默认情况下可用的其他规划器是 Pilz 工业运动规划器和 CHOMP。
运动计划请求
运动计划请求指定您希望运动规划器执行的操作。
通常,您将要求运动规划器将手臂移动到不同的位置(在关节空间中)或将末端执行器移动到新的姿势。
默认情况下会检查碰撞(包括自碰撞和附加对象)。
您还可以通过 planning_pipeline
和 planner_id
参数指定规划器,以及运动规划器要检查的约束 - MoveIt 提供的内置约束是 运动学约束
:
位置约束:将链接的位置限制在空间区域内。
方向约束:将链接的方向限制在指定的滚动、俯仰或偏航限制内。
可见性约束:将链接上的点限制在特定传感器的可见性锥体内。
关节约束:将关节限制在两个值之间。
用户指定的约束:也可以使用用户定义的回调指定您自己的约束。
运动计划结果
move_group 节点将响应您的运动计划请求生成所需的轨迹。 此轨迹将使手臂(或任何关节组)移动到所需位置。 请注意,move_group 产生的结果是轨迹,而不仅仅是路径。 move_group 将使用所需的最大速度和加速度(如果指定)来生成遵循关节级速度和加速度约束的轨迹。
运动规划适配器

完整的运动规划管道将运动规划器与其他称为**规划请求适配器**的组件链接在一起。 规划请求适配器允许预处理运动规划请求和后处理运动规划响应。 预处理在几种情况下很有用,例如当机器人的起始状态略微超出机器人指定的关节限制时。 后处理对于其他几种操作是必需的,例如将为机器人生成的路径转换为时间参数化的轨迹。 MoveIt 提供了一组默认的运动规划适配器,每个适配器都执行非常特定的功能。
CheckStartStateBounds
修复起始状态边界适配器将起始状态修复为在 URDF 中指定的关节限制内。 在物理机器人的关节限制配置不正确的情况下,需要此适配器。 然后,机器人可能会处于一个或多个关节略微超出其关节限制的配置中。 在这种情况下,运动规划器无法进行规划,因为它会认为起始状态超出关节限制。 “CheckStartStateBounds”规划请求适配器将通过将起始状态移动到关节限制来“修复”起始状态。 但是,这显然不是每次都正确的解决方案 - 例如关节实际上大大超出其关节限制。 适配器的参数指定关节可以超出其限制多少才能“修复”。
ValidateWorkspaceBounds
修复工作区边界适配器将为规划指定一个默认工作区:一个尺寸为 10 m x 10 m x 10 m 的立方体。 仅当对规划器的规划请求未填写这些字段时,才会指定此工作区。
CheckStartStateCollision
修复起始状态碰撞适配器将尝试通过对关节值进行少量扰动来采样指定配置(碰撞中)附近的新无碰撞配置。 它将扰动值的量由**jiggle_fraction**参数指定,该参数控制扰动占关节总运动范围的百分比。 此适配器的另一个参数指定适配器在放弃之前将采样多少个随机扰动。
AddTimeParameterization
运动规划器通常会生成“运动路径”,即不遵守任何速度或加速度约束且未进行时间参数化的路径。 此适配器将通过应用速度和加速度约束来“时间参数化”运动计划。
ResolveConstraintFrames
可以使用子框架设置目标约束(例如,框架“cup/handle”中的姿势目标,其中“handle”是对象“cup”上的子框架)。
此适配器将约束框架更改为对象或机器人框架(例如“cup”)。
OMPL
OMPL(开放运动规划库)是一个开源运动规划库,主要实现随机运动规划器。 MoveIt 直接与 OMPL 集成,并使用该库中的运动规划器作为其主要/默认规划器集。 OMPL 中的规划器是抽象的;即 OMPL 没有机器人的概念。 相反,MoveIt 配置 OMPL 并为 OMPL 提供后端以解决机器人技术中的问题。