Skip to content

Commit 2258577

Browse files
suchetanrsmasf7g
authored andcommitted
* Parametrize collision checking in nav2_graceful_controller (ros-navigation#5006)
* * Parametrize collision checking in nav2_graceful_controller Signed-off-by: suchetanrs <[email protected]> * * Fix linting errors Signed-off-by: suchetanrs <[email protected]> * * Address PR comments * Add parameter to dynamic reconfigure Signed-off-by: suchetanrs <[email protected]> * * Add test for the use_collision_detection parameter Signed-off-by: suchetanrs <[email protected]> --------- Signed-off-by: suchetanrs <[email protected]>
1 parent fa23542 commit 2258577

File tree

4 files changed

+17
-4
lines changed

4 files changed

+17
-4
lines changed

nav2_graceful_controller/include/nav2_graceful_controller/parameter_handler.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ struct Parameters
5353
double rotation_scaling_factor;
5454
bool allow_backward;
5555
double in_place_collision_resolution;
56+
bool use_collision_detection;
5657
};
5758

5859
/**

nav2_graceful_controller/src/graceful_controller.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,10 @@ void GracefulController::configure(
5656
params_->v_linear_min, params_->v_linear_max, params_->v_angular_max);
5757

5858
// Initialize footprint collision checker
59-
collision_checker_ = std::make_unique<nav2_costmap_2d::
60-
FootprintCollisionChecker<nav2_costmap_2d::Costmap2D *>>(costmap_ros_->getCostmap());
59+
if(params_->use_collision_detection) {
60+
collision_checker_ = std::make_unique<nav2_costmap_2d::
61+
FootprintCollisionChecker<nav2_costmap_2d::Costmap2D *>>(costmap_ros_->getCostmap());
62+
}
6163

6264
// Publishers
6365
transformed_plan_pub_ = node->create_publisher<nav_msgs::msg::Path>("transformed_global_plan", 1);
@@ -177,7 +179,7 @@ geometry_msgs::msg::TwistStamped GracefulController::computeVelocityCommands(
177179
next_pose.pose.orientation = nav2_util::geometry_utils::orientationAroundZAxis(yaw);
178180
geometry_msgs::msg::PoseStamped costmap_pose;
179181
tf2::doTransform(next_pose, costmap_pose, costmap_transform);
180-
if (inCollision(
182+
if (params_->use_collision_detection && inCollision(
181183
costmap_pose.pose.position.x, costmap_pose.pose.position.y,
182184
tf2::getYaw(costmap_pose.pose.orientation)))
183185
{
@@ -348,7 +350,7 @@ bool GracefulController::simulateTrajectory(
348350
// Check for collision
349351
geometry_msgs::msg::PoseStamped global_pose;
350352
tf2::doTransform(next_pose, global_pose, costmap_transform);
351-
if (inCollision(
353+
if (params_->use_collision_detection && inCollision(
352354
global_pose.pose.position.x, global_pose.pose.position.y,
353355
tf2::getYaw(global_pose.pose.orientation)))
354356
{

nav2_graceful_controller/src/parameter_handler.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@ ParameterHandler::ParameterHandler(
7070
node, plugin_name_ + ".allow_backward", rclcpp::ParameterValue(false));
7171
declare_parameter_if_not_declared(
7272
node, plugin_name_ + ".in_place_collision_resolution", rclcpp::ParameterValue(0.1));
73+
declare_parameter_if_not_declared(
74+
node, plugin_name_ + ".use_collision_detection", rclcpp::ParameterValue(true));
7375

7476
node->get_parameter(plugin_name_ + ".transform_tolerance", params_.transform_tolerance);
7577
node->get_parameter(plugin_name_ + ".min_lookahead", params_.min_lookahead);
@@ -103,6 +105,8 @@ ParameterHandler::ParameterHandler(
103105
node->get_parameter(plugin_name_ + ".allow_backward", params_.allow_backward);
104106
node->get_parameter(
105107
plugin_name_ + ".in_place_collision_resolution", params_.in_place_collision_resolution);
108+
node->get_parameter(
109+
plugin_name_ + ".use_collision_detection", params_.use_collision_detection);
106110

107111
if (params_.initial_rotation && params_.allow_backward) {
108112
RCLCPP_WARN(
@@ -187,6 +191,8 @@ ParameterHandler::dynamicParametersCallback(std::vector<rclcpp::Parameter> param
187191
continue;
188192
}
189193
params_.allow_backward = parameter.as_bool();
194+
} else if (name == plugin_name_ + ".use_collision_detection") {
195+
params_.use_collision_detection = parameter.as_bool();
190196
}
191197
}
192198
}

nav2_graceful_controller/test/test_graceful_controller.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,8 @@ TEST(GracefulControllerTest, dynamicParameters) {
248248
node, "test.initial_rotation", rclcpp::ParameterValue(true));
249249
nav2_util::declare_parameter_if_not_declared(
250250
node, "test.allow_backward", rclcpp::ParameterValue(true));
251+
nav2_util::declare_parameter_if_not_declared(
252+
node, "test.use_collision_detection", rclcpp::ParameterValue(true));
251253

252254
// Create controller
253255
auto controller = std::make_shared<GMControllerFixture>();
@@ -282,6 +284,7 @@ TEST(GracefulControllerTest, dynamicParameters) {
282284
rclcpp::Parameter("test.prefer_final_rotation", false),
283285
rclcpp::Parameter("test.rotation_scaling_factor", 13.0),
284286
rclcpp::Parameter("test.allow_backward", true),
287+
rclcpp::Parameter("test.use_collision_detection", false),
285288
rclcpp::Parameter("test.in_place_collision_resolution", 15.0)});
286289

287290
// Spin
@@ -305,6 +308,7 @@ TEST(GracefulControllerTest, dynamicParameters) {
305308
EXPECT_EQ(node->get_parameter("test.prefer_final_rotation").as_bool(), false);
306309
EXPECT_EQ(node->get_parameter("test.rotation_scaling_factor").as_double(), 13.0);
307310
EXPECT_EQ(node->get_parameter("test.allow_backward").as_bool(), true);
311+
EXPECT_EQ(node->get_parameter("test.use_collision_detection").as_bool(), false);
308312
EXPECT_EQ(node->get_parameter("test.in_place_collision_resolution").as_double(), 15.0);
309313

310314
// Set initial rotation to true

0 commit comments

Comments
 (0)