mrs_lib
Various reusable classes, functions and utilities for use in MRS projects
Loading...
Searching...
No Matches
batch_visualizer.h
1#ifndef BATCH_VISUALIZER_H
2#define BATCH_VISUALIZER_H
3
4#include <vector>
5#include <rclcpp/rclcpp.hpp>
6#include <visualization_msgs/msg/marker_array.hpp>
8#include <mrs_msgs/msg/path.hpp>
9#include <mrs_msgs/msg/trajectory_reference.hpp>
10#include <mrs_lib/visual_object.h>
11#include <set>
12
13#define DEFAULT_ELLIPSE_POINTS 64
14
15namespace mrs_lib
16{
17
22 {
23
24 public:
40 BatchVisualizer(const std::shared_ptr<rclcpp::Node>& node, std::string marker_topic_name, std::string parent_frame);
41
52 void addPoint(const Eigen::Vector3d& point, const double r = 0.0, const double g = 1.0, const double b = 0.3, const double a = 1.0,
53 const rclcpp::Duration& timeout = rclcpp::Duration(std::chrono::seconds(0)));
54
65 void addRay(const mrs_lib::geometry::Ray& ray, const double r = 1.0, const double g = 0.0, const double b = 0.0, const double a = 1.0,
66 const rclcpp::Duration& timeout = rclcpp::Duration(std::chrono::seconds(0)));
67
79 void addTriangle(const mrs_lib::geometry::Triangle& tri, const double r = 0.5, const double g = 0.5, const double b = 0.0, const double a = 1.0,
80 const bool filled = true, const rclcpp::Duration& timeout = rclcpp::Duration(std::chrono::seconds(0)));
81
93 void addRectangle(const mrs_lib::geometry::Rectangle& rect, const double r = 0.5, const double g = 0.5, const double b = 0.0, const double a = 1.0,
94 const bool filled = true, const rclcpp::Duration& timeout = rclcpp::Duration(std::chrono::seconds(0)));
95
107 void addCuboid(const mrs_lib::geometry::Cuboid& cuboid, const double r = 0.5, const double g = 0.5, const double b = 0.0, const double a = 1.0,
108 const bool filled = true, const rclcpp::Duration& timeout = rclcpp::Duration(std::chrono::seconds(0)));
109
122 void addEllipse(const mrs_lib::geometry::Ellipse& ellipse, const double r = 0.0, const double g = 1.0, const double b = 1.0, const double a = 1.0,
123 const bool filled = true, const int num_points = DEFAULT_ELLIPSE_POINTS,
124 const rclcpp::Duration& timeout = rclcpp::Duration(std::chrono::seconds(0)));
125
139 void addCylinder(const mrs_lib::geometry::Cylinder& cylinder, const double r = 0.7, const double g = 0.8, const double b = 0.3, const double a = 1.0,
140 const bool filled = true, const bool capped = true, const int sides = DEFAULT_ELLIPSE_POINTS,
141 const rclcpp::Duration& timeout = rclcpp::Duration(std::chrono::seconds(0)));
155 void addCone(const mrs_lib::geometry::Cone& cone, const double r = 0.7, const double g = 0.8, const double b = 0.3, const double a = 1.0,
156 const bool filled = true, const bool capped = true, const int sides = DEFAULT_ELLIPSE_POINTS,
157 const rclcpp::Duration& timeout = rclcpp::Duration(std::chrono::seconds(0)));
158
170 void addPath(const mrs_msgs::msg::Path& p, const double r = 0.3, const double g = 1.0, const double b = 0.3, const double a = 1.0, const bool filled = true,
171 const rclcpp::Duration& timeout = rclcpp::Duration(std::chrono::seconds(0)));
172
184 void addTrajectory(const mrs_msgs::msg::TrajectoryReference& traj, const double r = 0.3, const double g = 1.0, const double b = 0.3, const double a = 1.0,
185 const bool filled = true, const rclcpp::Duration& timeout = rclcpp::Duration(std::chrono::seconds(0)));
186
190 void addNullPoint();
191
195 void addNullLine();
196
200 void addNullTriangle();
201
207 void setPointsScale(const double scale);
208
214 void setParentFrame(const std::string parent_frame);
215
221 void setLinesScale(const double scale);
222
226 void clearBuffers();
227
231 void clearVisuals();
232
236 void publish();
237
241 void publish(const rclcpp::Time stamp);
242
243 private:
244 std::shared_ptr<rclcpp::Node> node;
245 rclcpp::Publisher<visualization_msgs::msg::MarkerArray>::SharedPtr visual_pub;
246 visualization_msgs::msg::MarkerArray msg;
247
248 std::string parent_frame; // coordinate frame id
249 std::string marker_topic_name;
250
251 std::set<VisualObject> visual_objects; // buffer for objects to be visualized
252
253 visualization_msgs::msg::Marker points_marker;
254 visualization_msgs::msg::Marker lines_marker;
255 visualization_msgs::msg::Marker triangles_marker;
256
257 bool initialized = false;
258 void initialize();
259
260 double points_scale = 0.02;
261 double lines_scale = 0.04;
262
263 unsigned long uuid = 0; // create unique ID for items in object buffer
264 };
265
266} // namespace mrs_lib
267
268#endif
library for drawing large amounts of geometric objects in RVIZ at the same time
Definition batch_visualizer.h:22
void addEllipse(const mrs_lib::geometry::Ellipse &ellipse, const double r=0.0, const double g=1.0, const double b=1.0, const double a=1.0, const bool filled=true, const int num_points=DEFAULT_ELLIPSE_POINTS, const rclcpp::Duration &timeout=rclcpp::Duration(std::chrono::seconds(0)))
add an ellipse to the buffer
Definition batch_visualizer.cpp:149
void addCylinder(const mrs_lib::geometry::Cylinder &cylinder, const double r=0.7, const double g=0.8, const double b=0.3, const double a=1.0, const bool filled=true, const bool capped=true, const int sides=DEFAULT_ELLIPSE_POINTS, const rclcpp::Duration &timeout=rclcpp::Duration(std::chrono::seconds(0)))
add a cylinder to the buffer
Definition batch_visualizer.cpp:159
void setParentFrame(const std::string parent_frame)
set the parent frame_id
Definition batch_visualizer.cpp:31
BatchVisualizer()
dummy constructor
Definition batch_visualizer.cpp:9
void clearBuffers()
remove all objects from the buffer
Definition batch_visualizer.cpp:283
void addRectangle(const mrs_lib::geometry::Rectangle &rect, const double r=0.5, const double g=0.5, const double b=0.0, const double a=1.0, const bool filled=true, const rclcpp::Duration &timeout=rclcpp::Duration(std::chrono::seconds(0)))
add a rectangle to the buffer
Definition batch_visualizer.cpp:129
void publish()
publish the visual markers rclcpp message and populates it with buffer content
Definition batch_visualizer.cpp:303
void addRay(const mrs_lib::geometry::Ray &ray, const double r=1.0, const double g=0.0, const double b=0.0, const double a=1.0, const rclcpp::Duration &timeout=rclcpp::Duration(std::chrono::seconds(0)))
add a ray to the buffer
Definition batch_visualizer.cpp:109
void addTrajectory(const mrs_msgs::msg::TrajectoryReference &traj, const double r=0.3, const double g=1.0, const double b=0.3, const double a=1.0, const bool filled=true, const rclcpp::Duration &timeout=rclcpp::Duration(std::chrono::seconds(0)))
add a trajectory to the buffer
Definition batch_visualizer.cpp:186
void addCuboid(const mrs_lib::geometry::Cuboid &cuboid, const double r=0.5, const double g=0.5, const double b=0.0, const double a=1.0, const bool filled=true, const rclcpp::Duration &timeout=rclcpp::Duration(std::chrono::seconds(0)))
add a cuboid to the buffer
Definition batch_visualizer.cpp:139
void addNullTriangle()
helper function for adding an invisible triangle to the buffer
Definition batch_visualizer.cpp:239
void addNullPoint()
helper function for adding an invisible point to the object buffer
Definition batch_visualizer.cpp:195
void addNullLine()
helper function for adding an invisible line to the object buffer
Definition batch_visualizer.cpp:214
~BatchVisualizer()
destructor
Definition batch_visualizer.cpp:13
void addPoint(const Eigen::Vector3d &point, const double r=0.0, const double g=1.0, const double b=0.3, const double a=1.0, const rclcpp::Duration &timeout=rclcpp::Duration(std::chrono::seconds(0)))
add a point to the buffer
Definition batch_visualizer.cpp:100
void clearVisuals()
publishes an empty message. Removes all objects drawn onto the scene, but keeps them in buffer
Definition batch_visualizer.cpp:290
void addPath(const mrs_msgs::msg::Path &p, const double r=0.3, const double g=1.0, const double b=0.3, const double a=1.0, const bool filled=true, const rclcpp::Duration &timeout=rclcpp::Duration(std::chrono::seconds(0)))
add a path to the buffer
Definition batch_visualizer.cpp:177
void setPointsScale(const double scale)
set the scale of all points
Definition batch_visualizer.cpp:269
void addTriangle(const mrs_lib::geometry::Triangle &tri, const double r=0.5, const double g=0.5, const double b=0.0, const double a=1.0, const bool filled=true, const rclcpp::Duration &timeout=rclcpp::Duration(std::chrono::seconds(0)))
add a triangle to the buffer
Definition batch_visualizer.cpp:119
void addCone(const mrs_lib::geometry::Cone &cone, const double r=0.7, const double g=0.8, const double b=0.3, const double a=1.0, const bool filled=true, const bool capped=true, const int sides=DEFAULT_ELLIPSE_POINTS, const rclcpp::Duration &timeout=rclcpp::Duration(std::chrono::seconds(0)))
add a cone to the buffer
Definition batch_visualizer.cpp:168
void setLinesScale(const double scale)
set the thickness of all lines
Definition batch_visualizer.cpp:276
geometric representaiton of a cone
Definition shapes.h:575
geometric representation of a cuboid
Definition shapes.h:319
geometric representation of a cylinder
Definition shapes.h:492
geometric representation of an ellipse
Definition shapes.h:428
geometric representation of a ray. Instantiate it by two input Vector3. Use static methods for from-t...
Definition shapes.h:26
geometric representation of a rectangle (can represent any quadrilateral)
Definition shapes.h:189
geometric representation of a triangle. Instantiate a new triangle by providing three vertices
Definition shapes.h:100
All mrs_lib functions, classes, variables and definitions are contained in this namespace.
Definition attitude_converter.h:24
Defines various geometrical shapes and their relations.