| |
Learn how to create your own trajectory filter
Description: Learn how to create your own trajectory filterKeywords: trajectory_msgs
Tutorial Level: INTERMEDIATE
This is essentially an example of Implementing a Filter with sample code.
Filter Code
Create the actual filter code at src/filter.cpp. All it does is multiply each point by -1, for example purposes.
#include <motion_planning_msgs/JointTrajectoryWithLimits.h>
#include <motion_planning_msgs/FilterJointTrajectory.h>
#include <filters/filter_base.h>
#include <pluginlib/class_list_macros.h>
template <typename T>
class MyFilter: public filters::FilterBase<T>
{
public:
MyFilter(){};
~MyFilter(){};
bool configure() { return true; }
bool update(const T& trajectory_in, T& trajectory_out);
};
template <typename T>
inline bool MyFilter<T>::update(const T& trajectory_in,
T& trajectory_out)
{
bool success = true;
int size = trajectory_in.trajectory.points.size();
int num_traj = trajectory_in.trajectory.joint_names.size();
trajectory_out = trajectory_in;
// for every point in time:
for (int i=0; i<size; ++i)
{
// for every (joint) trajectory
for (int j=0; j<num_traj; ++j)
{
double x1 = trajectory_in.trajectory.points[i].positions[j];
trajectory_out.trajectory.points[i].positions[j] = -x1;
}
}
return success;
}
PLUGINLIB_REGISTER_CLASS(MyFilter, MyFilter<motion_planning_msgs::FilterJointTrajectory::Request>, filters::FilterBase<motion_planning_msgs::FilterJointTrajectory::Request>)
Plugin Declaration
Create the plugin declaration as an xml file called default_plugins.xml
1 <class_libraries>
2 <library path="lib/libstyle_trajectory">
3 <class name="MyFilter" type="MyFilter<motion_planning_msgs::FilterJointTrajectory::Request>"
4 base_class_type="filters::FilterBase<motion_planning_msgs::FilterJointTrajectory::Request>">
5 <description>
6 Generates velocities and accelerations from numerical differentiation
7 </description>
8 </class>
9 </library>
10 </class_libraries>
CMakeLists.txt
cmake_minimum_required(VERSION 2.4.6)
include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake)
rosbuild_init()
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
rosbuild_add_library(${PROJECT_NAME} src/filter.cpp)
Manifest.xml
1 <package>
2 <description brief="awesome_trajectory">
3 awesome_trajectory
4
5 </description>
6 <author>David!!</author>
7 <license>BSD</license>
8 <review status="unreviewed" notes=""/>
9 <url>http://ros.org/wiki/awesome_trajectory</url>
10 <depend package="roscpp" />
11 <depend package="filters" />
12 <depend package="trajectory_msgs" />
13 <depend package="motion_planning_msgs" />
14
15 <export>
16 <cpp cflags="-I${prefix}/include -I${prefix}/msg/cpp" lflags="-Wl,-rpath,${prefix}/lib -L${prefix}/lib -lawesome_trajectory"/>
17 <filters plugin="${prefix}/default_plugins.xml" />
18 </export>
19
20
21 </package>







