From 308efb0f68cd58aefa082b8244a24d33c47c3b0a Mon Sep 17 00:00:00 2001 From: Kaixian Qu Date: Wed, 23 Jul 2025 15:02:09 +0200 Subject: [PATCH] Reset the update flag after publishing the map --- voxblox_ros/src/esdf_server.cc | 11 +++++++++-- voxblox_ros/src/tsdf_server.cc | 11 +++++++++-- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/voxblox_ros/src/esdf_server.cc b/voxblox_ros/src/esdf_server.cc index 1954f6607..0e0ce55cf 100644 --- a/voxblox_ros/src/esdf_server.cc +++ b/voxblox_ros/src/esdf_server.cc @@ -156,14 +156,21 @@ void EsdfServer::publishMap(bool reset_remote_map) { } const bool only_updated = !reset_remote_map; timing::Timer publish_map_timer("map/publish_esdf"); + auto layer = this->esdf_map_->getEsdfLayerPtr(); voxblox_msgs::Layer layer_msg; - serializeLayerAsMsg(this->esdf_map_->getEsdfLayer(), - only_updated, &layer_msg); + serializeLayerAsMsg(*layer, only_updated, &layer_msg); if (reset_remote_map) { layer_msg.action = static_cast(MapDerializationAction::kReset); } this->esdf_map_pub_.publish(layer_msg); publish_map_timer.Stop(); + + // Clear the updated flag if we have published the map + BlockIndexList block_list; + layer->getAllUpdatedBlocks(Update::kMap, &block_list); + for (const BlockIndex& index : block_list) { + layer->getBlockPtrByIndex(index)->updated().reset(Update::kMap); + } } num_subscribers_esdf_map_ = subscribers; TsdfServer::publishMap(); diff --git a/voxblox_ros/src/tsdf_server.cc b/voxblox_ros/src/tsdf_server.cc index 5d566e35d..52f567d02 100644 --- a/voxblox_ros/src/tsdf_server.cc +++ b/voxblox_ros/src/tsdf_server.cc @@ -467,14 +467,21 @@ void TsdfServer::publishMap(bool reset_remote_map) { } const bool only_updated = !reset_remote_map; timing::Timer publish_map_timer("map/publish_tsdf"); + auto layer = this->tsdf_map_->getTsdfLayerPtr(); voxblox_msgs::Layer layer_msg; - serializeLayerAsMsg(this->tsdf_map_->getTsdfLayer(), - only_updated, &layer_msg); + serializeLayerAsMsg(*layer, only_updated, &layer_msg); if (reset_remote_map) { layer_msg.action = static_cast(MapDerializationAction::kReset); } this->tsdf_map_pub_.publish(layer_msg); publish_map_timer.Stop(); + + // Clear the updated flag if we have published the map + BlockIndexList block_list; + layer->getAllUpdatedBlocks(Update::kMap, &block_list); + for (const BlockIndex& index : block_list) { + layer->getBlockPtrByIndex(index)->updated().reset(Update::kMap); + } } num_subscribers_tsdf_map_ = subscribers; }