Skip to content

Commit ba3d647

Browse files
MartiBoletJoshua Wallace
authored andcommitted
Solve bug when CostmapInfoServer is reactivated (ros-navigation#3292)
* Solve bug when CostmapInfoServer is reactivated
1 parent ebf079e commit ba3d647

File tree

3 files changed

+41
-9
lines changed

3 files changed

+41
-9
lines changed

nav2_map_server/include/nav2_map_server/costmap_filter_info_server.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ class CostmapFilterInfoServer : public nav2_util::LifecycleNode
7171
private:
7272
rclcpp_lifecycle::LifecyclePublisher<nav2_msgs::msg::CostmapFilterInfo>::SharedPtr publisher_;
7373

74-
std::unique_ptr<nav2_msgs::msg::CostmapFilterInfo> msg_;
74+
nav2_msgs::msg::CostmapFilterInfo msg_;
7575
}; // CostmapFilterInfoServer
7676

7777
} // namespace nav2_map_server

nav2_map_server/src/costmap_filter_info/costmap_filter_info_server.cpp

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,13 @@ CostmapFilterInfoServer::on_configure(const rclcpp_lifecycle::State & /*state*/)
4848
publisher_ = this->create_publisher<nav2_msgs::msg::CostmapFilterInfo>(
4949
filter_info_topic, rclcpp::QoS(rclcpp::KeepLast(1)).transient_local().reliable());
5050

51-
msg_ = std::make_unique<nav2_msgs::msg::CostmapFilterInfo>();
52-
msg_->header.frame_id = "";
53-
msg_->header.stamp = now();
54-
msg_->type = get_parameter("type").as_int();
55-
msg_->filter_mask_topic = get_parameter("mask_topic").as_string();
56-
msg_->base = static_cast<float>(get_parameter("base").as_double());
57-
msg_->multiplier = static_cast<float>(get_parameter("multiplier").as_double());
51+
msg_ = nav2_msgs::msg::CostmapFilterInfo();
52+
msg_.header.frame_id = "";
53+
msg_.header.stamp = now();
54+
msg_.type = get_parameter("type").as_int();
55+
msg_.filter_mask_topic = get_parameter("mask_topic").as_string();
56+
msg_.base = static_cast<float>(get_parameter("base").as_double());
57+
msg_.multiplier = static_cast<float>(get_parameter("multiplier").as_double());
5858

5959
return nav2_util::CallbackReturn::SUCCESS;
6060
}
@@ -65,7 +65,8 @@ CostmapFilterInfoServer::on_activate(const rclcpp_lifecycle::State & /*state*/)
6565
RCLCPP_INFO(get_logger(), "Activating");
6666

6767
publisher_->on_activate();
68-
publisher_->publish(std::move(msg_));
68+
auto costmap_filter_info = std::make_unique<nav2_msgs::msg::CostmapFilterInfo>(msg_);
69+
publisher_->publish(std::move(costmap_filter_info));
6970

7071
// create bond connection
7172
createBond();

nav2_map_server/test/unit/test_costmap_filter_info_server.cpp

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,16 @@ class InfoServerWrapper : public nav2_map_server::CostmapFilterInfoServer
5959
on_cleanup(get_current_state());
6060
on_shutdown(get_current_state());
6161
}
62+
63+
void deactivate()
64+
{
65+
on_deactivate(get_current_state());
66+
}
67+
68+
void activate()
69+
{
70+
on_activate(get_current_state());
71+
}
6272
};
6373

6474
class InfoServerTester : public ::testing::Test
@@ -144,3 +154,24 @@ TEST_F(InfoServerTester, testCostmapFilterInfoPublish)
144154
EXPECT_NEAR(info_->base, BASE, EPSILON);
145155
EXPECT_NEAR(info_->multiplier, MULTIPLIER, EPSILON);
146156
}
157+
158+
TEST_F(InfoServerTester, testCostmapFilterInfoDeactivateActivate)
159+
{
160+
info_server_->deactivate();
161+
info_ = nullptr;
162+
info_server_->activate();
163+
164+
rclcpp::Time start_time = info_server_->now();
165+
while (!isReceived()) {
166+
rclcpp::spin_some(info_server_->get_node_base_interface());
167+
std::this_thread::sleep_for(100ms);
168+
// Waiting no more than 5 seconds
169+
ASSERT_TRUE((info_server_->now() - start_time) <= rclcpp::Duration(5000ms));
170+
}
171+
172+
// Checking received CostmapFilterInfo for consistency
173+
EXPECT_EQ(info_->type, TYPE);
174+
EXPECT_EQ(info_->filter_mask_topic, MASK_TOPIC);
175+
EXPECT_NEAR(info_->base, BASE, EPSILON);
176+
EXPECT_NEAR(info_->multiplier, MULTIPLIER, EPSILON);
177+
}

0 commit comments

Comments
 (0)