Aikido
RosJointStateClient.hpp
Go to the documentation of this file.
1 #ifndef AIKIDO_CONTROL_ROS_ROSJOINTSTATECLIENT_HPP_
2 #define AIKIDO_CONTROL_ROS_ROSJOINTSTATECLIENT_HPP_
3 
4 #include <string>
5 
6 #include <boost/circular_buffer.hpp>
7 #include <dart/dynamics/dynamics.hpp>
8 #include <ros/callback_queue.h>
9 #include <ros/ros.h>
10 #include <sensor_msgs/JointState.h>
11 
12 namespace aikido {
13 namespace control {
14 namespace ros {
15 
19 {
20 public:
27  dart::dynamics::SkeletonPtr _skeleton,
28  ::ros::NodeHandle _nodeHandle,
29  const std::string& _topicName,
30  std::size_t _capacity);
31 
33  void spin();
34 
38  Eigen::VectorXd getLatestPosition(
39  const dart::dynamics::MetaSkeleton& _metaSkeleton) const;
40 
41  // TODO: implement
42  // getPositionAtTime(const MetaSkeleton&, const ros::Time&, bool)
43  // that interpolates position at the specified time, optionally blocking for
44  // new data.
45 private:
47  {
48  inline bool isValid() const
49  {
50  return mStamp.isValid();
51  }
52 
53  ::ros::Time mStamp;
54  double mPosition;
55  };
56 
59  void jointStateCallback(const sensor_msgs::JointState& _jointState);
60 
61  mutable std::mutex mMutex;
62 
63  dart::dynamics::SkeletonPtr mSkeleton;
64  std::unordered_map<std::string, boost::circular_buffer<JointStateRecord>>
66  std::size_t mCapacity;
67 
68  ::ros::CallbackQueue mCallbackQueue;
69  ::ros::NodeHandle mNodeHandle;
70  ::ros::Subscriber mSubscriber;
71 };
72 
73 } // namespace ros
74 } // namespace control
75 } // namespace aikido
76 
77 #endif // ifndef AIKIDO_CONTROL_ROS_ROSJOINTSTATECLIENT_HPP_
aikido::control::ros::RosJointStateClient::RosJointStateClient
RosJointStateClient(dart::dynamics::SkeletonPtr _skeleton, ::ros::NodeHandle _nodeHandle, const std::string &_topicName, std::size_t _capacity)
Constructor.
aikido
Format of serialized trajectory in YAML.
Definition: algorithm.hpp:4
aikido::control::ros::RosJointStateClient::mSkeleton
dart::dynamics::SkeletonPtr mSkeleton
Definition: RosJointStateClient.hpp:63
aikido::control::ros::RosJointStateClient::getLatestPosition
Eigen::VectorXd getLatestPosition(const dart::dynamics::MetaSkeleton &_metaSkeleton) const
Returns the most recent position of each joint in _metaSkeleton.
aikido::control::ros::RosJointStateClient::mCapacity
std::size_t mCapacity
Definition: RosJointStateClient.hpp:66
aikido::control::ros::RosJointStateClient::JointStateRecord::mStamp
::ros::Time mStamp
Definition: RosJointStateClient.hpp:53
aikido::control::ros::RosJointStateClient::spin
void spin()
Update mBuffer with any JointState messages that have been received.
aikido::control::ros::RosJointStateClient::mMutex
std::mutex mMutex
Definition: RosJointStateClient.hpp:61
aikido::control::ros::RosJointStateClient::mCallbackQueue
::ros::CallbackQueue mCallbackQueue
Definition: RosJointStateClient.hpp:68
aikido::control::ros::RosJointStateClient
Client that listens for JointState messages for each skeleton joint and provides a method for extract...
Definition: RosJointStateClient.hpp:18
aikido::control::ros::RosJointStateClient::JointStateRecord
Definition: RosJointStateClient.hpp:46
aikido::control::ros::RosJointStateClient::JointStateRecord::isValid
bool isValid() const
Definition: RosJointStateClient.hpp:48
aikido::control::ros::RosJointStateClient::mSubscriber
::ros::Subscriber mSubscriber
Definition: RosJointStateClient.hpp:70
aikido::control::ros::RosJointStateClient::JointStateRecord::mPosition
double mPosition
Definition: RosJointStateClient.hpp:54
aikido::control::ros::RosJointStateClient::mNodeHandle
::ros::NodeHandle mNodeHandle
Definition: RosJointStateClient.hpp:69
aikido::control::ros::RosJointStateClient::mBuffer
std::unordered_map< std::string, boost::circular_buffer< JointStateRecord > > mBuffer
Definition: RosJointStateClient.hpp:65
aikido::control::ros::RosJointStateClient::jointStateCallback
void jointStateCallback(const sensor_msgs::JointState &_jointState)
Callback to add a new JointState to mBuffer.