From 35f95cc9cf07bede305c3cb06543f4681a533f30 Mon Sep 17 00:00:00 2001 From: Multyxu Date: Thu, 26 Feb 2026 09:16:04 -0500 Subject: [PATCH 1/8] ability to parse instance id to map to mesh color --- .../include/hydra_visualizer/adapters/mesh_color.h | 2 ++ hydra_visualizer/src/adapters/mesh_color.cpp | 6 +++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/hydra_visualizer/include/hydra_visualizer/adapters/mesh_color.h b/hydra_visualizer/include/hydra_visualizer/adapters/mesh_color.h index b667534c..a094c810 100644 --- a/hydra_visualizer/include/hydra_visualizer/adapters/mesh_color.h +++ b/hydra_visualizer/include/hydra_visualizer/adapters/mesh_color.h @@ -92,6 +92,8 @@ void declare_config(UniformMeshColoring::Config& config); struct SemanticMeshColoring : public MeshColoring { struct Config { visualizer::CategoricalColormap::Config colormap; + //! Extract upper 16 bits as semantic category from packed (category << 16 | instance_id) labels + bool instance_id = false; } const config; explicit SemanticMeshColoring(const Config& config); virtual ~SemanticMeshColoring() = default; diff --git a/hydra_visualizer/src/adapters/mesh_color.cpp b/hydra_visualizer/src/adapters/mesh_color.cpp index 872fc6cb..a7eddecb 100644 --- a/hydra_visualizer/src/adapters/mesh_color.cpp +++ b/hydra_visualizer/src/adapters/mesh_color.cpp @@ -34,6 +34,7 @@ void declare_config(SemanticMeshColoring::Config& config) { using namespace config; name("SemanticMeshColoring::Config"); field(config.colormap, "colormap"); + field(config.instance_id, "instance_id"); } SemanticMeshColoring::SemanticMeshColoring(const Config& config) @@ -44,7 +45,10 @@ Color SemanticMeshColoring::getVertexColor(const Mesh& mesh, size_t i) const { return Color::black(); } - return colormap_.getColor(mesh.label(i)); + const auto raw_label = mesh.label(i); + const auto label = + (config.instance_id && raw_label > 0xFFFF) ? (raw_label >> 16) : raw_label; + return colormap_.getColor(label); } void declare_config(FirstSeenMeshColoring::Config&) { From aa33080d6a8abe851cd48722bf4e9f6254587121 Mon Sep 17 00:00:00 2001 From: Multyxu Date: Sun, 1 Mar 2026 14:26:36 -0500 Subject: [PATCH 2/8] instance color does not get colored for graphs --- .../include/hydra_visualizer/adapters/node_color.h | 1 + hydra_visualizer/src/adapters/node_color.cpp | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/hydra_visualizer/include/hydra_visualizer/adapters/node_color.h b/hydra_visualizer/include/hydra_visualizer/adapters/node_color.h index 40b837a4..5d0da3e3 100644 --- a/hydra_visualizer/include/hydra_visualizer/adapters/node_color.h +++ b/hydra_visualizer/include/hydra_visualizer/adapters/node_color.h @@ -106,6 +106,7 @@ void declare_config(UniformColorAdapter::Config& config); struct LabelColorAdapter : NodeColorAdapter { struct Config { visualizer::CategoricalColormap::Config colormap; + bool instance_id = false; } const config; explicit LabelColorAdapter(const Config& config); diff --git a/hydra_visualizer/src/adapters/node_color.cpp b/hydra_visualizer/src/adapters/node_color.cpp index 5bba03c8..6c7f9f26 100644 --- a/hydra_visualizer/src/adapters/node_color.cpp +++ b/hydra_visualizer/src/adapters/node_color.cpp @@ -88,6 +88,9 @@ Color LabelColorAdapter::getColor(const DynamicSceneGraph&, VLOG(5) << "Node " << NodeSymbol(node.id).str() << " has no label!"; } + if (config.instance_id && label > 0xFFFF) { + label = label >> 16; + } return colormap_.getColor(label); } @@ -95,6 +98,7 @@ void declare_config(LabelColorAdapter::Config& config) { using namespace config; name("LabelColorAdapter::Config"); field(config.colormap, "colormap"); + field(config.instance_id, "instance_id"); } IdColorAdapter::IdColorAdapter(const Config& config) From e87ac0aeac4784308b54c2e056a5466815875aa5 Mon Sep 17 00:00:00 2001 From: Nathan Hughes Date: Thu, 5 Mar 2026 21:47:53 +0000 Subject: [PATCH 3/8] add frame to mesh delta --- hydra_ros/src/frontend/ros_frontend_publisher.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/hydra_ros/src/frontend/ros_frontend_publisher.cpp b/hydra_ros/src/frontend/ros_frontend_publisher.cpp index 732921d4..5a25c9d8 100644 --- a/hydra_ros/src/frontend/ros_frontend_publisher.cpp +++ b/hydra_ros/src/frontend/ros_frontend_publisher.cpp @@ -94,6 +94,7 @@ void RosFrontendPublisher::call(uint64_t timestamp_ns, backend_input.mesh_update->timestamp_ns = timestamp_ns; auto delta_msg = std::make_shared(); kimera_pgmo::conversions::to_ros(*backend_input.mesh_update, *delta_msg); + delta_msg->header.frame_id = GlobalInfo::instance().getFrames().odom; mesh_update_pub_->publish(*delta_msg); stored_delta_.insert({backend_input.mesh_update->info.sequence_number, delta_msg}); From f9f557eb8cfcb48c18020d2e5cb7f18a76db6826 Mon Sep 17 00:00:00 2001 From: Nathan Hughes Date: Fri, 6 Mar 2026 03:55:31 +0000 Subject: [PATCH 4/8] fix agent node settings --- hydra_visualizer/config/visualizer_config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hydra_visualizer/config/visualizer_config.yaml b/hydra_visualizer/config/visualizer_config.yaml index 65ce11d8..b7ffe8df 100644 --- a/hydra_visualizer/config/visualizer_config.yaml +++ b/hydra_visualizer/config/visualizer_config.yaml @@ -42,8 +42,8 @@ renderer: 2p*: z_offset_scale: 0.0 visualize: true - nodes: {scale: 0.15, alpha: 0.9, use_sphere: false, color: {type: PartitionColorAdapter}} - edges: {scale: 0.05, alpha: 0.9, draw_interlayer: false} + nodes: {scale: 0.15, alpha: 1.0, use_sphere: true, color: {type: PartitionColorAdapter}} + edges: {scale: 0.15, alpha: 1.0, draw_interlayer: false, color: {type: ''}} text: {draw_layer: true, height: 0.9, scale: 0.8} 3p1: z_offset_scale: 3.0 From f40ef597abccbb9c5b9b295d104629aac9742e81 Mon Sep 17 00:00:00 2001 From: Multyxu Date: Thu, 5 Mar 2026 17:57:46 -0500 Subject: [PATCH 5/8] cherry-pick mutex changes --- .../hydra_ros/utils/dsg_streaming_interface.h | 8 ++++++++ .../hydra_visualizer/io/graph_wrapper.h | 3 +++ .../hydra_visualizer/plugins/mesh_plugin.h | 2 ++ hydra_visualizer/src/io/graph_ros_wrapper.cpp | 1 + hydra_visualizer/src/plugins/mesh_plugin.cpp | 19 +++++++++++++------ hydra_visualizer/src/visualizer_node.cpp | 11 +++++++---- 6 files changed, 34 insertions(+), 10 deletions(-) diff --git a/hydra_ros/include/hydra_ros/utils/dsg_streaming_interface.h b/hydra_ros/include/hydra_ros/utils/dsg_streaming_interface.h index c37fdd4e..f3b0da95 100644 --- a/hydra_ros/include/hydra_ros/utils/dsg_streaming_interface.h +++ b/hydra_ros/include/hydra_ros/utils/dsg_streaming_interface.h @@ -49,14 +49,22 @@ namespace hydra { class DsgSender { public: struct Config { + //! Frame ID to publish scene graph under std::string frame_id; + //! Timer name to record serialization timing std::string timer_name = "publish_dsg"; + //! Include mesh in serialized scene graph message bool serialize_dsg_mesh = true; + //! Publish mesh separately from scene graph bool publish_mesh = false; + //! Minimum amount of time separating mesh messages double min_mesh_separation_s = 0.0; + //! Minimum amount of time separating scene graph messages double min_dsg_separation_s = 0.0; + //! Create a config with a specific timer name Config with_name(const std::string& name) const; + //! Create a config with a specific frame ID Config with_frame(const std::string& frame) const; } const config; diff --git a/hydra_visualizer/include/hydra_visualizer/io/graph_wrapper.h b/hydra_visualizer/include/hydra_visualizer/io/graph_wrapper.h index d1ce8fe5..ca7d16a4 100644 --- a/hydra_visualizer/include/hydra_visualizer/io/graph_wrapper.h +++ b/hydra_visualizer/include/hydra_visualizer/io/graph_wrapper.h @@ -35,6 +35,8 @@ #pragma once #include +#include + #include namespace hydra { @@ -47,6 +49,7 @@ struct StampedGraph { }; struct GraphWrapper { + mutable std::mutex mutex; // protects graph_ from concurrent read/write using Ptr = std::shared_ptr; virtual ~GraphWrapper() = default; virtual bool hasChange() const = 0; diff --git a/hydra_visualizer/include/hydra_visualizer/plugins/mesh_plugin.h b/hydra_visualizer/include/hydra_visualizer/plugins/mesh_plugin.h index 6f2b4357..d0aed473 100644 --- a/hydra_visualizer/include/hydra_visualizer/plugins/mesh_plugin.h +++ b/hydra_visualizer/include/hydra_visualizer/plugins/mesh_plugin.h @@ -52,6 +52,7 @@ class MeshPlugin : public VisualizerPlugin { struct Config { config::VirtualConfig coloring; + double mesh_update_period_s = 1.0; }; MeshPlugin(const Config& config, ianvs::NodeHandle nh, const std::string& name); @@ -70,6 +71,7 @@ class MeshPlugin : public VisualizerPlugin { std::string getMsgNamespace() const; + std::optional last_pub_; rclcpp::Publisher::SharedPtr mesh_pub_; }; diff --git a/hydra_visualizer/src/io/graph_ros_wrapper.cpp b/hydra_visualizer/src/io/graph_ros_wrapper.cpp index 6a44eca9..20530089 100644 --- a/hydra_visualizer/src/io/graph_ros_wrapper.cpp +++ b/hydra_visualizer/src/io/graph_ros_wrapper.cpp @@ -79,6 +79,7 @@ void GraphRosWrapper::callback(const DsgUpdate::ConstSharedPtr& msg) { } try { + std::lock_guard lk(mutex); if (!graph_) { graph_ = spark_dsg::io::binary::readGraph(msg->layer_contents); } else { diff --git a/hydra_visualizer/src/plugins/mesh_plugin.cpp b/hydra_visualizer/src/plugins/mesh_plugin.cpp index 322b097b..24def35e 100644 --- a/hydra_visualizer/src/plugins/mesh_plugin.cpp +++ b/hydra_visualizer/src/plugins/mesh_plugin.cpp @@ -53,22 +53,25 @@ static const auto registration = } +using MeshMsg = kimera_pgmo_msgs::msg::Mesh; + +using config::checkValid; using spark_dsg::DynamicSceneGraph; +using visualizer::makeMeshMsg; void declare_config(MeshPlugin::Config& config) { using namespace config; name("MeshPlugin::Config"); field(config.coloring, "coloring"); + field(config.mesh_update_period_s, "mesh_update_period_s", "s"); } MeshPlugin::MeshPlugin(const Config& config, ianvs::NodeHandle nh, const std::string& name) : VisualizerPlugin(name), - config_( - "mesh_plugin", config::checkValid(config), [this]() { has_change_ = true; }), - mesh_pub_(nh.create_publisher( - name, rclcpp::QoS(1).transient_local())) {} + config_("mesh_plugin", checkValid(config), [this]() { has_change_ = true; }), + mesh_pub_(nh.create_publisher(name, rclcpp::QoS(1).transient_local())) {} MeshPlugin::~MeshPlugin() {} @@ -80,9 +83,13 @@ void MeshPlugin::draw(const std_msgs::msg::Header& header, } const auto config = config_.get(); + const rclcpp::Time now(header.stamp); + if (last_pub_ && (now - *last_pub_).seconds() < config.mesh_update_period_s) { + return; + } - auto msg = visualizer::makeMeshMsg( - header, *mesh, getMsgNamespace(), config.coloring.create()); + last_pub_ = now; + auto msg = makeMeshMsg(header, *mesh, getMsgNamespace(), config.coloring.create()); mesh_pub_->publish(msg); } diff --git a/hydra_visualizer/src/visualizer_node.cpp b/hydra_visualizer/src/visualizer_node.cpp index 15a54ed5..e9028d17 100644 --- a/hydra_visualizer/src/visualizer_node.cpp +++ b/hydra_visualizer/src/visualizer_node.cpp @@ -131,10 +131,13 @@ void DsgVisualizer::spinOnce(bool force) { header.frame_id = stamped_graph.frame_id; header.stamp = stamped_graph.timestamp.value_or(nh_.now()); - renderer_->draw(header, *stamped_graph.graph); - for (const auto& plugin : plugins_) { - if (plugin) { - plugin->draw(header, *stamped_graph.graph); + { + std::unique_lock lock(graph_->mutex); + renderer_->draw(header, *stamped_graph.graph); + for (const auto& plugin : plugins_) { + if (plugin) { + plugin->draw(header, *stamped_graph.graph); + } } } From 648a8437dae1629584d3d9e1b6bc1397346c75c1 Mon Sep 17 00:00:00 2001 From: Nathan Hughes Date: Thu, 2 Jul 2026 20:47:27 +0000 Subject: [PATCH 6/8] drop instance ID config fields --- .../include/hydra_visualizer/adapters/mesh_color.h | 2 -- .../include/hydra_visualizer/adapters/node_color.h | 1 - hydra_visualizer/src/adapters/mesh_color.cpp | 6 +----- hydra_visualizer/src/adapters/node_color.cpp | 4 ---- 4 files changed, 1 insertion(+), 12 deletions(-) diff --git a/hydra_visualizer/include/hydra_visualizer/adapters/mesh_color.h b/hydra_visualizer/include/hydra_visualizer/adapters/mesh_color.h index a094c810..b667534c 100644 --- a/hydra_visualizer/include/hydra_visualizer/adapters/mesh_color.h +++ b/hydra_visualizer/include/hydra_visualizer/adapters/mesh_color.h @@ -92,8 +92,6 @@ void declare_config(UniformMeshColoring::Config& config); struct SemanticMeshColoring : public MeshColoring { struct Config { visualizer::CategoricalColormap::Config colormap; - //! Extract upper 16 bits as semantic category from packed (category << 16 | instance_id) labels - bool instance_id = false; } const config; explicit SemanticMeshColoring(const Config& config); virtual ~SemanticMeshColoring() = default; diff --git a/hydra_visualizer/include/hydra_visualizer/adapters/node_color.h b/hydra_visualizer/include/hydra_visualizer/adapters/node_color.h index 5d0da3e3..40b837a4 100644 --- a/hydra_visualizer/include/hydra_visualizer/adapters/node_color.h +++ b/hydra_visualizer/include/hydra_visualizer/adapters/node_color.h @@ -106,7 +106,6 @@ void declare_config(UniformColorAdapter::Config& config); struct LabelColorAdapter : NodeColorAdapter { struct Config { visualizer::CategoricalColormap::Config colormap; - bool instance_id = false; } const config; explicit LabelColorAdapter(const Config& config); diff --git a/hydra_visualizer/src/adapters/mesh_color.cpp b/hydra_visualizer/src/adapters/mesh_color.cpp index a7eddecb..872fc6cb 100644 --- a/hydra_visualizer/src/adapters/mesh_color.cpp +++ b/hydra_visualizer/src/adapters/mesh_color.cpp @@ -34,7 +34,6 @@ void declare_config(SemanticMeshColoring::Config& config) { using namespace config; name("SemanticMeshColoring::Config"); field(config.colormap, "colormap"); - field(config.instance_id, "instance_id"); } SemanticMeshColoring::SemanticMeshColoring(const Config& config) @@ -45,10 +44,7 @@ Color SemanticMeshColoring::getVertexColor(const Mesh& mesh, size_t i) const { return Color::black(); } - const auto raw_label = mesh.label(i); - const auto label = - (config.instance_id && raw_label > 0xFFFF) ? (raw_label >> 16) : raw_label; - return colormap_.getColor(label); + return colormap_.getColor(mesh.label(i)); } void declare_config(FirstSeenMeshColoring::Config&) { diff --git a/hydra_visualizer/src/adapters/node_color.cpp b/hydra_visualizer/src/adapters/node_color.cpp index 6c7f9f26..5bba03c8 100644 --- a/hydra_visualizer/src/adapters/node_color.cpp +++ b/hydra_visualizer/src/adapters/node_color.cpp @@ -88,9 +88,6 @@ Color LabelColorAdapter::getColor(const DynamicSceneGraph&, VLOG(5) << "Node " << NodeSymbol(node.id).str() << " has no label!"; } - if (config.instance_id && label > 0xFFFF) { - label = label >> 16; - } return colormap_.getColor(label); } @@ -98,7 +95,6 @@ void declare_config(LabelColorAdapter::Config& config) { using namespace config; name("LabelColorAdapter::Config"); field(config.colormap, "colormap"); - field(config.instance_id, "instance_id"); } IdColorAdapter::IdColorAdapter(const Config& config) From c42c28984a656ff1609cbc0b1935058d5e04fcf1 Mon Sep 17 00:00:00 2001 From: Nathan Hughes Date: Thu, 2 Jul 2026 21:11:46 +0000 Subject: [PATCH 7/8] rework mutex --- .../hydra_visualizer/io/graph_ros_wrapper.h | 2 ++ .../hydra_visualizer/io/graph_wrapper.h | 8 +++++++- hydra_visualizer/src/io/graph_ros_wrapper.cpp | 13 ++++++++---- hydra_visualizer/src/io/graph_zmq_wrapper.cpp | 6 ++++-- hydra_visualizer/src/visualizer_node.cpp | 20 +++++++++---------- 5 files changed, 31 insertions(+), 18 deletions(-) diff --git a/hydra_visualizer/include/hydra_visualizer/io/graph_ros_wrapper.h b/hydra_visualizer/include/hydra_visualizer/io/graph_ros_wrapper.h index c26e05ae..558fad25 100644 --- a/hydra_visualizer/include/hydra_visualizer/io/graph_ros_wrapper.h +++ b/hydra_visualizer/include/hydra_visualizer/io/graph_ros_wrapper.h @@ -64,8 +64,10 @@ class GraphRosWrapper : public GraphWrapper { bool has_change_; ianvs::NodeHandle nh_; rclcpp::Subscription::SharedPtr sub_; + rclcpp::Time last_time_; std::string last_frame_id_; + mutable std::mutex graph_mutex_; spark_dsg::DynamicSceneGraph::Ptr graph_; }; diff --git a/hydra_visualizer/include/hydra_visualizer/io/graph_wrapper.h b/hydra_visualizer/include/hydra_visualizer/io/graph_wrapper.h index ca7d16a4..8adf8c1a 100644 --- a/hydra_visualizer/include/hydra_visualizer/io/graph_wrapper.h +++ b/hydra_visualizer/include/hydra_visualizer/io/graph_wrapper.h @@ -42,14 +42,20 @@ namespace hydra { struct StampedGraph { + //! Underlying scene graph spark_dsg::DynamicSceneGraph::Ptr graph; + //! Frame ID for scene graph std::string frame_id = ""; + //! Timestamp of scene graph std::optional timestamp = std::nullopt; + //! Optional lock object for scene graph (for ROS and ZMQ wrappers) + std::unique_lock lock = {}; + + //! Whether or not the scene graph is valid inline operator bool() const { return graph != nullptr; } }; struct GraphWrapper { - mutable std::mutex mutex; // protects graph_ from concurrent read/write using Ptr = std::shared_ptr; virtual ~GraphWrapper() = default; virtual bool hasChange() const = 0; diff --git a/hydra_visualizer/src/io/graph_ros_wrapper.cpp b/hydra_visualizer/src/io/graph_ros_wrapper.cpp index 20530089..c568b9d5 100644 --- a/hydra_visualizer/src/io/graph_ros_wrapper.cpp +++ b/hydra_visualizer/src/io/graph_ros_wrapper.cpp @@ -66,20 +66,25 @@ bool GraphRosWrapper::hasChange() const { return has_change_; } void GraphRosWrapper::clearChangeFlag() { has_change_ = false; } StampedGraph GraphRosWrapper::get() const { - return {graph_, last_frame_id_, last_time_}; + // lock and pass information to the visualizer + std::unique_lock lock(graph_mutex_); + return {graph_, last_frame_id_, last_time_, std::move(lock)}; } void GraphRosWrapper::callback(const DsgUpdate::ConstSharedPtr& msg) { - // not designed to be threadsafe; should lock and clone graph on return if desired + // technically we shouldn't need a mutex here because the wrapper subscriber should be + // in the same callback group as the rest of the node, but easy enough to pass a lock + // to the visualizer + std::lock_guard lock(graph_mutex_); + last_time_ = msg->header.stamp; last_frame_id_ = msg->header.frame_id; if (last_frame_id_.empty()) { - LOG(ERROR) << "Received scene grpah with empty frame_id field!"; + LOG(ERROR) << "Received scene graph with empty frame_id field!"; return; } try { - std::lock_guard lk(mutex); if (!graph_) { graph_ = spark_dsg::io::binary::readGraph(msg->layer_contents); } else { diff --git a/hydra_visualizer/src/io/graph_zmq_wrapper.cpp b/hydra_visualizer/src/io/graph_zmq_wrapper.cpp index 06f9ab3e..f31e5446 100644 --- a/hydra_visualizer/src/io/graph_zmq_wrapper.cpp +++ b/hydra_visualizer/src/io/graph_zmq_wrapper.cpp @@ -87,12 +87,13 @@ void GraphZmqWrapper::clearChangeFlag() { } StampedGraph GraphZmqWrapper::get() const { - std::lock_guard lock(graph_mutex_); + std::unique_lock lock(graph_mutex_); if (!graph_) { return {nullptr}; } - return {graph_->clone(), config.frame_id}; + // pass the lock for the visualizer to use the graph + return {graph_, config.frame_id, std::nullopt, std::move(lock)}; } void GraphZmqWrapper::spin() { @@ -106,6 +107,7 @@ void GraphZmqWrapper::spin() { if (receiver_->graph()) { graph_ = receiver_->graph()->clone(); } + has_change_ = true; VLOG(1) << "Got graph!"; } diff --git a/hydra_visualizer/src/visualizer_node.cpp b/hydra_visualizer/src/visualizer_node.cpp index e9028d17..02501bea 100644 --- a/hydra_visualizer/src/visualizer_node.cpp +++ b/hydra_visualizer/src/visualizer_node.cpp @@ -122,24 +122,22 @@ void DsgVisualizer::spinOnce(bool force) { return; } - const auto stamped_graph = graph_->get(); - if (!stamped_graph) { - return; - } - - std_msgs::msg::Header header; - header.frame_id = stamped_graph.frame_id; - header.stamp = stamped_graph.timestamp.value_or(nh_.now()); + { // start scope for stamped graph (for optional critical region) + const auto stamped_graph = graph_->get(); + if (!stamped_graph) { + return; + } - { - std::unique_lock lock(graph_->mutex); + std_msgs::msg::Header header; + header.frame_id = stamped_graph.frame_id; + header.stamp = stamped_graph.timestamp.value_or(nh_.now()); renderer_->draw(header, *stamped_graph.graph); for (const auto& plugin : plugins_) { if (plugin) { plugin->draw(header, *stamped_graph.graph); } } - } + } // end scope for stamped graph graph_->clearChangeFlag(); renderer_->clearChangeFlag(); From 5184b842aa7033785f8512cb0e767a1d3c446b29 Mon Sep 17 00:00:00 2001 From: Nathan Hughes Date: Thu, 2 Jul 2026 21:16:03 +0000 Subject: [PATCH 8/8] rename field --- .../include/hydra_visualizer/plugins/mesh_plugin.h | 2 +- hydra_visualizer/src/plugins/mesh_plugin.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/hydra_visualizer/include/hydra_visualizer/plugins/mesh_plugin.h b/hydra_visualizer/include/hydra_visualizer/plugins/mesh_plugin.h index d0aed473..07e1c4ea 100644 --- a/hydra_visualizer/include/hydra_visualizer/plugins/mesh_plugin.h +++ b/hydra_visualizer/include/hydra_visualizer/plugins/mesh_plugin.h @@ -52,7 +52,7 @@ class MeshPlugin : public VisualizerPlugin { struct Config { config::VirtualConfig coloring; - double mesh_update_period_s = 1.0; + double min_mesh_separation_s = 0.0; }; MeshPlugin(const Config& config, ianvs::NodeHandle nh, const std::string& name); diff --git a/hydra_visualizer/src/plugins/mesh_plugin.cpp b/hydra_visualizer/src/plugins/mesh_plugin.cpp index 24def35e..22fb5258 100644 --- a/hydra_visualizer/src/plugins/mesh_plugin.cpp +++ b/hydra_visualizer/src/plugins/mesh_plugin.cpp @@ -63,7 +63,7 @@ void declare_config(MeshPlugin::Config& config) { using namespace config; name("MeshPlugin::Config"); field(config.coloring, "coloring"); - field(config.mesh_update_period_s, "mesh_update_period_s", "s"); + field(config.min_mesh_separation_s, "min_mesh_separation_s", "s"); } MeshPlugin::MeshPlugin(const Config& config, @@ -84,7 +84,7 @@ void MeshPlugin::draw(const std_msgs::msg::Header& header, const auto config = config_.get(); const rclcpp::Time now(header.stamp); - if (last_pub_ && (now - *last_pub_).seconds() < config.mesh_update_period_s) { + if (last_pub_ && (now - *last_pub_).seconds() < config.min_mesh_separation_s) { return; }