DataTracker.cpp
Go to the documentation of this file.
1 
18 #include <ros/ros.h>
19 #include <asr_msgs/AsrObject.h>
20 #include <sensor_msgs/JointState.h>
21 #include <geometry_msgs/PoseStamped.h>
22 #include <posedetection_msgs/Object6DPose.h>
23 #include <string>
24 #include <iostream>
25 #include <fstream>
26 #include <boost/thread.hpp>
27 
28 
29 class DataTracker {
30 public:
32 
33  // Subscriptions
37 
39 
40  double pan, tilt;
41  geometry_msgs::Pose fob_pose;
42  geometry_msgs::Pose cbd_pose;
43 
45 
46  void ptuCB(const sensor_msgs::JointState& ptu_msg) {
47  ROS_DEBUG("ptu Message recieved");
48  pan = ptu_msg.position[0];
49  tilt = ptu_msg.position[1];
50  }
51 
52  void fobCB(const asr_msgs::AsrObject& fob_msg) {
53  if (!fob_msg.identifier.empty() && strcmp(fob_msg.identifier.c_str(), "tracker_left_raw") == 0) {
54  ROS_DEBUG("fob message recieved");
55  geometry_msgs::PoseWithCovariance current_pose_with_c = fob_msg.sampledPoses.back();
56  fob_pose = current_pose_with_c.pose;
57  }
58  }
59  void cbdCB(const geometry_msgs::PoseStamped& cbd_msg) {
60  ROS_DEBUG("cbd message recieved");
61  ROS_INFO("cbd message recieved");
62  cbd_pose = cbd_msg.pose;
63  }
64 
66  this->nh = nh;
67  nh.getParam("ptu_topic", ptu_topic);
68  nh.getParam("fob_topic", fob_topic);
69  nh.getParam("cbd_topic", cbd_topic);
70  nh.getParam("output_file_path", output_file_path);
71 
72  ptu_sub = nh.subscribe(ptu_topic, 1, &DataTracker::ptuCB, this);
73  fob_sub = nh.subscribe(fob_topic, 1, &DataTracker::fobCB, this);
74  cbd_sub = nh.subscribe(cbd_topic, 1, &DataTracker::cbdCB, this);
75  data_counter = 0;
76  boost::thread trackerThread(spin, this);
77  ros::spin();
78  }
79  static void spin(DataTracker* obj){
80  ROS_INFO("Capturing started.");
81  ROS_INFO("Enter 'e' to stop capturing.");
82  while (std::cin.get() != 'e'){
83  obj->write();
84  }
85  ROS_INFO("Capturing stopped.");
86  }
87 
88 
89  void write(){
90  std::stringstream ss;
91  ss << pan << "; " << tilt << "; ";
92  ss << fob_pose.position.x << "; " << fob_pose.position.y << "; " << fob_pose.position.z << "; ";
93  ss << fob_pose.orientation.w << "; " << fob_pose.orientation.x << "; " << fob_pose.orientation.y << "; " << fob_pose.orientation.z << "; ";
94  ss << cbd_pose.position.x << "; " << cbd_pose.position.y << "; " << cbd_pose.position.z << std::endl;
95  ROS_INFO("%s", ss.str().c_str());
96  std::ofstream dataFile;
97  dataFile.open (output_file_path.c_str(),std::ios::app);
98  dataFile << ss.str();
99  dataFile.close();
100  ROS_INFO("data captured %d", data_counter);
101  data_counter++;
102  }
103 
104 };
105 
106 int main(int argc, char** argv)
107 {
108  ros::init(argc, argv, "calibration_tracker");
109 
110  ros::NodeHandle nh("~");
111  new ::DataTracker(nh);
112  //ros::spin();
113 
114  return 0;
115 }
void fobCB(const asr_msgs::AsrObject &fob_msg)
Definition: DataTracker.cpp:52
std::string fob_topic
Definition: DataTracker.cpp:38
static void spin(DataTracker *obj)
Definition: DataTracker.cpp:79
ros::Subscriber ptu_sub
Definition: DataTracker.cpp:34
void write()
Definition: DataTracker.cpp:89
Subscriber subscribe(const std::string &topic, uint32_t queue_size, void(T::*fp)(M), T *obj, const TransportHints &transport_hints=TransportHints())
ROSCPP_DECL void init(int &argc, char **argv, const std::string &name, uint32_t options=0)
std::string output_file_path
Definition: DataTracker.cpp:38
ROSCPP_DECL void spin(Spinner &spinner)
DataTracker(ros::NodeHandle nh)
Definition: DataTracker.cpp:65
std::string cbd_topic
Definition: DataTracker.cpp:38
#define ROS_INFO(...)
std::string ptu_topic
Definition: DataTracker.cpp:38
ros::Subscriber fob_sub
Definition: DataTracker.cpp:35
geometry_msgs::Pose fob_pose
Definition: DataTracker.cpp:41
void cbdCB(const geometry_msgs::PoseStamped &cbd_msg)
Definition: DataTracker.cpp:59
geometry_msgs::Pose cbd_pose
Definition: DataTracker.cpp:42
ros::Subscriber cbd_sub
Definition: DataTracker.cpp:36
void ptuCB(const sensor_msgs::JointState &ptu_msg)
Definition: DataTracker.cpp:46
int main(int argc, char **argv)
bool getParam(const std::string &key, std::string &s) const
ros::NodeHandle nh
Definition: DataTracker.cpp:31
#define ROS_DEBUG(...)


asr_calibration_tool_dome
Author(s): Heller Florian, Stöckle Patrick, Wittenbeck Valerij
autogenerated on Mon Jun 10 2019 12:46:03