Note: This tutorial assumes that you have completed the previous tutorials: Creating an Arm Navigation Package for an Industrial Robot. |
![]() |
Utilizing Trajectory Filters with a Generated Arm Navigation Package
Description: Gives an overview of the common industrial trajectory filters and shows how to apply them to an auto-generated arm navigation packageTutorial Level: INTERMEDIATE
In this tutorial we will give an overview of the more common industrial trajectory filters. We will then show how to apply the filters to an existing auto generated arm navigation package.
Common Industrial Trajectory Filters
Most industrial interfaces work best with uniformly sampled (equally space way-points) trajectories with as few points as possible. The trajectories generated by most ROS planners and smoothers are neither uniform nor sparse. The industrial trajectory filters correct ROS trajectories by first uniformly sampling the trajectory(uniform_sample_filter) and then reducing them to N points(n_point_filter).
Using Industrial Filters in an Arm Navigation Package
In the previous tutorial, an arm navigation package was generated to control your robot. The generated package includes several launch files that are used for launching a system. Be default the generic trajectory filter chain is used, but as was discussed previously this can be problematic for real industrial systems. The following procedure demonstrates how to use custom filter chains:
Edit trajectory_filter_server.launch (substitute <my_robot_pkg> with your robot package name:
change: <rosparam command="load" file="$(find trajectory_filter_server)/config/filters.yaml" /> to: <rosparam command="load" file="$(find <my_robot_pkg>)/config/filters.yaml" />
- Verify the change has been correctly made by launching the following (it should fail and complain about a missing filters.yaml file):
roslaunch <my_robot_pkg> <my_robot_pkg>_planning_environment
Add the desired trajectory filter file (see example below) to <my_robot_pkg>/config/filters.yaml
service_type: FilterJointTrajectoryWithConstraints filter_chain: # Use of the parabolic spline smoother is recommended # Cubic spline shortcutter would fail for fast moves (i.e. low number of points - name: parabolic_smoother type: IterativeParabolicSmootherFilterJointTrajectoryWithConstraints # Uniformly sample motion (creates smooth motion on controller) - name: uniform_sample_filter type: IndustrialUniformSampleFilterJointTrajectoryWithConstraints params: {sample_duration: 0.010} # Limit the number of points sent to the controller - name: n_point_filter type: IndustrialNPointFilterJointTrajectoryWithConstraints params: {n_points: 10}
- Launch your robot using:
roslaunch <my_robot_pkg> <my_robot_pkg>_planning_environment
Use the arm warehouse visualizer (in rviz) to plan and filters trajectories. The filtered trajectories should be uniform and limited to <N points if the filters are working correctly.