ed
tf_publisher_plugin.cpp
Go to the documentation of this file.
1 #include "tf_publisher_plugin.h"
2 
3 #include <ed/world_model.h>
4 #include <ed/entity.h>
5 
7 
8 #include <tf2/convert.h>
9 #include <tf2/transform_datatypes.h>
10 #include <tf2/LinearMath/Transform.h>
11 #include <tf2_geometry_msgs/tf2_geometry_msgs.h>
12 #include <tf2_ros/transform_broadcaster.h>
13 
14 // ----------------------------------------------------------------------------------------------------
15 
16 TFPublisherPlugin::TFPublisherPlugin() : tf_broadcaster_(nullptr)
17 {
18 }
19 
20 // ----------------------------------------------------------------------------------------------------
21 
23 {
24 }
25 
26 // ----------------------------------------------------------------------------------------------------
27 
29 {
30  config.value("root_frame_id", root_frame_id_);
31 
33 
34  // Remove possible beginning slash
35  if (!exclude_.empty() && exclude_[0] == '/')
37 }
38 
39 // ----------------------------------------------------------------------------------------------------
40 
42 {
43  tf_broadcaster_ = std::make_unique<tf2_ros::TransformBroadcaster>();
44 }
45 
46 // ----------------------------------------------------------------------------------------------------
47 
49 {
50  for(ed::WorldModel::const_iterator it = world.begin(); it != world.end(); ++it)
51  {
52  const ed::EntityConstPtr& e = *it;
53 
54  if (!e->has_pose())
55  continue;
56 
57  std::string id = e->id().str();
58  if (!id.empty() && id[0] == '/')
59  id = id.substr(1);
60 
61  // If exclude is set, do not add entities whose id starts with exclude
62  if (!exclude_.empty() && id.size() >= exclude_.size() && id.substr(0, exclude_.size()) == exclude_)
63  continue;
64 
65  tf2::Stamped<tf2::Transform> t;
66  geo::convert(e->pose(), t);
67  t.frame_id_ = root_frame_id_;
68  t.stamp_ = ros::Time::now();
69 
70  geometry_msgs::TransformStamped msg;
71  tf2::convert(t, msg);
72  msg.child_frame_id = e->id().str();
73  tf_broadcaster_->sendTransform(msg);
74  }
75 }
76 
ed::WorldModel
Definition: world_model.h:21
ed::UpdateRequest
Definition: update_request.h:24
std::string
TFPublisherPlugin::configure
void configure(tue::Configuration config)
Definition: tf_publisher_plugin.cpp:28
entity.h
t
Timer t
ED_REGISTER_PLUGIN
#define ED_REGISTER_PLUGIN(Derived)
Definition: plugin.h:5
std::string::size
T size(T... args)
TFPublisherPlugin
Definition: tf_publisher_plugin.h:12
TFPublisherPlugin::~TFPublisherPlugin
virtual ~TFPublisherPlugin()
Definition: tf_publisher_plugin.cpp:22
ed::WorldModel::begin
const_iterator begin() const
Definition: world_model.h:68
ed::EntityConstPtr
shared_ptr< const Entity > EntityConstPtr
Definition: types.h:37
ed::WorldModel::end
const_iterator end() const
Definition: world_model.h:70
tue::config::ReaderWriter
TFPublisherPlugin::process
void process(const ed::WorldModel &world, ed::UpdateRequest &req)
Definition: tf_publisher_plugin.cpp:48
ed::convert
void convert(const geo::ShapeConstPtr shape, ed_msgs::SubVolume &sub_Volume)
converting geo::ShapeConstPtr to ed_msgs::SubVolume message
Definition: msg_conversions.h:26
tue::config::OPTIONAL
OPTIONAL
ed::WorldModel::EntityIterator
Definition: world_model.h:26
TFPublisherPlugin::initialize
void initialize()
Definition: tf_publisher_plugin.cpp:41
TFPublisherPlugin::TFPublisherPlugin
TFPublisherPlugin()
Definition: tf_publisher_plugin.cpp:16
geo::convert
void convert(const geo::DepthCamera &cam_model, sensor_msgs::CameraInfo &msg)
TFPublisherPlugin::tf_broadcaster_
std::unique_ptr< tf2_ros::TransformBroadcaster > tf_broadcaster_
Definition: tf_publisher_plugin.h:34
std::string::substr
T substr(T... args)
tue::config::ReaderWriter::value
bool value(const std::string &name, T &value, RequiredOrOptional opt=REQUIRED)
tf2_conversions.h
std::string::empty
T empty(T... args)
TFPublisherPlugin::exclude_
std::string exclude_
Definition: tf_publisher_plugin.h:32
tf_publisher_plugin.h
TFPublisherPlugin::root_frame_id_
std::string root_frame_id_
Definition: tf_publisher_plugin.h:29
config
tue::config::ReaderWriter config
world_model.h