为什么使用Industrial_trajectory_filters包?因为Moveit生产的轨迹是等距而非等时的。但是在工业应用的机器人中,通常都是按照固定的周期来控制关节轴运动。因此moveit原生的轨迹与实际机器人控制需求之间存在不匹配,这就需要通过一定的方法或工具来进行对接。Industrial_trajectory_filters功能包便可以解决轨迹对接匹配问题。为了使用Industrial_trajectory_filters包,我们首先先要了解moveit中的Planning Request Adapters的概念。

#Planning Adapter
Planning Request Adapter是Moveit中的一个概念,它可以用来修改轨迹。在Moveit中已有的Planning adapter包括AddTimeParameterization、FixWorkspaceBounds、FixStartBounds、FixStartStateCollision、FixStartStatePathConstraints、CHOMPOptimizerAdapter等等。使用Planning Adapter的概念,多个运动规划算法可以在一个pipeline中使用来产生具有鲁棒性的运动规划。例如,一个运动规划的采样pipeline可能包含了一个初始的由OMPL产生的规划,然后由CHOMP来优化产生比单独使用OMPL或CHOMP更好的路径。类似地,使用Planning Adapter的概念,依赖于机器人的操作环境,其他的运动规划器也可以进行混合和匹配。

Filters

Industrial_trajectory_filters包中包含了过滤机器人轨迹的方法。这些方法针对于工业机器人的应用。

uniform_sample_filter

对一个规划的轨迹进行重采样,在采用点之间使用统一的时间步进。重采样通过在关节空间中使用一个高阶样条曲线来完成。该过滤器需要全定义的轨迹,即轨迹点包含位置、速度和加速度。

参数

sample_duration (float) — 两个路径点间的时间步进值(单位为秒)

n_point_filter

将轨迹减少为<=N个轨迹点。这个减少过程仅使用已存在的点(并不做重采样和插值的过程)。这个filter最好与均匀采样轨迹一起使用,但也不是必须的。如果轨迹本身就少于N个点,那么这个filter就不起作用。

参数

n_points (float) — 最大路径点数量(>=2)

在Moveit中应用Filter

Planning Request Adapter - 普通用法

为了在由Moveit产生的package中使用新的Planning Request Adapter,需要做下面的工作:

1,打开由moveit产生的实际机器人package中的ompl_planning_pipeline.launch文件,添加你的filter到planning_adapters列表的第一行:

<arg name="planning_adapters" value="
     my_filter_package/MyFilter
     default_planner_request_adapters/AddTimeParameterization
     default_planner_request_adapters/FixWorkspaceBounds
     default_planner_request_adapters/FixStartStateBounds
     default_planner_request_adapters/FixStartStateCollision
     default_planner_request_adapters/FixStartStatePathConstraints" />


2,在同样的launch文件中,用ROS的方式声明你的filter所使用的参数,例如

<param name="my_filter_parameter" value="0.005">


3,到了这里,你就可以使用filter了。从机器人的moveit配置包中运行demo.launch,并使用Rviz中的MovePlanningPlugin创建一个规划路径,如果filter有输出,那么就能直接看到生成的轨迹输出。

示例

下面的例子使用industrial_trajectory_filters包中的均匀采样过滤器。

  1. 按照上面的步骤,将UniformSampleFilter加入到planning_adapters中,并配置参数:
    <arg name="planning_adapters" value="
         industrial_trajectory_filters/UniformSampleFilter
         default_planner_request_adapters/AddTimeParameterization
         default_planner_request_adapters/FixWorkspaceBounds
         default_planner_request_adapters/FixStartStateBounds
         default_planner_request_adapters/FixStartStateCollision
         default_planner_request_adapters/FixStartStatePathConstraints" />
    <param name="sample_duration" value="0.2"/>

    完成这样的配置后,再由Moveit生成的轨迹就是固定时间步进的均匀采样点。