29 #include <gz/msgs/MessageTypes.hh>
30 #include <gz/common/Console.hh>
31 #include <gz/math/eigen3/Conversions.hh>
80 seconds = std::numeric_limits<long>::max();
82 for (
int i = 0; i <
seconds; ++i)
108 std::chrono::duration<double> fp_s(5.0 /
static_cast<double>(traj.
size()));
109 for (
const auto& traj_state : traj)
113 std::this_thread::sleep_for(fp_s);
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);
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;
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());
143 gz::msgs::Link& link,
145 const Eigen::Ref<const Eigen::Vector3d>& pt1,
146 const Eigen::Ref<const Eigen::Vector3d>& pt2,
148 const Eigen::Vector3d& )
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);
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();
165 pose.translation() = pt1 + (((pt2 - pt1).norm() / 2) * z);
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());
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();
193 std::string gv_name = link.name() +
"_" + std::to_string(++sub_index);
195 axis_red.
color = Eigen::Vector4d(1, 0, 0, 1);
197 axis_red.
color = Eigen::Vector4d(0, 1, 0, 1);
199 axis_red.
color = Eigen::Vector4d(0, 0, 1, 1);
201 addCylinder(entity_manager, link, sub_index, position, position + (scale(0) * x_axis), axis_red, scale * (1.0 / 20));
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));
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();
218 model->set_name(model_name);
222 std::string link_name = model_name + std::to_string(++cnt);
223 gz::msgs::Link* link_msg = model->add_link();
225 link_msg->set_name(link_name);
232 const auto& m =
dynamic_cast<const AxisMarker&
>(marker);
234 gz::msgs::Scene scene_msg;
235 scene_msg.set_name(
"scene");
236 gz::msgs::Model* model = scene_msg.add_model();
238 model->set_name(model_name);
242 std::string link_name = model_name + std::to_string(++cnt);
243 gz::msgs::Link* link_msg = model->add_link();
245 link_msg->set_name(link_name);
254 gz::msgs::Scene scene_msg;
255 scene_msg.set_name(
"scene");
256 gz::msgs::Model* model = scene_msg.add_model();
258 model->set_name(model_name);
262 for (
size_t i = 0; i < m.dist_results.size(); ++i)
265 double safety_distance = m.margin_data.getPairCollisionMargin(dist.
link_names[0], dist.
link_names[1]);
267 std::string link_name = model_name + std::to_string(++cnt);
268 gz::msgs::Link* link_msg = model->add_link();
270 link_msg->set_name(link_name);
272 auto base_material = std::make_shared<tesseract_scene_graph::Material>(
"base_material");
275 base_material->color << 1.0, 0.0, 0.0, 1.0;
277 else if (dist.
distance < safety_distance)
279 base_material->color << 1.0, 1.0, 0.0, 1.0;
283 base_material->color << 0.0, 1.0, 0.0, 1.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;
299 am.
material = std::make_shared<tesseract_scene_graph::Material>(
"cc_material");
300 am.
material->color << 0.0, 0.0, 0.5, 1.0;
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]);
307 if (it0 != m.link_names.end() && it1 != m.link_names.end())
317 else if (it0 != m.link_names.end())
335 ignwarn <<
"plotMarkers: Unsupported marker type: " << std::to_string(marker.
getType()) <<
"\n";
343 ignerr <<
"plotMarkers is currently not implemented!\n";
348 gz::msgs::UInt32_V deletion_msg;
351 deletion_msg.add_data(
static_cast<unsigned>(
id));
355 deletion_msg.add_data(
static_cast<unsigned>(
id));
359 deletion_msg.add_data(
static_cast<unsigned>(
id));
366 std::cout << message <<
"\n";
367 std::cin.ignore(std::numeric_limits<std::streamsize>::max(),
'\n');
372 gz::msgs::Pose_V pose_v;
375 gz::msgs::Pose* pose = pose_v.add_pose();
377 pose->set_name(pair.first);
383 ignerr <<
"Failed to publish pose vector!\n";
609 TesseractIgnitionVisualizationPlugin)