tesseract_ignition_visualization.cpp
Go to the documentation of this file.
1 
29 #include <gz/msgs/MessageTypes.hh>
30 #include <gz/common/Console.hh>
31 #include <gz/math/eigen3/Conversions.hh>
33 
38 
48 
50 static const std::string DEFAULT_SCENE_TOPIC_NAME = "/tesseract_ignition/topic/scene";
51 
53 static const std::string DEFAULT_POSE_TOPIC_NAME = "/tesseract_ignition/topic/pose";
54 
56 static const std::string DEFAULT_DELETION_TOPIC_NAME = "/tesseract_ignition/topic/deletion";
57 
58 static const std::string COLLISION_RESULTS_MODEL_NAME = "tesseract_collision_results_model";
59 static const std::string AXES_MODEL_NAME = "tesseract_axes_model";
60 static const std::string ARROW_MODEL_NAME = "tesseract_arrow_model";
61 static const std::string TOOL_PATH_MODEL_NAME = "tesseract_tool_path_model";
62 
64 {
66 {
67  scene_pub_ = node_.Advertise<gz::msgs::Scene>(DEFAULT_SCENE_TOPIC_NAME);
68  pose_pub_ = node_.Advertise<gz::msgs::Pose_V>(DEFAULT_POSE_TOPIC_NAME);
69  deletion_pub_ = node_.Advertise<gz::msgs::UInt32_V>(DEFAULT_DELETION_TOPIC_NAME);
70 }
71 
73 {
74  return scene_pub_.HasConnections() && pose_pub_.HasConnections() && deletion_pub_.HasConnections();
75 }
76 
78 {
79  if (seconds == 0)
80  seconds = std::numeric_limits<long>::max();
81 
82  for (int i = 0; i < seconds; ++i)
83  {
84  if (!isConnected())
85  sleep(1);
86  else
87  break;
88  }
89 }
90 
92 {
93  gz::msgs::Scene msg;
95  scene_pub_.Publish(msg);
96 }
97 
99  std::string /*ns*/)
100 {
101  sendSceneState(state);
102 }
103 
105  const tesseract_scene_graph::StateSolver& state_solver,
106  std::string /*ns*/)
107 {
108  std::chrono::duration<double> fp_s(5.0 / static_cast<double>(traj.size()));
109  for (const auto& traj_state : traj)
110  {
111  tesseract_scene_graph::SceneState state = state_solver.getState(traj_state.joint_names, traj_state.position);
112  sendSceneState(state);
113  std::this_thread::sleep_for(fp_s);
114  }
115 }
116 
117 void addArrow(EntityManager& entity_manager, gz::msgs::Link& link, long& sub_index, const ArrowMarker& marker)
118 {
119  std::string gv_name = link.name() + "_" + std::to_string(++sub_index);
120  gz::msgs::Visual* gv_msg = link.add_visual();
121  gv_msg->set_id(static_cast<unsigned>(entity_manager.addVisual(gv_name)));
122  gv_msg->set_name(gv_name);
123 
124  gv_msg->mutable_pose()->CopyFrom(gz::msgs::Convert(gz::math::eigen3::convert(marker.pose)));
125 
126  gz::msgs::Geometry geometry_msg;
127  geometry_msg.set_type(gz::msgs::Geometry::Type::Geometry_Type_CYLINDER);
128  gz::msgs::CylinderGeom shape_geometry_msg;
129  shape_geometry_msg.set_radius(marker.shaft_radius);
130  shape_geometry_msg.set_length(marker.shaft_length);
131  geometry_msg.mutable_cylinder()->CopyFrom(shape_geometry_msg);
132  gv_msg->mutable_geometry()->CopyFrom(geometry_msg);
133  gz::msgs::Material shape_material_msg;
134  shape_material_msg.mutable_diffuse()->set_r(static_cast<float>(marker.material->color(0)));
135  shape_material_msg.mutable_diffuse()->set_g(static_cast<float>(marker.material->color(1)));
136  shape_material_msg.mutable_diffuse()->set_b(static_cast<float>(marker.material->color(2)));
137  shape_material_msg.mutable_diffuse()->set_a(static_cast<float>(marker.material->color(3)));
138  gv_msg->mutable_material()->CopyFrom(shape_material_msg);
139  gv_msg->set_parent_name(link.name());
140 }
141 
142 void addCylinder(EntityManager& entity_manager,
143  gz::msgs::Link& link,
144  long& sub_index,
145  const Eigen::Ref<const Eigen::Vector3d>& pt1,
146  const Eigen::Ref<const Eigen::Vector3d>& pt2,
147  const tesseract_scene_graph::Material& material,
148  const Eigen::Vector3d& /*scale*/)
149 {
150  std::string gv_name = link.name() + "_" + std::to_string(++sub_index);
151  gz::msgs::Visual* gv_msg = link.add_visual();
152  gv_msg->set_id(static_cast<unsigned>(entity_manager.addVisual(gv_name)));
153  gv_msg->set_name(gv_name);
154 
155  Eigen::Isometry3d pose = Eigen::Isometry3d::Identity();
156  Eigen::Vector3d x, y, z;
157  z = (pt2 - pt1).normalized();
158  y = z.unitOrthogonal();
159  x = (y.cross(z)).normalized();
160  Eigen::Matrix3d rot;
161  rot.col(0) = x;
162  rot.col(1) = y;
163  rot.col(2) = z;
164  pose.linear() = rot;
165  pose.translation() = pt1 + (((pt2 - pt1).norm() / 2) * z);
166 
167  gv_msg->mutable_pose()->CopyFrom(gz::msgs::Convert(gz::math::eigen3::convert(pose)));
168 
169  gz::msgs::Geometry geometry_msg;
170  geometry_msg.set_type(gz::msgs::Geometry::Type::Geometry_Type_CYLINDER);
171  gz::msgs::CylinderGeom shape_geometry_msg;
172  shape_geometry_msg.set_radius(1);
173  shape_geometry_msg.set_length((pt2 - pt1).norm());
174  geometry_msg.mutable_cylinder()->CopyFrom(shape_geometry_msg);
175  gv_msg->mutable_geometry()->CopyFrom(geometry_msg);
176  gz::msgs::Material shape_material_msg;
177  shape_material_msg.mutable_diffuse()->set_r(static_cast<float>(material.color(0)));
178  shape_material_msg.mutable_diffuse()->set_g(static_cast<float>(material.color(1)));
179  shape_material_msg.mutable_diffuse()->set_b(static_cast<float>(material.color(2)));
180  shape_material_msg.mutable_diffuse()->set_a(static_cast<float>(material.color(3)));
181  gv_msg->mutable_material()->CopyFrom(shape_material_msg);
182  gv_msg->set_parent_name(link.name());
183 }
184 
185 void addAxis(EntityManager& entity_manager, gz::msgs::Link& link, long& sub_index, const AxisMarker& m)
186 {
187  Eigen::Vector3d x_axis = m.axis.matrix().block<3, 1>(0, 0);
188  Eigen::Vector3d y_axis = m.axis.matrix().block<3, 1>(0, 1);
189  Eigen::Vector3d z_axis = m.axis.matrix().block<3, 1>(0, 2);
190  Eigen::Vector3d position = m.axis.matrix().block<3, 1>(0, 3);
191  Eigen::Vector3d scale = m.getScale();
192 
193  std::string gv_name = link.name() + "_" + std::to_string(++sub_index);
194  tesseract_scene_graph::Material axis_red("axis_red");
195  axis_red.color = Eigen::Vector4d(1, 0, 0, 1);
196  tesseract_scene_graph::Material axis_green("axis_green");
197  axis_red.color = Eigen::Vector4d(0, 1, 0, 1);
198  tesseract_scene_graph::Material axis_blue("axis_blue");
199  axis_red.color = Eigen::Vector4d(0, 0, 1, 1);
200 
201  addCylinder(entity_manager, link, sub_index, position, position + (scale(0) * x_axis), axis_red, scale * (1.0 / 20));
202  addCylinder(
203  entity_manager, link, sub_index, position, position + (scale(1) * y_axis), axis_green, scale * (1.0 / 20));
204  addCylinder(entity_manager, link, sub_index, position, position + (scale(2) * z_axis), axis_blue, scale * (1.0 / 20));
205 }
206 
207 void TesseractIgnitionVisualization::plotMarker(const Marker& marker, std::string /*ns*/)
208 {
209  switch (marker.getType())
210  {
211  case static_cast<int>(MarkerType::ARROW):
212  {
213  const auto& m = dynamic_cast<const ArrowMarker&>(marker);
214  gz::msgs::Scene scene_msg;
215  scene_msg.set_name("scene");
216  gz::msgs::Model* model = scene_msg.add_model();
217  std::string model_name = ARROW_MODEL_NAME;
218  model->set_name(model_name);
219  model->set_id(static_cast<unsigned>(entity_manager_.addModel(model_name)));
220 
221  long cnt = 0;
222  std::string link_name = model_name + std::to_string(++cnt);
223  gz::msgs::Link* link_msg = model->add_link();
224  link_msg->set_id(static_cast<unsigned>(entity_manager_.addVisual(link_name)));
225  link_msg->set_name(link_name);
226  addArrow(entity_manager_, *link_msg, cnt, m);
227  scene_pub_.Publish(scene_msg);
228  break;
229  }
230  case static_cast<int>(MarkerType::AXIS):
231  {
232  const auto& m = dynamic_cast<const AxisMarker&>(marker);
233 
234  gz::msgs::Scene scene_msg;
235  scene_msg.set_name("scene");
236  gz::msgs::Model* model = scene_msg.add_model();
237  std::string model_name = AXES_MODEL_NAME;
238  model->set_name(model_name);
239  model->set_id(static_cast<unsigned>(entity_manager_.addModel(model_name)));
240 
241  long cnt = 0;
242  std::string link_name = model_name + std::to_string(++cnt);
243  gz::msgs::Link* link_msg = model->add_link();
244  link_msg->set_id(static_cast<unsigned>(entity_manager_.addVisual(link_name)));
245  link_msg->set_name(link_name);
246  addAxis(entity_manager_, *link_msg, cnt, m.axis);
247  scene_pub_.Publish(scene_msg);
248  break;
249  }
250  case static_cast<int>(MarkerType::CONTACT_RESULTS):
251  {
252  const auto& m = dynamic_cast<const ContactResultsMarker&>(marker);
253 
254  gz::msgs::Scene scene_msg;
255  scene_msg.set_name("scene");
256  gz::msgs::Model* model = scene_msg.add_model();
257  std::string model_name = COLLISION_RESULTS_MODEL_NAME;
258  model->set_name(model_name);
259  model->set_id(static_cast<unsigned>(entity_manager_.addModel(model_name)));
260 
261  long cnt = 0;
262  for (size_t i = 0; i < m.dist_results.size(); ++i)
263  {
264  const tesseract_collision::ContactResult& dist = m.dist_results[i];
265  double safety_distance = m.margin_data.getPairCollisionMargin(dist.link_names[0], dist.link_names[1]);
266 
267  std::string link_name = model_name + std::to_string(++cnt);
268  gz::msgs::Link* link_msg = model->add_link();
269  link_msg->set_id(static_cast<unsigned>(entity_manager_.addVisual(link_name)));
270  link_msg->set_name(link_name);
271 
272  auto base_material = std::make_shared<tesseract_scene_graph::Material>("base_material");
273  if (dist.distance < 0)
274  {
275  base_material->color << 1.0, 0.0, 0.0, 1.0;
276  }
277  else if (dist.distance < safety_distance)
278  {
279  base_material->color << 1.0, 1.0, 0.0, 1.0;
280  }
281  else
282  {
283  base_material->color << 0.0, 1.0, 0.0, 1.0;
284  }
285 
287  {
288  ArrowMarker am(dist.transform[0] * dist.nearest_points_local[0],
289  dist.cc_transform[0] * dist.nearest_points_local[0]);
290  am.material = std::make_shared<tesseract_scene_graph::Material>("cc_material");
291  am.material->color << 0.0, 0.0, 1.0, 1.0;
292  addArrow(entity_manager_, *link_msg, cnt, am);
293  }
294 
296  {
297  ArrowMarker am(dist.transform[1] * dist.nearest_points_local[1],
298  dist.cc_transform[1] * dist.nearest_points_local[1]);
299  am.material = std::make_shared<tesseract_scene_graph::Material>("cc_material");
300  am.material->color << 0.0, 0.0, 0.5, 1.0;
301  addArrow(entity_manager_, *link_msg, cnt, am);
302  }
303 
304  auto it0 = std::find(m.link_names.begin(), m.link_names.end(), dist.link_names[0]);
305  auto it1 = std::find(m.link_names.begin(), m.link_names.end(), dist.link_names[1]);
306 
307  if (it0 != m.link_names.end() && it1 != m.link_names.end())
308  {
309  ArrowMarker am1(dist.nearest_points[0], dist.nearest_points[1]);
310  am1.material = base_material;
311  addArrow(entity_manager_, *link_msg, cnt, am1);
312 
313  ArrowMarker am2(dist.nearest_points[1], dist.nearest_points[0]);
314  am2.material = base_material;
315  addArrow(entity_manager_, *link_msg, cnt, am2);
316  }
317  else if (it0 != m.link_names.end())
318  {
319  ArrowMarker am(dist.nearest_points[1], dist.nearest_points[0]);
320  am.material = base_material;
321  addArrow(entity_manager_, *link_msg, cnt, am);
322  }
323  else
324  {
325  ArrowMarker am(dist.nearest_points[0], dist.nearest_points[1]);
326  am.material = base_material;
327  addArrow(entity_manager_, *link_msg, cnt, am);
328  }
329  }
330  scene_pub_.Publish(scene_msg);
331  break;
332  }
333  default:
334  {
335  ignwarn << "plotMarkers: Unsupported marker type: " << std::to_string(marker.getType()) << "\n";
336  }
337  }
338 }
339 
340 void TesseractIgnitionVisualization::plotMarkers(const std::vector<std::shared_ptr<Marker> >& /*markers*/,
341  std::string /*ns*/)
342 {
343  ignerr << "plotMarkers is currently not implemented!\n";
344 }
345 
347 {
348  gz::msgs::UInt32_V deletion_msg;
350  if (id >= 1000)
351  deletion_msg.add_data(static_cast<unsigned>(id));
352 
354  if (id >= 1000)
355  deletion_msg.add_data(static_cast<unsigned>(id));
356 
358  if (id >= 1000)
359  deletion_msg.add_data(static_cast<unsigned>(id));
360 
361  deletion_pub_.Publish(deletion_msg);
362 }
363 
365 {
366  std::cout << message << "\n";
367  std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
368 }
369 
371 {
372  gz::msgs::Pose_V pose_v;
373  for (const auto& pair : scene_state.link_transforms)
374  {
375  gz::msgs::Pose* pose = pose_v.add_pose();
376  pose->CopyFrom(gz::msgs::Convert(gz::math::eigen3::convert(pair.second)));
377  pose->set_name(pair.first);
378  pose->set_id(static_cast<unsigned>(entity_manager_.getLink(pair.first)));
379  }
380 
381  if (!pose_pub_.Publish(pose_v))
382  {
383  ignerr << "Failed to publish pose vector!\n";
384  }
385 }
386 
387 // void TesseractIgnitionVisualization::plotTrajectory(const tesseract_planning::Instruction& instruction)
388 //{
389 // using namespace tesseract_planning;
390 // tesseract_environment::StateSolver::Ptr state_solver = env_->getStateSolver();
391 
392 // CompositeInstruction c;
393 // if (isCompositeInstruction(instruction))
394 // {
395 // c = *(instruction.cast_const<CompositeInstruction>());
396 // }
397 // else if (isMoveInstruction(instruction))
398 // {
399 // const auto* mi = instruction.cast_const<MoveInstruction>();
400 // c.setManipulatorInfo(mi->getManipulatorInfo());
401 // c.push_back(instruction);
402 // }
403 // else
404 // {
405 // ignerr << "plotTrajectoy: Unsupported Instruction Type!\n";
406 // return;
407 // }
408 
409 // TrajectoryPlayer player;
410 // player.setProgram(c);
411 // while (!player.isFinished())
412 // {
413 // tesseract_planning::MoveInstruction mi = player.getNext();
414 // if (isStateWaypoint(mi.getWaypoint()))
415 // {
416 // const auto* swp = mi.getWaypoint().cast_const<StateWaypoint>();
417 // assert(static_cast<long>(swp->joint_names.size()) == swp->position.size());
418 // tesseract_environment::EnvState::Ptr state = state_solver->getState(swp->joint_names, swp->position);
419 // sendEnvState(state);
420 // }
421 // else if (isJointWaypoint(mi.getWaypoint()))
422 // {
423 // const auto* jwp = mi.getWaypoint().cast_const<JointWaypoint>();
424 // assert(static_cast<long>(jwp->joint_names.size()) == jwp->size());
425 // tesseract_environment::EnvState::Ptr state = state_solver->getState(jwp->joint_names, *jwp);
426 // sendEnvState(state);
427 // }
428 // else
429 // {
430 // ignerr << "plotTrajectoy: Unsupported Waypoint Type!\n";
431 // }
432 // }
433 //}
434 
435 // void TesseractIgnitionVisualization::plotToolPath(const tesseract_planning::Instruction& instruction)
436 //{
437 // using namespace tesseract_planning;
438 
439 // gz::msgs::Scene scene_msg;
440 // scene_msg.set_name("scene");
441 // gz::msgs::Model* model = scene_msg.add_model();
442 // std::string model_name = TOOL_PATH_MODEL_NAME;
443 // model->set_name(model_name);
444 // model->set_id(static_cast<unsigned>(entity_manager_.addModel(model_name)));
445 
446 // tesseract_environment::StateSolver::Ptr state_solver = env_->getStateSolver();
447 // if (isCompositeInstruction(instruction))
448 // {
449 // const auto* ci = instruction.cast_const<CompositeInstruction>();
450 
451 // // Assume all the plan instructions have the same manipulator as the composite
452 // assert(!ci->getManipulatorInfo().empty());
453 // const tesseract_common::ManipulatorInfo& composite_mi = ci->getManipulatorInfo();
454 
455 // auto composite_mi_fwd_kin = env_->getManipulatorManager()->getFwdKinematicSolver(composite_mi.manipulator);
456 // if (composite_mi_fwd_kin == nullptr)
457 // {
458 // ignerr << "plotToolPath: Manipulator: " << composite_mi.manipulator << " does not exist!\n";
459 // return;
460 // }
461 // const std::string& tip_link = composite_mi_fwd_kin->getTipLinkName();
462 
463 // std::vector<std::reference_wrapper<const Instruction>> fi = tesseract_planning::flatten(*ci, planFilter);
464 // if (fi.empty())
465 // fi = tesseract_planning::flatten(*ci, moveFilter);
466 
467 // long cnt = 0;
468 // for (const auto& i : fi)
469 // {
470 // tesseract_common::ManipulatorInfo manip_info;
471 
472 // std::string link_name = model_name + std::to_string(++cnt);
473 // gz::msgs::Link* link_msg = model->add_link();
474 // link_msg->set_id(static_cast<unsigned>(entity_manager_.addVisual(link_name)));
475 // link_msg->set_name(link_name);
476 
477 // // Check for updated manipulator information and get waypoint
478 // Waypoint wp;
479 // if (isPlanInstruction(i.get()))
480 // {
481 // const auto* pi = i.get().cast_const<PlanInstruction>();
482 // manip_info = composite_mi.getCombined(pi->getManipulatorInfo());
483 // wp = pi->getWaypoint();
484 // }
485 // else if (isMoveInstruction(i.get()))
486 // {
487 // const auto* mi = i.get().cast_const<MoveInstruction>();
488 // manip_info = composite_mi.getCombined(mi->getManipulatorInfo());
489 // wp = mi->getWaypoint();
490 // }
491 
492 // // Extract TCP
493 // Eigen::Isometry3d tcp = env_->findTCP(manip_info);
494 
495 // if (isStateWaypoint(wp))
496 // {
497 // const auto* swp = wp.cast_const<StateWaypoint>();
498 // assert(static_cast<long>(swp->joint_names.size()) == swp->position.size());
499 // tesseract_environment::EnvState::Ptr state = state_solver->getState(swp->joint_names, swp->position);
500 // addAxis(entity_manager_, *link_msg, cnt, link_name, state->link_transforms[tip_link] * tcp, 0.05);
501 // }
502 // else if (isJointWaypoint(wp))
503 // {
504 // const auto* jwp = wp.cast_const<JointWaypoint>();
505 // assert(static_cast<long>(jwp->joint_names.size()) == jwp->size());
506 // tesseract_environment::EnvState::Ptr state = state_solver->getState(jwp->joint_names, *jwp);
507 // addAxis(entity_manager_, *link_msg, cnt, link_name, state->link_transforms[tip_link] * tcp, 0.05);
508 // }
509 // else if (isCartesianWaypoint(wp))
510 // {
511 // const auto* cwp = wp.cast_const<CartesianWaypoint>();
512 // if (manip_info.working_frame.empty())
513 // {
514 // addAxis(entity_manager_, *link_msg, cnt, link_name, (*cwp), 0.05);
515 // }
516 // else
517 // {
518 // tesseract_environment::EnvState::ConstPtr state = env_->getCurrentState();
519 // addAxis(entity_manager_,
520 // *link_msg,
521 // cnt,
522 // link_name,
523 // state->link_transforms.at(manip_info.working_frame) * (*cwp),
524 // 0.05);
525 // }
526 // }
527 // else
528 // {
529 // ignerr << "plotTrajectoy: Unsupported Waypoint Type!\n";
530 // }
531 // }
532 // }
533 // else if (isPlanInstruction(instruction))
534 // {
535 // long cnt = 0;
536 // std::string link_name = model_name + std::to_string(++cnt);
537 // gz::msgs::Link* link_msg = model->add_link();
538 // link_msg->set_id(static_cast<unsigned>(entity_manager_.addVisual(link_name)));
539 // link_msg->set_name(link_name);
540 
541 // assert(isPlanInstruction(instruction));
542 // const auto* pi = instruction.cast_const<PlanInstruction>();
543 
544 // // Assume all the plan instructions have the same manipulator as the composite
545 // assert(!pi->getManipulatorInfo().empty());
546 // const tesseract_common::ManipulatorInfo& composite_mi = pi->getManipulatorInfo();
547 // tesseract_common::ManipulatorInfo manip_info = composite_mi.getCombined(pi->getManipulatorInfo());
548 
549 // auto composite_mi_fwd_kin = env_->getManipulatorManager()->getFwdKinematicSolver(manip_info.manipulator);
550 // if (composite_mi_fwd_kin == nullptr)
551 // {
552 // ignerr << "plotToolPath: Manipulator: " << manip_info.manipulator << " does not exist!\n";
553 // return;
554 // }
555 // const std::string& tip_link = composite_mi_fwd_kin->getTipLinkName();
556 
557 // // Extract TCP
558 // Eigen::Isometry3d tcp = env_->findTCP(manip_info);
559 
560 // if (isStateWaypoint(pi->getWaypoint()))
561 // {
562 // const auto* swp = pi->getWaypoint().cast_const<StateWaypoint>();
563 // assert(static_cast<long>(swp->joint_names.size()) == swp->position.size());
564 // tesseract_environment::EnvState::Ptr state = state_solver->getState(swp->joint_names, swp->position);
565 // addAxis(entity_manager_, *link_msg, cnt, link_name, state->link_transforms[tip_link] * tcp, 0.05);
566 // }
567 // else if (isJointWaypoint(pi->getWaypoint()))
568 // {
569 // const auto* jwp = pi->getWaypoint().cast_const<JointWaypoint>();
570 // assert(static_cast<long>(jwp->joint_names.size()) == jwp->size());
571 // tesseract_environment::EnvState::Ptr state = state_solver->getState(jwp->joint_names, *jwp);
572 // addAxis(entity_manager_, *link_msg, cnt, link_name, state->link_transforms[tip_link] * tcp, 0.05);
573 // }
574 // else if (isCartesianWaypoint(pi->getWaypoint()))
575 // {
576 // const auto* cwp = pi->getWaypoint().cast_const<CartesianWaypoint>();
577 // if (manip_info.working_frame.empty())
578 // {
579 // addAxis(entity_manager_, *link_msg, cnt, link_name, (*cwp), 0.05);
580 // }
581 // else
582 // {
583 // tesseract_environment::EnvState::ConstPtr state = env_->getCurrentState();
584 // addAxis(entity_manager_,
585 // *link_msg,
586 // cnt,
587 // link_name,
588 // state->link_transforms.at(manip_info.working_frame) * (*cwp),
589 // 0.05);
590 // }
591 // }
592 // else
593 // {
594 // ignerr << "plotTrajectoy: Unsupported Waypoint Type!\n";
595 // }
596 // }
597 // else
598 // {
599 // ignerr << "plotTrajectoy: Unsupported Instruction Type!\n" l;
600 // }
601 
602 // scene_pub_.Publish(scene_msg);
603 //}
604 
605 TESSERACT_PLUGIN_ANCHOR_IMPL(IgnitionVisualizationAnchor)
606 } // namespace tesseract_visualization
607 
609  TesseractIgnitionVisualizationPlugin)
tesseract_environment::Environment::getSceneGraph
std::shared_ptr< const tesseract_scene_graph::SceneGraph > getSceneGraph() const
DEFAULT_SCENE_TOPIC_NAME
TESSERACT_COMMON_IGNORE_WARNINGS_PUSH static const TESSERACT_COMMON_IGNORE_WARNINGS_POP std::string DEFAULT_SCENE_TOPIC_NAME
Message type is gz::msgs::Scene.
Definition: tesseract_ignition_visualization.cpp:50
DEFAULT_POSE_TOPIC_NAME
static const std::string DEFAULT_POSE_TOPIC_NAME
Message type is gz::msgs::Pose_V.
Definition: tesseract_ignition_visualization.cpp:53
graph.h
tesseract_visualization::TesseractIgnitionVisualization::waitForInput
void waitForInput(std::string message="Hit enter key to continue!") override
Pause code and wait for enter key in terminal.
Definition: tesseract_ignition_visualization.cpp:364
tesseract_visualization::TesseractIgnitionVisualization::clear
void clear(std::string ns="") override
This is called at the start of the plotting for each iteration to clear previous iteration graphics i...
Definition: tesseract_ignition_visualization.cpp:346
tesseract_visualization::AxisMarker
An axis.
Definition: axis_marker.h:9
tesseract_visualization::addArrow
void addArrow(EntityManager &entity_manager, gz::msgs::Link &link, long &sub_index, const ArrowMarker &marker)
Definition: tesseract_ignition_visualization.cpp:117
class_loader.h
COLLISION_RESULTS_MODEL_NAME
static const std::string COLLISION_RESULTS_MODEL_NAME
Definition: tesseract_ignition_visualization.cpp:58
tesseract_visualization::TesseractIgnitionVisualization::sendSceneState
void sendSceneState(const tesseract_scene_graph::SceneState &scene_state)
Helper function for sending state to visualization tool.
Definition: tesseract_ignition_visualization.cpp:370
tesseract_visualization::convert
gz::msgs::Material convert(const Eigen::Vector4d &rgba)
Definition: conversions.cpp:62
tesseract_visualization::TesseractIgnitionVisualization::plotEnvironmentState
void plotEnvironmentState(const tesseract_scene_graph::SceneState &state, std::string ns="") override
Plot state of the environment.
Definition: tesseract_ignition_visualization.cpp:98
tesseract_visualization::MarkerType::ARROW
@ ARROW
Arrow primitive.
tesseract_visualization::TesseractIgnitionVisualization::entity_manager_
EntityManager entity_manager_
Definition: tesseract_ignition_visualization.h:76
tesseract_visualization::MarkerType::CONTACT_RESULTS
@ CONTACT_RESULTS
Contact results marker.
DEFAULT_DELETION_TOPIC_NAME
static const std::string DEFAULT_DELETION_TOPIC_NAME
Message type is gz::msgs::UInt32_V.
Definition: tesseract_ignition_visualization.cpp:56
tesseract_visualization::TesseractIgnitionVisualization::scene_pub_
gz::transport::Node::Publisher scene_pub_
Definition: tesseract_ignition_visualization.h:73
tesseract_visualization::TesseractIgnitionVisualization::node_
gz::transport::Node node_
Definition: tesseract_ignition_visualization.h:72
tesseract_visualization::TesseractIgnitionVisualization::plotMarker
void plotMarker(const Marker &marker, std::string ns="") override
Plot marker.
Definition: tesseract_ignition_visualization.cpp:207
tesseract_visualization::addCylinder
void addCylinder(EntityManager &entity_manager, gz::msgs::Link &link, long &sub_index, const Eigen::Ref< const Eigen::Vector3d > &pt1, const Eigen::Ref< const Eigen::Vector3d > &pt2, const tesseract_scene_graph::Material &material, const Eigen::Vector3d &)
Definition: tesseract_ignition_visualization.cpp:142
toolpath_marker.h
tesseract_scene_graph::StateSolver
TESSERACT_COMMON_IGNORE_WARNINGS_PUSH
#define TESSERACT_COMMON_IGNORE_WARNINGS_PUSH
tesseract_visualization::TesseractIgnitionVisualization::pose_pub_
gz::transport::Node::Publisher pose_pub_
Definition: tesseract_ignition_visualization.h:74
marker.h
conversions.h
A set of conversion between Tesseract and Ignition Robotics objects.
tesseract_visualization::ArrowMarker::material
tesseract_scene_graph::Material::Ptr material
The material information for the marker.
Definition: arrow_marker.h:62
tesseract_visualization::ArrowMarker::pose
Eigen::Isometry3d pose
The arrow pose.
Definition: arrow_marker.h:59
tesseract_scene_graph::StateSolver::getState
virtual SceneState getState() const=0
tesseract_environment::Environment::getState
tesseract_scene_graph::SceneState getState() const
TESSERACT_PLUGIN_ANCHOR_IMPL
#define TESSERACT_PLUGIN_ANCHOR_IMPL(ANCHOR_NAME)
tesseract_scene_graph::SceneState
tesseract_collision::ContinuousCollisionType::CCType_Between
@ CCType_Between
tesseract_visualization::addAxis
void addAxis(EntityManager &entity_manager, gz::msgs::Link &link, long &sub_index, const AxisMarker &m)
Definition: tesseract_ignition_visualization.cpp:185
axis_marker.h
tesseract_visualization::EntityManager::addVisual
EntityID addVisual(const std::string &name)
Add visual name to manager and return id for visual.
Definition: entity_manager.cpp:64
contact_results_marker.h
tesseract_visualization::ArrowMarker
An arrow marker.
Definition: arrow_marker.h:14
tesseract_visualization::ContactResultsMarker
A contact results marker.
Definition: contact_results_marker.h:19
tesseract_visualization::AxisMarker::axis
Eigen::Isometry3d axis
The axis definition.
Definition: axis_marker.h:20
tesseract_visualization::TesseractIgnitionVisualization::plotEnvironment
void plotEnvironment(const tesseract_environment::Environment &env, std::string ns="") override
Plot environment.
Definition: tesseract_ignition_visualization.cpp:91
z_axis
Vector3< S > z_axis(const Transform3< S > &X_AB)
TESSERACT_ADD_VISUALIZATION_PLUGIN
#define TESSERACT_ADD_VISUALIZATION_PLUGIN(DERIVED_CLASS, ALIAS)
Definition: visualization.h:42
environment.h
tesseract_common::JointTrajectory
tesseract_ignition_visualization.h
tesseract_visualization::MarkerType::AXIS
@ AXIS
Axis primitive.
tesseract_visualization::ArrowMarker::shaft_length
double shaft_length
The arrow shaft length.
Definition: arrow_marker.h:47
tesseract_environment::Environment
joint_state.h
TESSERACT_COMMON_IGNORE_WARNINGS_POP
tesseract_visualization::EntityManager::getLink
EntityID getLink(const std::string &name) const
Given the link name return the ID.
Definition: entity_manager.cpp:53
tesseract_visualization::TesseractIgnitionVisualization::TesseractIgnitionVisualization
TesseractIgnitionVisualization()
Definition: tesseract_ignition_visualization.cpp:65
tesseract_visualization::toMsg
bool toMsg(gz::msgs::Scene &scene_msg, EntityManager &entity_manager, const tesseract_scene_graph::SceneGraph &scene_graph, const tesseract_common::TransformMap &link_transforms)
Definition: conversions.cpp:83
tesseract_visualization::TesseractIgnitionVisualization::plotTrajectory
void plotTrajectory(const tesseract_common::JointTrajectory &traj, const tesseract_scene_graph::StateSolver &state_solver, std::string ns="") override
Plot a JointTrajectory.
Definition: tesseract_ignition_visualization.cpp:104
tesseract_scene_graph::Material
arrow_marker.h
tesseract_scene_graph::Material::color
Eigen::Vector4d color
tesseract_visualization::Marker
Definition: marker.h:74
tesseract_collision::ContactResult::distance
EIGEN_MAKE_ALIGNED_OPERATOR_NEW double distance
tesseract_collision::ContactResult::cc_transform
std::array< Eigen::Isometry3d, 2 > cc_transform
tesseract_visualization::Marker::getType
virtual int getType() const =0
Get the marker type.
tesseract_visualization::EntityManager::addModel
EntityID addModel(const std::string &name)
Add model name to manager and return id for model.
Definition: entity_manager.cpp:30
tesseract_common::JointTrajectory::size
size_type size() const
tesseract_collision::ContactResult::transform
std::array< Eigen::Isometry3d, 2 > transform
TOOL_PATH_MODEL_NAME
static const std::string TOOL_PATH_MODEL_NAME
Definition: tesseract_ignition_visualization.cpp:61
tesseract_visualization::ArrowMarker::shaft_radius
double shaft_radius
The arrow shaft radius.
Definition: arrow_marker.h:50
tesseract_visualization::TesseractIgnitionVisualization::deletion_pub_
gz::transport::Node::Publisher deletion_pub_
Definition: tesseract_ignition_visualization.h:75
trajectory_player.h
Trajectory player class.
tesseract_visualization::TesseractIgnitionVisualization::plotMarkers
void plotMarkers(const std::vector< std::shared_ptr< Marker >> &markers, std::string ns="") override
Plot a vector of markers under a given namespace.
Definition: tesseract_ignition_visualization.cpp:340
ARROW_MODEL_NAME
static const std::string ARROW_MODEL_NAME
Definition: tesseract_ignition_visualization.cpp:60
tesseract_visualization::Marker::getScale
virtual const Eigen::Vector3d & getScale() const
Get the marker scale.
Definition: marker.cpp:20
tesseract_visualization::EntityManager
Definition: entity_manager.h:41
tesseract_collision::ContactResult::nearest_points
std::array< Eigen::Vector3d, 2 > nearest_points
tesseract_scene_graph::SceneState::link_transforms
tesseract_common::TransformMap link_transforms
types.h
AXES_MODEL_NAME
static const std::string AXES_MODEL_NAME
Definition: tesseract_ignition_visualization.cpp:59
tesseract_collision::ContactResult::nearest_points_local
std::array< Eigen::Vector3d, 2 > nearest_points_local
seconds
FCL_EXPORT double seconds(const duration &d)
tesseract_visualization::TesseractIgnitionVisualization
The Tesseract Ignition Vizualization class.
Definition: tesseract_ignition_visualization.h:43
macros.h
tesseract_collision::ContactResult::link_names
std::array< std::string, 2 > link_names
tesseract_collision::ContactResult
tesseract_visualization::TesseractIgnitionVisualization::waitForConnection
void waitForConnection(long seconds=0) const override
Wait for connection.
Definition: tesseract_ignition_visualization.cpp:77
tesseract_collision::ContactResult::cc_type
std::array< ContinuousCollisionType, 2 > cc_type
tesseract_visualization::EntityManager::getModel
EntityID getModel(const std::string &name) const
Given the model name return the ID.
Definition: entity_manager.cpp:36
tesseract_visualization
Definition: fwd.h:4
tesseract_visualization::TesseractIgnitionVisualization::isConnected
bool isConnected() const override
Some plotters may require connecting to external software.
Definition: tesseract_ignition_visualization.cpp:72


tesseract_visualization
Author(s): Levi Armstrong
autogenerated on Wed Apr 9 2025 03:03:25