Aikido
RosJointModeCommandClient.hpp
Go to the documentation of this file.
1 #ifndef AIKIDO_CONTROL_ROS_ROSJOINTMODECOMMANDCLIENT_HPP_
2 #define AIKIDO_CONTROL_ROS_ROSJOINTMODECOMMANDCLIENT_HPP_
3 
4 #include <chrono>
5 #include <future>
6 #include <mutex>
7 
8 #include <actionlib/client/action_client.h>
9 #include <pr_control_msgs/JointGroupCommandAction.h>
10 #include <pr_control_msgs/JointModeCommandAction.h>
11 #include <ros/callback_queue.h>
12 #include <ros/ros.h>
13 
14 // ros_control
15 #include <hardware_interface/joint_mode_interface.h>
16 
17 namespace aikido {
18 namespace control {
19 namespace ros {
20 
21 static inline int intFromMode(hardware_interface::JointCommandModes mode)
22 {
23  switch (mode)
24  {
25  case hardware_interface::JointCommandModes::BEGIN:
26  return -1;
27  case hardware_interface::JointCommandModes::MODE_POSITION:
28  return 0;
29  case hardware_interface::JointCommandModes::MODE_VELOCITY:
30  return 1;
31  case hardware_interface::JointCommandModes::MODE_EFFORT:
32  return 2;
33  case hardware_interface::JointCommandModes::NOMODE:
34  return 3;
35  case hardware_interface::JointCommandModes::EMERGENCY_STOP:
36  return 4;
37  case hardware_interface::JointCommandModes::SWITCHING:
38  return 5;
39  default:
40  ROS_WARN_STREAM("Setting error mode to'" << 6 << "'.");
41  return 6;
42  }
43 }
44 
49 {
50 public:
58  const ::ros::NodeHandle& node,
59  const std::string& serverName,
60  const std::vector<std::string> jointNames,
61  const std::chrono::milliseconds connectionTimeout
62  = std::chrono::milliseconds{1000},
63  const std::chrono::milliseconds connectionPollingPeriod
64  = std::chrono::milliseconds{20});
65 
67 
72  std::future<int> execute(
73  const std::vector<hardware_interface::JointCommandModes>& goal);
74 
78  void step();
79 
82  void cancel();
83 
84 private:
86  = actionlib::ActionClient<pr_control_msgs::JointModeCommandAction>;
87  using GoalHandle = JointModeCommandActionClient::GoalHandle;
88 
89  void transitionCallback(GoalHandle handle);
90 
91  const ::ros::NodeHandle mNode;
92  ::ros::CallbackQueue mCallbackQueue;
94  JointModeCommandActionClient::GoalHandle mGoalHandle;
95 
96  std::vector<std::string> mJointNames;
97 
98  std::chrono::milliseconds mConnectionTimeout;
99  std::chrono::milliseconds mConnectionPollingPeriod;
100 
102  std::unique_ptr<std::promise<int>> mPromise;
103 
105  mutable std::mutex mMutex;
106 };
107 
108 } // namespace ros
109 } // namespace control
110 } // namespace aikido
111 
112 #endif // ifndef AIKIDO_CONTROL_ROS_ROSJOINTMODECOMMANDCLIENT_HPP_
aikido::control::ros::RosJointModeCommandClient::mPromise
std::unique_ptr< std::promise< int > > mPromise
Definition: RosJointModeCommandClient.hpp:102
aikido::control::ros::RosJointModeCommandClient::execute
std::future< int > execute(const std::vector< hardware_interface::JointCommandModes > &goal)
Send command to ROS server for execution.
aikido::control::ros::RosJointModeCommandClient::mJointNames
std::vector< std::string > mJointNames
Definition: RosJointModeCommandClient.hpp:96
aikido::control::ros::RosJointModeCommandClient::~RosJointModeCommandClient
virtual ~RosJointModeCommandClient()
aikido
Format of serialized trajectory in YAML.
Definition: algorithm.hpp:4
aikido::control::ros::RosJointModeCommandClient::mGoalHandle
JointModeCommandActionClient::GoalHandle mGoalHandle
Definition: RosJointModeCommandClient.hpp:94
aikido::control::ros::intFromMode
static int intFromMode(hardware_interface::JointCommandModes mode)
Definition: RosJointModeCommandClient.hpp:21
aikido::control::ros::RosJointModeCommandClient::mConnectionTimeout
std::chrono::milliseconds mConnectionTimeout
Definition: RosJointModeCommandClient.hpp:98
aikido::control::ros::RosJointModeCommandClient::mInProgress
bool mInProgress
Definition: RosJointModeCommandClient.hpp:101
aikido::control::ros::RosJointModeCommandClient::mCallbackQueue
::ros::CallbackQueue mCallbackQueue
Definition: RosJointModeCommandClient.hpp:92
aikido::control::ros::RosJointModeCommandClient::RosJointModeCommandClient
RosJointModeCommandClient(const ::ros::NodeHandle &node, const std::string &serverName, const std::vector< std::string > jointNames, const std::chrono::milliseconds connectionTimeout=std::chrono::milliseconds{1000}, const std::chrono::milliseconds connectionPollingPeriod=std::chrono::milliseconds{20})
Constructor.
aikido::control::ros::RosJointModeCommandClient::mClient
JointModeCommandActionClient mClient
Definition: RosJointModeCommandClient.hpp:93
aikido::control::ros::RosJointModeCommandClient::JointModeCommandActionClient
actionlib::ActionClient< pr_control_msgs::JointModeCommandAction > JointModeCommandActionClient
Definition: RosJointModeCommandClient.hpp:86
aikido::control::ros::RosJointModeCommandClient::GoalHandle
JointModeCommandActionClient::GoalHandle GoalHandle
Definition: RosJointModeCommandClient.hpp:87
aikido::control::ros::RosJointModeCommandClient::transitionCallback
void transitionCallback(GoalHandle handle)
aikido::control::ros::RosJointModeCommandClient::mNode
const ::ros::NodeHandle mNode
Definition: RosJointModeCommandClient.hpp:91
aikido::control::ros::RosJointModeCommandClient
This class uses actionlib to command an action of the type pr_control_msgs/JointModeCommandAction.
Definition: RosJointModeCommandClient.hpp:48
aikido::control::ros::RosJointModeCommandClient::mConnectionPollingPeriod
std::chrono::milliseconds mConnectionPollingPeriod
Definition: RosJointModeCommandClient.hpp:99
aikido::control::ros::RosJointModeCommandClient::step
void step()
aikido::control::ros::RosJointModeCommandClient::cancel
void cancel()
Cancel current command.
aikido::control::ros::RosJointModeCommandClient::mMutex
std::mutex mMutex
Manages access to mInProgress, mPromise.
Definition: RosJointModeCommandClient.hpp:105