ed_moveit
moveit_plugin.cpp
Go to the documentation of this file.
2 
3 #include <ed/entity.h>
4 #include <ed/world_model.h>
5 #include <ed/update_request.h>
6 
7 #include <ros/node_handle.h>
8 #include <ros/advertise_service_options.h>
9 
10 #include <geolib/Shape.h>
11 #include <geolib/Mesh.h>
13 #include <geometry_msgs/Pose.h>
14 #include <shape_msgs/Mesh.h>
15 
16 
17 // ----------------------------------------------------------------------------------------------------
18 
20 {
21 }
22 
23 // ----------------------------------------------------------------------------------------------------
24 
26 {
27 }
28 
29 // ----------------------------------------------------------------------------------------------------
30 
32 {
33 }
34 
35 // ----------------------------------------------------------------------------------------------------
36 
38 {
39  ros::NodeHandle nh;
40  ros::NodeHandle nh_private("~");
41  ros::AdvertiseServiceOptions opt_publish_moveit_scene_ =
42  ros::AdvertiseServiceOptions::create<std_srvs::Trigger>(
43  "moveit_scene", boost::bind(&MoveitPlugin::srvPublishMoveitScene, this, _1, _2), ros::VoidPtr(), &cb_queue_);
44  srv_publish_moveit_scene_ = nh_private.advertiseService(opt_publish_moveit_scene_);
45 
46  moveit_scene_publisher_ = nh.advertise<moveit_msgs::PlanningSceneWorld>("planning_scene_world", 1);
47 }
48 
49 // ----------------------------------------------------------------------------------------------------
50 
52 {
53  world_model_ = &world;
54  update_req_ = &req;
55  cb_queue_.callAvailable();
56 }
57 
58 // ----------------------------------------------------------------------------------------------------
59 
60 bool MoveitPlugin::srvPublishMoveitScene(std_srvs::Trigger::Request& /*req*/, std_srvs::Trigger::Response& res)
61 {
62  ROS_INFO("[ED MOVEIT] Generating moveit planning scene");
63  moveit_msgs::PlanningSceneWorld msg;
65  {
66  const ed::EntityConstPtr& e = *it;
67 
68  if (!e->has_pose() || !e->shape() || e->existenceProbability() < 0.95 || e->hasFlag("self") || e->id() == "floor")
69  continue;
70 
71  const geo::Mesh mesh = e->shape()->getMesh();
72 
73  shape_msgs::Mesh mesh_msg;
74  geo::convert(mesh, mesh_msg);
75 
76  moveit_msgs::CollisionObject object_msg;
77  object_msg.meshes.push_back(mesh_msg);
78 
79  //Pose is in 'map' frame. When publishing in own frame, pose can be zero.
80  geometry_msgs::Pose pose_msg;
81  geo::convert(e->pose(), pose_msg);
82  object_msg.mesh_poses.push_back(pose_msg);
83 
84  object_msg.operation = moveit_msgs::CollisionObject::ADD;
85  object_msg.id = e->id().str();
86  object_msg.header.frame_id = "map";
87  object_msg.header.stamp = ros::Time::now();
88  msg.collision_objects.push_back(object_msg);
89  }
90 
91  moveit_scene_publisher_.publish(msg);
92  res.success = true;
93  return true;
94 }
95 
MoveitPlugin::configure
void configure(tue::Configuration config)
Definition: moveit_plugin.cpp:31
MoveitPlugin::update_req_
ed::UpdateRequest * update_req_
Definition: moveit_plugin.h:39
MoveitPlugin::moveit_scene_publisher_
ros::Publisher moveit_scene_publisher_
Definition: moveit_plugin.h:48
ed::UpdateRequest
MoveitPlugin::srv_publish_moveit_scene_
ros::ServiceServer srv_publish_moveit_scene_
Definition: moveit_plugin.h:46
update_request.h
ED_REGISTER_PLUGIN
#define ED_REGISTER_PLUGIN(Derived)
Shape.h
moveit_plugin.h
MoveitPlugin::cb_queue_
ros::CallbackQueue cb_queue_
Definition: moveit_plugin.h:43
MoveitPlugin::srvPublishMoveitScene
bool srvPublishMoveitScene(std_srvs::Trigger::Request &req, std_srvs::Trigger::Response &res)
Definition: moveit_plugin.cpp:60
ed::WorldModel::begin
const_iterator begin() const
MoveitPlugin
Definition: moveit_plugin.h:20
MoveitPlugin::initialize
void initialize()
Definition: moveit_plugin.cpp:37
ed::WorldModel::const_iterator
EntityIterator const_iterator
ed::EntityConstPtr
shared_ptr< const Entity > EntityConstPtr
ed::WorldModel::end
const_iterator end() const
tue::config::ReaderWriter
MoveitPlugin::world_model_
const ed::WorldModel * world_model_
Definition: moveit_plugin.h:37
MoveitPlugin::MoveitPlugin
MoveitPlugin()
Definition: moveit_plugin.cpp:19
MoveitPlugin::process
void process(const ed::WorldModel &world, ed::UpdateRequest &req)
Definition: moveit_plugin.cpp:51
req
string req
MoveitPlugin::~MoveitPlugin
virtual ~MoveitPlugin()
Definition: moveit_plugin.cpp:25
ed::WorldModel
geo::convert
void convert(const geo::DepthCamera &cam_model, sensor_msgs::CameraInfo &msg)
Mesh.h
world_model.h
entity.h
geo::Mesh
msg_conversions.h