ros2_parsers/tf_msg.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <tf2_msgs/msg/tf_message.hpp>
4 #include "fmt/format.h"
5 #include "ros2_parser.h"
6 
7 class TfMsgParser : public BuiltinMessageParser<tf2_msgs::msg::TFMessage>
8 {
9 public:
10 
11  TfMsgParser(const std::string& topic_name, PJ::PlotDataMapRef& plot_data) :
12  BuiltinMessageParser<tf2_msgs::msg::TFMessage>(topic_name, plot_data)
13  {
14  }
15 
16  void parseMessageImpl(const tf2_msgs::msg::TFMessage& msg, double& timestamp) override
17  {
18  using namespace PJ;
19 
20  for (const auto& trans : msg.transforms)
21  {
22  double header_stamp = double(trans.header.stamp.sec) +
23  double(trans.header.stamp.nanosec) * 1e-9;
24  timestamp = (_config.use_header_stamp && header_stamp > 0) ? header_stamp : timestamp;
25 
26  std::string prefix;
27  if (trans.header.frame_id.empty())
28  {
29  prefix = fmt::format("{}/{}", _topic_name, trans.child_frame_id);
30  }
31  else
32  {
33  prefix = fmt::format("{}/{}/{}", _topic_name, trans.header.frame_id, trans.child_frame_id);
34  }
35 
36  PlotData* series = &getSeries( prefix + "/header/stamp");
37  series->pushBack({ timestamp, header_stamp });
38 
39  series = &getSeries( prefix + "/translation/x");
40  series->pushBack({ timestamp, trans.transform.translation.x });
41 
42  series = &getSeries( prefix + "/translation/y");
43  series->pushBack({ timestamp, trans.transform.translation.y });
44 
45  series = &getSeries( prefix + "/translation/z");
46  series->pushBack({ timestamp, trans.transform.translation.z });
47 
48  series = &getSeries( prefix + "/rotation/x");
49  series->pushBack({ timestamp, trans.transform.rotation.x });
50 
51  series = &getSeries( prefix + "/rotation/y");
52  series->pushBack({ timestamp, trans.transform.rotation.y });
53 
54  series = &getSeries( prefix + "/rotation/z");
55  series->pushBack({ timestamp, trans.transform.rotation.z });
56 
57  series = &getSeries( prefix + "/rotation/w");
58  series->pushBack({ timestamp, trans.transform.rotation.w });
59  }
60  }
61 private:
62 
63 };
64 
PJ::PlotData & getSeries(const std::string &key)
FMT_INLINE std::basic_string< Char > format(const S &format_str, Args &&... args)
Definition: core.h:2081
void pushBack(const Point &p) override
TfMsgParser(const std::string &topic_name, PJ::PlotDataMapRef &plot_data)
std::string _topic_name
void parseMessageImpl(const tf2_msgs::msg::TFMessage &msg, double &timestamp) override
msg


plotjuggler_ros
Author(s): Davide Faconti
autogenerated on Fri Jun 23 2023 02:28:04