Aikido
RosTrajectoryExecutor.hpp
Go to the documentation of this file.
1 #ifndef AIKIDO_CONTROL_ROS_ROSTRAJECTORYEXECUTOR_HPP_
2 #define AIKIDO_CONTROL_ROS_ROSTRAJECTORYEXECUTOR_HPP_
3 
4 #include <chrono>
5 #include <future>
6 #include <mutex>
7 
8 #include <actionlib/client/action_client.h>
9 #include <control_msgs/FollowJointTrajectoryAction.h>
10 #include <ros/callback_queue.h>
11 #include <ros/ros.h>
12 
15 
16 namespace aikido {
17 namespace control {
18 namespace ros {
19 
22 {
23 public:
33  const ::ros::NodeHandle& node,
34  const std::string& serverName,
35  double waypointTimestep,
36  double goalTimeTolerance,
37  const ::dart::dynamics::MetaSkeletonPtr metaskeleton,
38  const std::chrono::milliseconds& connectionTimeout
39  = std::chrono::milliseconds{1000},
40  const std::chrono::milliseconds& connectionPollingPeriod
41  = std::chrono::milliseconds{20});
42 
43  virtual ~RosTrajectoryExecutor();
44 
45  // Documentation inherited.
46  void validate(const trajectory::Trajectory* traj) override;
47 
50  std::future<void> execute(
51  const trajectory::ConstTrajectoryPtr& traj) override;
52 
56  std::future<void> execute(
57  const trajectory::ConstTrajectoryPtr& traj, const ::ros::Time& startTime);
58 
63  void step(const std::chrono::system_clock::time_point& timepoint) override;
64 
66  void cancel() override;
67 
68 private:
70  = actionlib::ActionClient<control_msgs::FollowJointTrajectoryAction>;
71  using GoalHandle = TrajectoryActionClient::GoalHandle;
72 
73  void transitionCallback(GoalHandle handle);
74 
77  const ::dart::dynamics::MetaSkeletonPtr mMetaSkeleton;
78 
79  ::ros::NodeHandle mNode;
80  ::ros::CallbackQueue mCallbackQueue;
82  TrajectoryActionClient::GoalHandle mGoalHandle;
83 
86 
87  std::chrono::milliseconds mConnectionTimeout;
88  std::chrono::milliseconds mConnectionPollingPeriod;
89 
91  std::unique_ptr<std::promise<void>> mPromise;
92 
94  mutable std::mutex mMutex;
95 };
96 
97 } // namespace ros
98 } // namespace control
99 } // namespace aikido
100 
101 #endif // ifndef AIKIDO_CONTROL_ROS_ROSTRAJECTORYEXECUTOR_HPP_
aikido::control::ros::RosTrajectoryExecutor::mMetaSkeleton
const ::dart::dynamics::MetaSkeletonPtr mMetaSkeleton
MetaSkeleton to execute trajectories on For trajectory-validation purposes only.
Definition: RosTrajectoryExecutor.hpp:77
aikido::control::ros::RosTrajectoryExecutor::RosTrajectoryExecutor
RosTrajectoryExecutor(const ::ros::NodeHandle &node, const std::string &serverName, double waypointTimestep, double goalTimeTolerance, const ::dart::dynamics::MetaSkeletonPtr metaskeleton, const std::chrono::milliseconds &connectionTimeout=std::chrono::milliseconds{1000}, const std::chrono::milliseconds &connectionPollingPeriod=std::chrono::milliseconds{20})
Constructor.
aikido
Format of serialized trajectory in YAML.
Definition: algorithm.hpp:4
aikido::control::ros::RosTrajectoryExecutor::mGoalHandle
TrajectoryActionClient::GoalHandle mGoalHandle
Definition: RosTrajectoryExecutor.hpp:82
aikido::control::ros::RosTrajectoryExecutor::validate
void validate(const trajectory::Trajectory *traj) override
Validate the traj in preparation for execution.
aikido::control::ros::RosTrajectoryExecutor::~RosTrajectoryExecutor
virtual ~RosTrajectoryExecutor()
aikido::trajectory::ConstTrajectoryPtr
std::shared_ptr< const Trajectory > ConstTrajectoryPtr
Definition: Trajectory.hpp:13
aikido::control::ros::RosTrajectoryExecutor::cancel
void cancel() override
Cancel the current trajectory.
aikido::control::ros::RosTrajectoryExecutor::mClient
TrajectoryActionClient mClient
Definition: RosTrajectoryExecutor.hpp:81
aikido::control::ros::RosTrajectoryExecutor::execute
std::future< void > execute(const trajectory::ConstTrajectoryPtr &traj) override
Sends trajectory to ROS server for execution.
aikido::control::ros::RosTrajectoryExecutor::mMutex
std::mutex mMutex
Manages access to mInProgress, mPromise.
Definition: RosTrajectoryExecutor.hpp:94
aikido::control::ros::RosTrajectoryExecutor::mConnectionPollingPeriod
std::chrono::milliseconds mConnectionPollingPeriod
Definition: RosTrajectoryExecutor.hpp:88
aikido::control::ros::RosTrajectoryExecutor::mPromise
std::unique_ptr< std::promise< void > > mPromise
Definition: RosTrajectoryExecutor.hpp:91
aikido::control::ros::RosTrajectoryExecutor::mNode
::ros::NodeHandle mNode
Definition: RosTrajectoryExecutor.hpp:79
aikido::control::ros::RosTrajectoryExecutor::mCallbackQueue
::ros::CallbackQueue mCallbackQueue
Definition: RosTrajectoryExecutor.hpp:80
aikido::control::ros::RosTrajectoryExecutor::mGoalTimeTolerance
double mGoalTimeTolerance
Definition: RosTrajectoryExecutor.hpp:85
Trajectory.hpp
aikido::control::TrajectoryExecutor
Abstract class for executing trajectories.
Definition: TrajectoryExecutor.hpp:21
aikido::control::ros::RosTrajectoryExecutor::step
void step(const std::chrono::system_clock::time_point &timepoint) override
Step to a point in time.
aikido::control::ros::RosTrajectoryExecutor::TrajectoryActionClient
actionlib::ActionClient< control_msgs::FollowJointTrajectoryAction > TrajectoryActionClient
Definition: RosTrajectoryExecutor.hpp:70
aikido::control::ros::RosTrajectoryExecutor::mConnectionTimeout
std::chrono::milliseconds mConnectionTimeout
Definition: RosTrajectoryExecutor.hpp:87
aikido::control::ros::RosTrajectoryExecutor
This class sends trajectory commands to ROS server.
Definition: RosTrajectoryExecutor.hpp:21
aikido::control::ros::RosTrajectoryExecutor::mInProgress
bool mInProgress
Definition: RosTrajectoryExecutor.hpp:90
TrajectoryExecutor.hpp
aikido::control::ros::RosTrajectoryExecutor::transitionCallback
void transitionCallback(GoalHandle handle)
aikido::trajectory::Trajectory
Time-parameterized path in a StateSpace.
Definition: Trajectory.hpp:20
aikido::control::ros::RosTrajectoryExecutor::GoalHandle
TrajectoryActionClient::GoalHandle GoalHandle
Definition: RosTrajectoryExecutor.hpp:71
aikido::control::ros::RosTrajectoryExecutor::mWaypointTimestep
double mWaypointTimestep
Definition: RosTrajectoryExecutor.hpp:84