mesh_msgs_hdf5.cpp
Go to the documentation of this file.
3 
4 namespace mesh_msgs_hdf5 {
5 
7 {
8  ros::NodeHandle nh("~");
9 
10  if (!nh.getParam("inputFile", inputFile))
11  {
12  inputFile = "/tmp/map.h5";
13  }
14 
15  ROS_INFO_STREAM("Using input file: " << inputFile);
16 
18  "get_geometry", &hdf5_to_msg::service_getGeometry, this);
20  "get_geometry_vertices", &hdf5_to_msg::service_getGeometryVertices, this);
22  "get_geometry_faces", &hdf5_to_msg::service_getGeometryFaces, this);
24  "get_geometry_vertexnormals", &hdf5_to_msg::service_getGeometryVertexNormals, this);
26  "get_materials", &hdf5_to_msg::service_getMaterials, this);
28  "get_texture", &hdf5_to_msg::service_getTexture, this);
30  "get_uuids", &hdf5_to_msg::service_getUUIDs, this);
32  "get_vertex_colors", &hdf5_to_msg::service_getVertexColors, this);
34  "get_vertex_costs", &hdf5_to_msg::service_getVertexCosts, this);
36  "get_vertex_cost_layers", &hdf5_to_msg::service_getVertexCostLayers, this);
37 
38  pub_geometry_ = node_handle.advertise<mesh_msgs::MeshGeometryStamped>("mesh/geometry", 1, true);
39  pub_vertex_colors_ = node_handle.advertise<mesh_msgs::MeshVertexColorsStamped>("mesh/vertex_colors", 1, true);
40  pub_vertex_costs_ = node_handle.advertise<mesh_msgs::MeshVertexCostsStamped>("mesh/vertex_costs", 1);
41 
42 
44  "get_labeled_clusters", &hdf5_to_msg::service_getLabeledClusters, this);
45 
47 
49 }
50 
52 {
54 
55  // geometry
56  mesh_msgs::MeshGeometryStamped geometryMsg;
57 
58  auto vertices = io.getVertices();
59  auto faceIds = io.getFaceIds();
60  auto vertexNormals = io.getVertexNormals();
61 
62  getVertices(vertices, geometryMsg);
63  getFaces(faceIds, geometryMsg);
64  getVertexNormals(vertexNormals, geometryMsg);
65 
66  pub_geometry_.publish(geometryMsg);
67 
68  // vertex colors
69  mesh_msgs::MeshVertexColorsStamped vertexColorsMsg;
70 
71  auto vertexColors = io.getVertexColors();
72  getVertexColors(vertexColors, vertexColorsMsg);
73 
74  pub_vertex_colors_.publish(vertexColorsMsg);
75 
76  // vertex costs
77  mesh_msgs::MeshVertexCostsStamped vertexCostsMsg;
78  for (std::string costlayer : io.getCostLayers())
79  {
80  try
81  {
82  auto costs = io.getVertexCosts(costlayer);
83  getVertexCosts(costs, costlayer, vertexCostsMsg);
84 
85  pub_vertex_costs_.publish(vertexCostsMsg);
86  }
87  catch (const hf::DataSpaceException& e)
88  {
89  ROS_WARN_STREAM("Could not load costlayer " << costlayer);
90  }
91  }
92 }
93 
94 bool hdf5_to_msg::getVertices(std::vector<float>& vertices, mesh_msgs::MeshGeometryStamped& geometryMsg)
95 {
96  unsigned int nVertices = vertices.size() / 3;
97  ROS_INFO_STREAM("Found " << nVertices << " vertices");
98  geometryMsg.mesh_geometry.vertices.resize(nVertices);
99  for (unsigned int i = 0; i < nVertices; i++)
100  {
101  geometryMsg.mesh_geometry.vertices[i].x = vertices[i * 3];
102  geometryMsg.mesh_geometry.vertices[i].y = vertices[i * 3 + 1];
103  geometryMsg.mesh_geometry.vertices[i].z = vertices[i * 3 + 2];
104  }
105 
106  // Header
107  geometryMsg.uuid = mesh_uuid;
108  geometryMsg.header.frame_id = "map";
109  geometryMsg.header.stamp = ros::Time::now();
110 
111  return true;
112 }
113 
114 bool hdf5_to_msg::getFaces(std::vector<uint32_t>& faceIds, mesh_msgs::MeshGeometryStamped& geometryMsg)
115 {
116  unsigned int nFaces = faceIds.size() / 3;
117  ROS_INFO_STREAM("Found " << nFaces << " faces");
118  geometryMsg.mesh_geometry.faces.resize(nFaces);
119  for (unsigned int i = 0; i < nFaces; i++)
120  {
121  geometryMsg.mesh_geometry.faces[i].vertex_indices[0] = faceIds[i * 3];
122  geometryMsg.mesh_geometry.faces[i].vertex_indices[1] = faceIds[i * 3 + 1];
123  geometryMsg.mesh_geometry.faces[i].vertex_indices[2] = faceIds[i * 3 + 2];
124  }
125 
126  // Header
127  geometryMsg.uuid = mesh_uuid;
128  geometryMsg.header.frame_id = "map";
129  geometryMsg.header.stamp = ros::Time::now();
130 
131  return true;
132 }
133 
134 bool hdf5_to_msg::getVertexNormals(std::vector<float>& vertexNormals, mesh_msgs::MeshGeometryStamped& geometryMsg)
135 {
136  unsigned int nVertexNormals = vertexNormals.size() / 3;
137  ROS_INFO_STREAM("Found " << nVertexNormals << " vertex normals");
138  geometryMsg.mesh_geometry.vertex_normals.resize(nVertexNormals);
139  for (unsigned int i = 0; i < nVertexNormals; i++)
140  {
141  geometryMsg.mesh_geometry.vertex_normals[i].x = vertexNormals[i * 3];
142  geometryMsg.mesh_geometry.vertex_normals[i].y = vertexNormals[i * 3 + 1];
143  geometryMsg.mesh_geometry.vertex_normals[i].z = vertexNormals[i * 3 + 2];
144  }
145 
146  // Header
147  geometryMsg.uuid = mesh_uuid;
148  geometryMsg.header.frame_id = "map";
149  geometryMsg.header.stamp = ros::Time::now();
150 
151  return true;
152 }
153 
154 bool hdf5_to_msg::getVertexColors(std::vector<uint8_t>& vertexColors, mesh_msgs::MeshVertexColorsStamped& vertexColorsMsg)
155 {
156  unsigned int nVertices = vertexColors.size() / 3;
157  ROS_INFO_STREAM("Found " << nVertices << " vertices for vertex colors");
158  vertexColorsMsg.mesh_vertex_colors.vertex_colors.resize(nVertices);
159  for (unsigned int i = 0; i < nVertices; i++)
160  {
161  vertexColorsMsg.mesh_vertex_colors
162  .vertex_colors[i].r = vertexColors[i * 3] / 255.0f;
163  vertexColorsMsg.mesh_vertex_colors
164  .vertex_colors[i].g = vertexColors[i * 3 + 1] / 255.0f;
165  vertexColorsMsg.mesh_vertex_colors
166  .vertex_colors[i].b = vertexColors[i * 3 + 2] / 255.0f;
167  vertexColorsMsg.mesh_vertex_colors
168  .vertex_colors[i].a = 1;
169  }
170 
171  // Header
172  vertexColorsMsg.uuid = mesh_uuid;
173  vertexColorsMsg.header.frame_id = "map";
174  vertexColorsMsg.header.stamp = ros::Time::now();
175 
176  return true;
177 }
178 
179 bool hdf5_to_msg::getVertexCosts(std::vector<float>& costs, std::string layer, mesh_msgs::MeshVertexCostsStamped& vertexCostsMsg)
180 {
181  vertexCostsMsg.mesh_vertex_costs.costs.resize(costs.size());
182  for (uint32_t i = 0; i < costs.size(); i++)
183  {
184  vertexCostsMsg.mesh_vertex_costs.costs[i] = costs[i];
185  }
186 
187  vertexCostsMsg.uuid = mesh_uuid;
188  vertexCostsMsg.type = layer;
189  vertexCostsMsg.header.frame_id = "map";
190  vertexCostsMsg.header.stamp = ros::Time::now();
191 
192  return true;
193 }
194 
196  mesh_msgs::GetUUIDs::Request& req,
197  mesh_msgs::GetUUIDs::Response& res)
198 {
199  res.uuids.push_back(mesh_uuid);
200  return true;
201 }
202 
204  mesh_msgs::GetGeometry::Request& req,
205  mesh_msgs::GetGeometry::Response& res)
206 {
208 
209  // Vertices
210  auto vertices = io.getVertices();
211  getVertices(vertices, res.mesh_geometry_stamped);
212 
213  // Faces
214  auto faceIds = io.getFaceIds();
215  getFaces(faceIds, res.mesh_geometry_stamped);
216 
217  // Vertex normals
218  auto vertexNormals = io.getVertexNormals();
219  getVertexNormals(vertexNormals, res.mesh_geometry_stamped);
220 
221  return true;
222 }
223 
225  mesh_msgs::GetGeometry::Request& req,
226  mesh_msgs::GetGeometry::Response& res)
227 {
229 
230  // Vertices
231  auto vertices = io.getVertices();
232  return getVertices(vertices, res.mesh_geometry_stamped);
233 }
234 
236  mesh_msgs::GetGeometry::Request& req,
237  mesh_msgs::GetGeometry::Response& res)
238 {
240 
241  // Faces
242  auto faceIds = io.getFaceIds();
243  return getFaces(faceIds, res.mesh_geometry_stamped);
244 }
245 
247  mesh_msgs::GetGeometry::Request& req,
248  mesh_msgs::GetGeometry::Response& res)
249 {
251 
252  // Vertex normals
253  auto vertexNormals = io.getVertexNormals();
254  return getVertexNormals(vertexNormals, res.mesh_geometry_stamped);
255 }
256 
258  mesh_msgs::GetMaterials::Request& req,
259  mesh_msgs::GetMaterials::Response& res)
260 {
262 
263 
264  // Materials
265  auto materials = io.getMaterials();
266  auto materialFaceIndices = io.getMaterialFaceIndices(); // for each face: material index
267  unsigned int nMaterials = materials.size();
268  unsigned int nFaces = materialFaceIndices.size();
269  ROS_INFO_STREAM("Found " << nMaterials << " materials and " << nFaces << " faces");
270  res.mesh_materials_stamped.mesh_materials.materials.resize(nMaterials);
271  for (uint32_t i = 0; i < nMaterials; i++)
272  {
273  int texture_index = materials[i].textureIndex;
274 
275  // has texture
276  res.mesh_materials_stamped
277  .mesh_materials
278  .materials[i]
279  .has_texture = texture_index >= 0;
280 
281  // texture index
282  res.mesh_materials_stamped.mesh_materials.materials[i]
283  .texture_index = static_cast<uint32_t>(texture_index);
284  // color
285  res.mesh_materials_stamped.mesh_materials.materials[i]
286  .color.r = materials[i].r / 255.0f;
287  res.mesh_materials_stamped.mesh_materials.materials[i]
288  .color.g = materials[i].g / 255.0f;
289  res.mesh_materials_stamped.mesh_materials.materials[i]
290  .color.b = materials[i].b / 255.0f;
291  res.mesh_materials_stamped.mesh_materials.materials[i]
292  .color.a = 1;
293  }
294 
295  // Clusters
296  // Map materials to face IDs
297  std::map<uint32_t, std::vector<uint32_t>> materialToFaces;
298  // Iterate over face <> material index
299  for (uint32_t i = 0; i < nFaces; i++)
300  {
301  // material index for face i
302  uint32_t materialIndex = materialFaceIndices[i];
303 
304  if (materialToFaces.count(materialIndex) == 0)
305  {
306  materialToFaces.insert(std::make_pair(materialIndex, std::vector<uint32_t>()));
307  }
308 
309  materialToFaces[materialIndex].push_back(i);
310  }
311  // For each material, map contains a list of faces
312  res.mesh_materials_stamped.mesh_materials.clusters.resize(nMaterials);
313  for (uint32_t i = 0; i < nMaterials; i++)
314  {
315  for (uint32_t j = 0; j < materialToFaces[i].size(); j++)
316  {
317  res.mesh_materials_stamped.mesh_materials.clusters[i].face_indices.push_back(materialToFaces[i][j]);
318  }
319  }
320  res.mesh_materials_stamped.mesh_materials.cluster_materials.resize(nMaterials);
321  for (uint32_t i = 0; i < nMaterials; i++)
322  {
323  res.mesh_materials_stamped.mesh_materials.cluster_materials[i] = i;
324  }
325 
326  // Vertex Tex Coords
327  auto vertexTexCoords = io.getVertexTextureCoords();
328  unsigned int nVertices = vertexTexCoords.size() / 3;
329  res.mesh_materials_stamped.mesh_materials.vertex_tex_coords.resize(nVertices);
330  for (uint32_t i = 0; i < nVertices; i++)
331  {
332  // coords: u/v/w
333  // w is always 0
334  res.mesh_materials_stamped.mesh_materials.vertex_tex_coords[i].u = vertexTexCoords[3 * i];
335  res.mesh_materials_stamped.mesh_materials.vertex_tex_coords[i].v = vertexTexCoords[3 * i + 1];
336  }
337 
338  // Header
339  res.mesh_materials_stamped.uuid = mesh_uuid;
340  res.mesh_materials_stamped.header.frame_id = "map";
341  res.mesh_materials_stamped.header.stamp = ros::Time::now();
342 
343  return true;
344 }
345 
347  mesh_msgs::GetTexture::Request& req,
348  mesh_msgs::GetTexture::Response& res)
349 {
351 
352  for (auto texture : io.getTextures())
353  {
354  if (std::stoi(texture.name) == req.texture_index)
355  {
356  res.texture.texture_index = req.texture_index;
357  res.texture.uuid = mesh_uuid;
358  sensor_msgs::Image image;
359  sensor_msgs::fillImage( // TODO: only RGB, breaks when using other color channels
360  image,
361  "rgb8",
362  texture.height,
363  texture.width,
364  texture.width * 3, // step size
365  texture.data.data()
366  );
367 
368  res.texture.image = image;
369 
370  return true;
371  }
372  }
373 
374  return false;
375 }
376 
378  mesh_msgs::GetVertexColors::Request& req,
379  mesh_msgs::GetVertexColors::Response& res)
380 {
382 
383  // Vertex colors
384  auto vertexColors = io.getVertexColors();
385  return getVertexColors(vertexColors, res.mesh_vertex_colors_stamped);
386 }
387 
389  mesh_msgs::GetVertexCosts::Request& req,
390  mesh_msgs::GetVertexCosts::Response& res)
391 {
393 
394  auto costs = io.getVertexCosts(req.layer);
395  return getVertexCosts(costs, req.layer, res.mesh_vertex_costs_stamped);
396 }
397 
399  mesh_msgs::GetVertexCostLayers::Request &req,
400  mesh_msgs::GetVertexCostLayers::Response &res)
401 {
403 
404  res.layers = io.getCostLayers();
405  return true;
406 }
407 
409  mesh_msgs::GetLabeledClusters::Request& req,
410  mesh_msgs::GetLabeledClusters::Response& res)
411 {
413 
414  // iterate over groups
415  auto groups = io.getLabelGroups();
416  for (size_t i = 0; i < groups.size(); i++)
417  {
418  // iterate over labels in group
419  auto labelsInGroup = io.getAllLabelsOfGroup(groups[i]);
420  for (size_t j = 0; j < labelsInGroup.size(); j++)
421  {
422  // copy label
423  auto faceIds = io.getFaceIdsOfLabel(groups[i], labelsInGroup[j]);
424  mesh_msgs::MeshFaceCluster cluster;
425  std::stringstream ss;
426  ss << groups[i] << "_" << labelsInGroup[j];
427  cluster.label = ss.str();
428  cluster.face_indices.resize(faceIds.size());
429  for (size_t k = 0; k < faceIds.size(); k++)
430  {
431  cluster.face_indices[k] = faceIds[k];
432  }
433  res.clusters.push_back(cluster);
434  }
435  }
436 
437  return true;
438 }
439 
440 void hdf5_to_msg::callback_clusterLabel(const mesh_msgs::MeshFaceClusterStamped::ConstPtr& msg)
441 {
442  if (msg->uuid.compare(mesh_uuid) != 0)
443  {
444  ROS_ERROR("Invalid mesh UUID");
445  return;
446  }
447 
449 
450  // TODO: implement optional override
451  ROS_WARN("Override is enabled by default");
452 
453  // split label id into group and name
454  std::vector<std::string> split_results;
455  boost::split(split_results, msg->cluster.label, [](char c){ return c == '_'; });
456 
457  if (split_results.size() != 2)
458  {
459  ROS_ERROR("Received illegal cluster name");
460  return;
461  }
462 
463 
464  std::string label_group = split_results[0];
465  std::string label_name = split_results[1];
466  std::vector<uint32_t> indices;
467  for (size_t i = 0; i < msg->cluster.face_indices.size(); i++)
468  {
469  indices.push_back(msg->cluster.face_indices[i]);
470  }
471 
472  // write to hdf5
473  io.addLabel(label_group, label_name, indices);
474 }
475 
476 } // namespace mesh_msgs_hdf5
477 
478 int main(int argc, char **args)
479 {
480  ros::init(argc, args, "mesh_msgs_hdf5");
481  mesh_msgs_hdf5::hdf5_to_msg hdf5_to_msg;
483  spinner.spin();
484  return 0;
485 }
hdf5_map_io.h
hdf5_map_io::HDF5MapIO::getMaterials
std::vector< MapMaterial > getMaterials()
hdf5_map_io::HDF5MapIO::getLabelGroups
std::vector< std::string > getLabelGroups()
mesh_msgs_hdf5::hdf5_to_msg::getVertexCosts
bool getVertexCosts(std::vector< float > &vertexCosts, std::string layer, mesh_msgs::MeshVertexCostsStamped &vertexCostsMsg)
Definition: mesh_msgs_hdf5.cpp:179
hdf5_map_io::HDF5MapIO::getMaterialFaceIndices
std::vector< uint32_t > getMaterialFaceIndices()
ros::MultiThreadedSpinner
mesh_msgs_hdf5::hdf5_to_msg::node_handle
ros::NodeHandle node_handle
Definition: mesh_msgs_hdf5.h:111
mesh_msgs_hdf5::hdf5_to_msg::service_getVertexCosts
bool service_getVertexCosts(mesh_msgs::GetVertexCosts::Request &req, mesh_msgs::GetVertexCosts::Response &res)
Definition: mesh_msgs_hdf5.cpp:388
mesh_msgs_hdf5::hdf5_to_msg::sub_cluster_label_
ros::Subscriber sub_cluster_label_
Definition: mesh_msgs_hdf5.h:108
mesh_msgs_hdf5::hdf5_to_msg::srv_get_geometry_
ros::ServiceServer srv_get_geometry_
Definition: mesh_msgs_hdf5.h:91
hdf5_map_io::HDF5MapIO::getFaceIds
std::vector< uint32_t > getFaceIds()
ros::init
ROSCPP_DECL void init(const M_string &remappings, const std::string &name, uint32_t options=0)
mesh_msgs_hdf5::hdf5_to_msg::pub_vertex_colors_
ros::Publisher pub_vertex_colors_
Definition: mesh_msgs_hdf5.h:103
mesh_msgs_hdf5::hdf5_to_msg::service_getMaterials
bool service_getMaterials(mesh_msgs::GetMaterials::Request &req, mesh_msgs::GetMaterials::Response &res)
Definition: mesh_msgs_hdf5.cpp:257
hdf5_map_io::HDF5MapIO::getAllLabelsOfGroup
std::vector< std::string > getAllLabelsOfGroup(std::string groupName)
ros::NodeHandle::getParam
bool getParam(const std::string &key, bool &b) const
mesh_msgs_hdf5::hdf5_to_msg::srv_get_vertex_colors_
ros::ServiceServer srv_get_vertex_colors_
Definition: mesh_msgs_hdf5.h:97
mesh_msgs_hdf5::hdf5_to_msg::service_getUUIDs
bool service_getUUIDs(mesh_msgs::GetUUIDs::Request &req, mesh_msgs::GetUUIDs::Response &res)
Definition: mesh_msgs_hdf5.cpp:195
mesh_msgs_hdf5::hdf5_to_msg::getVertexNormals
bool getVertexNormals(std::vector< float > &vertexNormals, mesh_msgs::MeshGeometryStamped &geometryMsg)
Definition: mesh_msgs_hdf5.cpp:134
hdf5_map_io::HDF5MapIO::getFaceIdsOfLabel
std::vector< uint32_t > getFaceIdsOfLabel(std::string groupName, std::string labelName)
ros::NodeHandle::advertiseService
ServiceServer advertiseService(AdvertiseServiceOptions &ops)
mesh_msgs_hdf5::hdf5_to_msg::hdf5_to_msg
hdf5_to_msg()
Definition: mesh_msgs_hdf5.cpp:6
mesh_msgs_hdf5::hdf5_to_msg::service_getVertexCostLayers
bool service_getVertexCostLayers(mesh_msgs::GetVertexCostLayers::Request &req, mesh_msgs::GetVertexCostLayers::Response &res)
Definition: mesh_msgs_hdf5.cpp:398
sensor_msgs::fillImage
static bool fillImage(Image &image, const std::string &encoding_arg, uint32_t rows_arg, uint32_t cols_arg, uint32_t step_arg, const void *data_arg)
mesh_msgs_hdf5::hdf5_to_msg::loadAndPublishGeometry
void loadAndPublishGeometry()
Definition: mesh_msgs_hdf5.cpp:51
hdf5_map_io::HDF5MapIO::getCostLayers
std::vector< std::string > getCostLayers()
mesh_msgs_hdf5::hdf5_to_msg
Definition: mesh_msgs_hdf5.h:31
ros::Publisher::publish
void publish(const boost::shared_ptr< M > &message) const
ros::NodeHandle::advertise
Publisher advertise(AdvertiseOptions &ops)
mesh_msgs_hdf5::hdf5_to_msg::srv_get_geometry_vertex_normals_
ros::ServiceServer srv_get_geometry_vertex_normals_
Definition: mesh_msgs_hdf5.h:94
mesh_msgs_hdf5::hdf5_to_msg::srv_get_labeled_clusters_
ros::ServiceServer srv_get_labeled_clusters_
Definition: mesh_msgs_hdf5.h:107
spinner
void spinner()
mesh_msgs_hdf5::hdf5_to_msg::getVertices
bool getVertices(std::vector< float > &vertices, mesh_msgs::MeshGeometryStamped &geometryMsg)
Definition: mesh_msgs_hdf5.cpp:94
main
int main(int argc, char **args)
Definition: mesh_msgs_hdf5.cpp:478
ROS_WARN_STREAM
#define ROS_WARN_STREAM(args)
mesh_msgs_hdf5::hdf5_to_msg::srv_get_uuids_
ros::ServiceServer srv_get_uuids_
Definition: mesh_msgs_hdf5.h:90
hdf5_map_io::HDF5MapIO::getVertexCosts
std::vector< float > getVertexCosts(std::string costlayer)
hdf5_map_io::HDF5MapIO::getVertexNormals
std::vector< float > getVertexNormals()
mesh_msgs_hdf5::hdf5_to_msg::srv_get_vertex_costs_
ros::ServiceServer srv_get_vertex_costs_
Definition: mesh_msgs_hdf5.h:98
mesh_msgs_hdf5::hdf5_to_msg::pub_vertex_costs_
ros::Publisher pub_vertex_costs_
Definition: mesh_msgs_hdf5.h:104
mesh_msgs_hdf5::hdf5_to_msg::srv_get_vertex_cost_layers_
ros::ServiceServer srv_get_vertex_cost_layers_
Definition: mesh_msgs_hdf5.h:99
mesh_msgs_hdf5::hdf5_to_msg::service_getLabeledClusters
bool service_getLabeledClusters(mesh_msgs::GetLabeledClusters::Request &req, mesh_msgs::GetLabeledClusters::Response &res)
Definition: mesh_msgs_hdf5.cpp:408
mesh_msgs_hdf5::hdf5_to_msg::srv_get_materials_
ros::ServiceServer srv_get_materials_
Definition: mesh_msgs_hdf5.h:95
hdf5_map_io::HDF5MapIO::getVertexTextureCoords
std::vector< float > getVertexTextureCoords()
hdf5_map_io::HDF5MapIO::getTextures
std::vector< MapImage > getTextures()
ROS_WARN
#define ROS_WARN(...)
mesh_msgs_hdf5::hdf5_to_msg::srv_get_geometry_vertices_
ros::ServiceServer srv_get_geometry_vertices_
Definition: mesh_msgs_hdf5.h:92
ros::NodeHandle::subscribe
Subscriber subscribe(const std::string &topic, uint32_t queue_size, const boost::function< void(C)> &callback, const VoidConstPtr &tracked_object=VoidConstPtr(), const TransportHints &transport_hints=TransportHints())
mesh_msgs_hdf5::hdf5_to_msg::service_getVertexColors
bool service_getVertexColors(mesh_msgs::GetVertexColors::Request &req, mesh_msgs::GetVertexColors::Response &res)
Definition: mesh_msgs_hdf5.cpp:377
ROS_INFO_STREAM
#define ROS_INFO_STREAM(args)
mesh_msgs_hdf5::hdf5_to_msg::getFaces
bool getFaces(std::vector< uint32_t > &faceIds, mesh_msgs::MeshGeometryStamped &geometryMsg)
Definition: mesh_msgs_hdf5.cpp:114
mesh_msgs_hdf5::hdf5_to_msg::inputFile
std::string inputFile
Definition: mesh_msgs_hdf5.h:114
argc
int argc
hdf5_map_io::HDF5MapIO
mesh_msgs_hdf5::hdf5_to_msg::service_getTexture
bool service_getTexture(mesh_msgs::GetTexture::Request &req, mesh_msgs::GetTexture::Response &res)
Definition: mesh_msgs_hdf5.cpp:346
mesh_msgs_hdf5.h
mesh_msgs_hdf5::hdf5_to_msg::getVertexColors
bool getVertexColors(std::vector< uint8_t > &vertexColors, mesh_msgs::MeshVertexColorsStamped &vertexColorsMsg)
Definition: mesh_msgs_hdf5.cpp:154
mesh_msgs_hdf5::hdf5_to_msg::service_getGeometryVertexNormals
bool service_getGeometryVertexNormals(mesh_msgs::GetGeometry::Request &req, mesh_msgs::GetGeometry::Response &res)
Definition: mesh_msgs_hdf5.cpp:246
mesh_msgs_hdf5::hdf5_to_msg::srv_get_texture_
ros::ServiceServer srv_get_texture_
Definition: mesh_msgs_hdf5.h:96
mesh_msgs_hdf5::hdf5_to_msg::service_getGeometryVertices
bool service_getGeometryVertices(mesh_msgs::GetGeometry::Request &req, mesh_msgs::GetGeometry::Response &res)
Definition: mesh_msgs_hdf5.cpp:224
hdf5_map_io::HDF5MapIO::getVertexColors
std::vector< uint8_t > getVertexColors()
mesh_msgs_hdf5::hdf5_to_msg::srv_get_geometry_faces_
ros::ServiceServer srv_get_geometry_faces_
Definition: mesh_msgs_hdf5.h:93
ROS_ERROR
#define ROS_ERROR(...)
hdf5_map_io::HDF5MapIO::getVertices
std::vector< float > getVertices()
mesh_msgs_hdf5::hdf5_to_msg::service_getGeometryFaces
bool service_getGeometryFaces(mesh_msgs::GetGeometry::Request &req, mesh_msgs::GetGeometry::Response &res)
Definition: mesh_msgs_hdf5.cpp:235
mesh_msgs_hdf5::hdf5_to_msg::callback_clusterLabel
void callback_clusterLabel(const mesh_msgs::MeshFaceClusterStamped::ConstPtr &msg)
Definition: mesh_msgs_hdf5.cpp:440
hdf5_map_io::HDF5MapIO::addLabel
void addLabel(std::string groupName, std::string labelName, std::vector< uint32_t > &faceIds)
args
mesh_msgs_hdf5::hdf5_to_msg::service_getGeometry
bool service_getGeometry(mesh_msgs::GetGeometry::Request &req, mesh_msgs::GetGeometry::Response &res)
Definition: mesh_msgs_hdf5.cpp:203
mesh_msgs_hdf5::hdf5_to_msg::mesh_uuid
std::string mesh_uuid
Definition: mesh_msgs_hdf5.h:116
mesh_msgs_hdf5
Definition: mesh_msgs_hdf5.h:28
mesh_msgs_hdf5::hdf5_to_msg::pub_geometry_
ros::Publisher pub_geometry_
Definition: mesh_msgs_hdf5.h:102
ros::NodeHandle
ros::Time::now
static Time now()


mesh_msgs_hdf5
Author(s): Sebastian Pütz
autogenerated on Sun Jan 21 2024 04:06:20