Skip to content

Commit 8552eec

Browse files
committed
Fix misplaced footprint on static layer
Signed-off-by: HovorunBh <fipogh@gmail.com>
1 parent 088c423 commit 8552eec

File tree

2 files changed

+20
-7
lines changed

2 files changed

+20
-7
lines changed

nav2_costmap_2d/include/nav2_costmap_2d/static_layer.hpp

+4-1
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@
4949
#include "nav_msgs/msg/occupancy_grid.hpp"
5050
#include "rclcpp/rclcpp.hpp"
5151
#include "nav2_costmap_2d/footprint.hpp"
52+
#include "nav2_util/robot_utils.hpp"
53+
#include "tf2/utils.hpp"
5254

5355
namespace nav2_costmap_2d
5456
{
@@ -197,7 +199,8 @@ class StaticLayer : public CostmapLayer
197199
bool trinary_costmap_;
198200
bool map_received_{false};
199201
bool map_received_in_update_bounds_{false};
200-
tf2::Duration transform_tolerance_;
202+
double transform_tolerance_;
203+
std::string robot_base_frame_;
201204
nav_msgs::msg::OccupancyGrid::SharedPtr map_buffer_;
202205
// Dynamic parameters handler
203206
rclcpp::node_interfaces::OnSetParametersCallbackHandle::SharedPtr dyn_params_handler_;

nav2_costmap_2d/plugins/static_layer.cpp

+16-6
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,6 @@ void
130130
StaticLayer::getParameters()
131131
{
132132
int temp_lethal_threshold = 0;
133-
double temp_tf_tol = 0.0;
134133

135134
declareParameter("enabled", rclcpp::ParameterValue(true));
136135
declareParameter("subscribe_to_updates", rclcpp::ParameterValue(false));
@@ -159,15 +158,14 @@ StaticLayer::getParameters()
159158
node->get_parameter("lethal_cost_threshold", temp_lethal_threshold);
160159
node->get_parameter("unknown_cost_value", unknown_cost_value_);
161160
node->get_parameter("trinary_costmap", trinary_costmap_);
162-
node->get_parameter("transform_tolerance", temp_tf_tol);
161+
node->get_parameter("transform_tolerance", transform_tolerance_);
162+
node->get_parameter("robot_base_frame", robot_base_frame_);
163163

164164
// Enforce bounds
165165
lethal_threshold_ = std::max(std::min(temp_lethal_threshold, 100), 0);
166166
map_received_ = false;
167167
map_received_in_update_bounds_ = false;
168168

169-
transform_tolerance_ = tf2::durationFromSec(temp_tf_tol);
170-
171169
// Add callback for dynamic parameters
172170
dyn_params_handler_ = node->add_on_set_parameters_callback(
173171
std::bind(
@@ -387,6 +385,18 @@ StaticLayer::updateFootprint(
387385
{
388386
if (!footprint_clearing_enabled_) {return;}
389387

388+
if (map_frame_.empty()) {return;}
389+
if (map_frame != global_frame_) {
390+
geometry_msgs::msg::PoseStamped robot_pose;
391+
nav2_util::getCurrentPose(
392+
robot_pose, *tf_,
393+
map_frame_, robot_base_frame_, transform_tolerance_
394+
);
395+
robot_x = robot_pose.pose.position.x;
396+
robot_y = robot_pose.pose.position.y;
397+
robot_yaw = tf2::getYaw(robot_pose.pose.orientation);
398+
}
399+
390400
transformFootprint(robot_x, robot_y, robot_yaw, getFootprint(), transformed_footprint_);
391401

392402
for (unsigned int i = 0; i < transformed_footprint_.size(); i++) {
@@ -436,7 +446,7 @@ StaticLayer::updateCosts(
436446
try {
437447
transform = tf_->lookupTransform(
438448
map_frame_, global_frame_, tf2::TimePointZero,
439-
transform_tolerance_);
449+
tf2::durationFromSec(transform_tolerance_));
440450
} catch (tf2::TransformException & ex) {
441451
RCLCPP_ERROR(logger_, "StaticLayer: %s", ex.what());
442452
return;
@@ -495,7 +505,7 @@ StaticLayer::dynamicParametersCallback(
495505
"cannot be changed while running. Rejecting parameter update.", param_name.c_str());
496506
} else if (param_type == ParameterType::PARAMETER_DOUBLE) {
497507
if (param_name == name_ + "." + "transform_tolerance") {
498-
transform_tolerance_ = tf2::durationFromSec(parameter.as_double());
508+
transform_tolerance_ = parameter.as_double();
499509
}
500510
} else if (param_type == ParameterType::PARAMETER_BOOL) {
501511
if (param_name == name_ + "." + "enabled" && enabled_ != parameter.as_bool()) {

0 commit comments

Comments
 (0)