ed
builder_plugin.cpp
Go to the documentation of this file.
1 #include "builder_plugin.h"
2 
3 #include <ed/entity.h>
4 #include <ed/world_model.h>
5 #include <ed/update_request.h>
6 #include <ed/models/loader.h>
7 
8 #include <ros/node_handle.h>
9 #include <ros/advertise_service_options.h>
10 
12 
13 // ----------------------------------------------------------------------------------------------------
14 
16 {
17 }
18 
19 // ----------------------------------------------------------------------------------------------------
20 
22 {
23 }
24 
25 // ----------------------------------------------------------------------------------------------------
26 
28 {
29 
30 }
31 
32 // ----------------------------------------------------------------------------------------------------
33 
35 {
36  ros::NodeHandle nh;
37  ros::AdvertiseServiceOptions opt_set_entity =
38  ros::AdvertiseServiceOptions::create<ed_msgs::SetEntity>(
39  "/ed/set_entity", boost::bind(&BuilderPlugin::srvSetEntity, this, _1, _2), ros::VoidPtr(), &cb_queue_);
40  srv_set_entity_ = nh.advertiseService(opt_set_entity);
41 }
42 
43 // ----------------------------------------------------------------------------------------------------
44 
46 {
47  world_model_ = &world;
48  update_req_ = &req;
49  cb_queue_.callAvailable();
50 }
51 
52 // ----------------------------------------------------------------------------------------------------
53 
54 bool BuilderPlugin::srvSetEntity(ed_msgs::SetEntity::Request& req, ed_msgs::SetEntity::Response& res)
55 {
56  if (req.action == ed_msgs::SetEntity::Request::ADD)
57  {
58  ed::models::Loader l;
59  geo::ShapePtr shape = l.loadShape(req.type);
60  if (shape)
61  {
62  ed::EntityPtr e(new ed::Entity(req.id, req.type));
63  e->setShape(shape);
64 
65  // Set the pose
66  geo::Pose3D pose;
67  geo::convert(req.pose, pose);
68  e->setPose(pose);
69 
70  update_req_->setEntity(e);
71  }
72  else
73  {
74  res.error_msg = "No shape could be loaded for type '" + req.type + "'.";
75  }
76  }
77  else if (req.action == ed_msgs::SetEntity::Request::DELETE)
78  {
79  update_req_->removeEntity(req.id);
80  }
81  else if (req.action == ed_msgs::SetEntity::Request::UPDATE_POSE)
82  {
84  if (e)
85  {
86  geo::Pose3D new_pose;
87  geo::convert(req.pose, new_pose);
88 
89  ed::EntityPtr e_new(new ed::Entity(*e));
90  e_new->setPose(new_pose);
91 
92  update_req_->setEntity(e_new);
93  }
94  else
95  {
96  res.error_msg = "Entity '" + req.id + "' does not exist.";
97  }
98  }
99 
100  return true;
101 }
102 
ed::WorldModel::getEntity
EntityConstPtr getEntity(const ed::UUID &id) const
Definition: world_model.h:76
ed::WorldModel
Definition: world_model.h:21
ed::UpdateRequest
Definition: update_request.h:24
std::shared_ptr
BuilderPlugin::configure
void configure(tue::Configuration config)
Definition: builder_plugin.cpp:27
BuilderPlugin::world_model_
const ed::WorldModel * world_model_
Definition: builder_plugin.h:36
entity.h
BuilderPlugin::cb_queue_
ros::CallbackQueue cb_queue_
Definition: builder_plugin.h:42
ED_REGISTER_PLUGIN
#define ED_REGISTER_PLUGIN(Derived)
Definition: plugin.h:5
BuilderPlugin::srv_set_entity_
ros::ServiceServer srv_set_entity_
Definition: builder_plugin.h:44
geo::Transform3T
ed::UpdateRequest::removeEntity
void removeEntity(const UUID &id)
Definition: update_request.h:194
BuilderPlugin::srvSetEntity
bool srvSetEntity(ed_msgs::SetEntity::Request &req, ed_msgs::SetEntity::Response &res)
Definition: builder_plugin.cpp:54
ed::EntityConstPtr
shared_ptr< const Entity > EntityConstPtr
Definition: types.h:37
tue::config::ReaderWriter
update_request.h
ed::Entity
Definition: entity.h:30
BuilderPlugin
Definition: builder_plugin.h:19
BuilderPlugin::BuilderPlugin
BuilderPlugin()
Definition: builder_plugin.cpp:15
geo::convert
void convert(const geo::DepthCamera &cam_model, sensor_msgs::CameraInfo &msg)
BuilderPlugin::~BuilderPlugin
virtual ~BuilderPlugin()
Definition: builder_plugin.cpp:21
BuilderPlugin::process
void process(const ed::WorldModel &world, ed::UpdateRequest &req)
Definition: builder_plugin.cpp:45
BuilderPlugin::initialize
void initialize()
Definition: builder_plugin.cpp:34
BuilderPlugin::update_req_
ed::UpdateRequest * update_req_
Definition: builder_plugin.h:38
msg_conversions.h
ed::EntityPtr
shared_ptr< Entity > EntityPtr
Definition: types.h:35
builder_plugin.h
world_model.h