00001 00008 #ifndef ROS_MSG_TRAJECTORY_FACTORY_H 00009 #define ROS_MSG_TRAJECTORY_FACTORY_H 00010 00011 #include <robodyn_controllers/TrajectoryFactory.h> 00012 #include <robodyn_controllers/RosMsgTrajectory.h> 00013 00014 #include <boost/concept/assert.hpp> 00015 #include <boost/concept_check.hpp> 00016 00017 #include "r2_msgs/ControllerJointSettings.h" 00018 #include "r2_msgs/ControllerPoseSettings.h" 00019 #include <sensor_msgs/JointState.h> 00020 #include "r2_msgs/PoseState.h" 00021 00022 #include <stdexcept> 00023 #include "nasa_common_logging/Logger.h" 00024 #include "robodyn_utilities/RosMsgConverter.h" 00025 00026 class RosMsgJointTrajectoryFactory 00027 { 00028 public: 00029 RosMsgJointTrajectoryFactory() {} 00030 virtual ~RosMsgJointTrajectoryFactory() {} 00031 00032 void setFactory(boost::shared_ptr<JointTrajectoryFactory<> > factory_in) 00033 { 00034 factory = factory_in; 00035 sequenceFactory.setTrajectoryFactory(factory); 00036 motionLimiter.setJointMotionLimiter(factory); 00037 } 00038 00039 void setSettings(const r2_msgs::ControllerJointSettings& settings); 00040 void getSettings(r2_msgs::ControllerJointSettings& settings); 00041 void setLimits(const std::vector<std::string>& jointNames, double velLim, double accLim); 00042 void setPositionLimiter(boost::shared_ptr<JointNamePositionLimiter> posLimiter); 00043 00051 virtual boost::shared_ptr<RosMsgJointTrajectory> getTrajectory(const sensor_msgs::JointState& jointPositions, 00052 const sensor_msgs::JointState& jointVels, 00053 const sensor_msgs::JointState& prevJointVels, 00054 const trajectory_msgs::JointTrajectory& goalTraj); 00055 00056 protected: 00057 typedef JointTrajectorySequenceFactory<> sequenceFactoryType; 00058 sequenceFactoryType sequenceFactory; 00059 boost::shared_ptr<JointTrajectoryFactory<> > factory; 00060 JointNameMotionLimiter motionLimiter; 00061 boost::shared_ptr<JointNamePositionLimiter> positionLimiter; 00062 }; 00063 00064 class RosMsgCartesianTrajectoryFactory 00065 { 00066 public: 00067 RosMsgCartesianTrajectoryFactory() {} 00068 virtual ~RosMsgCartesianTrajectoryFactory() {} 00069 00070 void setFactory(boost::shared_ptr<CartesianTrajectoryFactory<SynchedTrajectory> > factory_in) 00071 { 00072 factory = factory_in; 00073 sequenceFactory.setTrajectoryFactory(factory); 00074 } 00075 00076 void setSettings(const r2_msgs::ControllerPoseSettings& settings); 00077 00083 virtual boost::shared_ptr<RosMsgSynchedCartesianTrajectory> getTrajectory(const r2_msgs::PoseState& poseState, 00084 const r2_msgs::PoseTrajectory& goalTraj); 00085 00086 protected: 00087 typedef CartesianTrajectorySequenceFactory<SynchedTrajectory> sequenceFactoryType; 00088 sequenceFactoryType sequenceFactory; 00089 boost::shared_ptr<CartesianTrajectoryFactory<SynchedTrajectory> > factory; 00090 }; 00091 00092 #endif