Skip to content

Commit d6b02ac

Browse files
tonynajjarreinzorSteveMacenskitiwaojoclalancette
authored
Improvements in getCostsCallback (#4767)
* fix(simple-action-server): info log instead of warn on cancel (#4684) Cancelling a goal is nominal behavior and therefore it should not log warning. Signed-off-by: Rein Appeldoorn <[email protected]> Signed-off-by: Tony Najjar <[email protected]> * feat(controller-server): `publish_zero_velocity` parameter (#4675) * feat(controller-server): `publish_zero_velocity` parameter For optionally publishing a zero velocity command reference on goal exit. Publishing a zero velocity is not desired when we are following consecutive path segments that end with a velocity. Signed-off-by: Rein Appeldoorn <[email protected]> * processed comments Signed-off-by: Rein Appeldoorn <[email protected]> * comments Steve Signed-off-by: Rein Appeldoorn <[email protected]> --------- Signed-off-by: Rein Appeldoorn <[email protected]> Signed-off-by: Tony Najjar <[email protected]> * Improvements in RemoveInCollisionGoals and adjacent features (#4676) * improvements Signed-off-by: Tony Najjar <[email protected]> * ament_uncrustify Signed-off-by: Tony Najjar <[email protected]> * Fix formatting Signed-off-by: Tony Najjar <[email protected]> * fix building Signed-off-by: Tony Najjar <[email protected]> * fixes Signed-off-by: Tony Najjar <[email protected]> * add stamp Signed-off-by: Tony Najjar <[email protected]> --------- Signed-off-by: Tony Najjar <[email protected]> * Correct paper name for graceful controller Signed-off-by: Steve Macenski <[email protected]> Signed-off-by: Tony Najjar <[email protected]> * Added missing action clients in robot_navigator(BasicNavigator) to destroy_node (#4698) * fix: added assisted_teleop_client to robot_navigator(BasicNavigator) destroy_node Signed-off-by: Tiwa Ojo <[email protected]> * fix: added other missing action clients to robot_navigator(BasicNavigator) destroy_node Signed-off-by: Tiwa Ojo <[email protected]> --------- Signed-off-by: Tiwa Ojo <[email protected]> Signed-off-by: Tony Najjar <[email protected]> * Adding disengagement threshold to rotation shim controller (#4699) * adding disengagement threshold to rotation shim controller Signed-off-by: Steve Macenski <[email protected]> * change default to 22.5 deg Signed-off-by: Steve Macenski <[email protected]> --------- Signed-off-by: Steve Macenski <[email protected]> Signed-off-by: Tony Najjar <[email protected]> * Switch nav2_waypoint_follower to modern CMake idioms. (#4648) Signed-off-by: Chris Lalancette <[email protected]> Signed-off-by: Tony Najjar <[email protected]> * Fixing SGF in MPPI and Smoother (#4669) Signed-off-by: Steve Macenski <[email protected]> Signed-off-by: Tony Najjar <[email protected]> * Feat/migrate gps nav2 system test (#4682) * include missing docking station parameters Signed-off-by: stevedan <[email protected]> * fix crach RL Signed-off-by: stevedan <[email protected]> * lintering Signed-off-by: stevedan <[email protected]> * Change naming Signed-off-by: stevedan <[email protected]> * update submodule Signed-off-by: stevedan <[email protected]> * minor changes Signed-off-by: stevedan <[email protected]> * fix issue with caching Signed-off-by: stevedan <[email protected]> * fix issue with caching, increase version number Signed-off-by: stevedan <[email protected]> * Pin git ref via sha to bust underlay workspace cache --------- Signed-off-by: stevedan <[email protected]> Co-authored-by: ruffsl <[email protected]> Signed-off-by: Tony Najjar <[email protected]> * fix: handle transition failures in all servers (#4708) * fix: handle transition failures in planner/controller/smoother servers Signed-off-by: Kemal Bektas <[email protected]> * adding support for rest of servers + review comments Signed-off-by: Steve Macenski <[email protected]> * Replacing throws with error and failed lifecycle transitions Signed-off-by: Steve Macenski <[email protected]> * fix vel smoother unit tests Signed-off-by: Steve Macenski <[email protected]> * fixing docking server unit testing Signed-off-by: Steve Macenski <[email protected]> * fixing last bits Signed-off-by: Steve Macenski <[email protected]> --------- Signed-off-by: Kemal Bektas <[email protected]> Signed-off-by: Steve Macenski <[email protected]> Co-authored-by: Kemal Bektas <[email protected]> Signed-off-by: Tony Najjar <[email protected]> * [RotationShimController] fix: rotate on short paths (#4716) Add header data to goal for short paths. Commit d8ae3c1 added the possibility to the rotation shim controller to rotate towards the goal when the goal was closer that the `forward_sampling_distance`. This feature was not fully working as the goal was missing proper header data, causing the rotation shim to give back control to the main controller. Co-authored-by: agennart <[email protected]> Signed-off-by: Tony Najjar <[email protected]> * Improve Docking panel (#4717) * Added load and save panel Signed-off-by: Alberto Tudela <[email protected]> * Improved dock_panel state machine Signed-off-by: Alberto Tudela <[email protected]> * Added loading dock plugins log Signed-off-by: Alberto Tudela <[email protected]> * Redo UI Signed-off-by: Alberto Tudela <[email protected]> * Update tooltips Signed-off-by: Alberto Tudela <[email protected]> * Fix null-dereference Signed-off-by: Alberto Tudela <[email protected]> --------- Signed-off-by: Alberto Tudela <[email protected]> Signed-off-by: Tony Najjar <[email protected]> * Added parameter `rotate_to_heading_once` (#4721) Signed-off-by: Daniil Khaninaev <[email protected]> Signed-off-by: Tony Najjar <[email protected]> * [RotationShimController] fix: rotate to goal heading (#4724) Add frame_id to goal when rotating towards goal heading, otherwise the transform would fail. This bug was introduced in 30e2cde by not setting the frame_id. Signed-off-by: agennart <[email protected]> Co-authored-by: agennart <[email protected]> Signed-off-by: Tony Najjar <[email protected]> * [loopback_sim] Publish clock, [nav2_costmap_2d] Fix Qos (#4726) * Publish /clock from loopback sim Signed-off-by: Adi Vardi <[email protected]> * [nav2_costmap_2d] Fix obstacle_layer trying to use RELIABLE QoS Use QoS profile from rclcpp::SensorDataQoS() instead of rmw_qos_profile_t. This solves an issue where the subscriber uses RELIABLE setting even when initialized from rmw_qos_profile_sensor_data. In addition the Subscriber(..., rmw_qos_profile_t) constructor is deprecated in favor of Subscriber(..., rclcpp::QoS) Signed-off-by: Adi Vardi <[email protected]> * [nav2_smac_planner] fix typos Signed-off-by: Adi Vardi <[email protected]> * Use single quotes Signed-off-by: Adi Vardi <[email protected]> --------- Signed-off-by: Adi Vardi <[email protected]> Signed-off-by: Tony Najjar <[email protected]> * Remove nav2_loopback_sim dependency on transforms3d. (#4738) The package never uses it, so don't declare it. Signed-off-by: Chris Lalancette <[email protected]> Signed-off-by: Tony Najjar <[email protected]> * Fix incorrect doxygen comment (#4741) Signed-off-by: Ryan Friedman <[email protected]> Signed-off-by: Tony Najjar <[email protected]> * Fix missing dependency on nav2_costmap_2d (#4742) Signed-off-by: Ryan Friedman <[email protected]> Signed-off-by: Tony Najjar <[email protected]> * Updating error logging in Smac collision detector object (#4743) * Updating error logging in Smac configs Signed-off-by: Steve Macenski <[email protected]> * linting Signed-off-by: Steve Macenski <[email protected]> --------- Signed-off-by: Steve Macenski <[email protected]> Signed-off-by: Tony Najjar <[email protected]> * [map_io] Replace std logs by rclcpp logs (#4720) * replace std logs by rclcpp logs Signed-off-by: Guillaume Doisy <[email protected]> * RCLCPP_DEBUG to RCLCPP_INFO for visibility Signed-off-by: Guillaume Doisy <[email protected]> --------- Signed-off-by: Guillaume Doisy <[email protected]> Co-authored-by: Guillaume Doisy <[email protected]> Signed-off-by: Tony Najjar <[email protected]> * Pass IDLE to on_tick, use that for initialize condition (#4744) * Pass IDLE to on_tick, use that for initialize condition Signed-off-by: redvinaa <[email protected]> * Fix battery sub creation bug Signed-off-by: redvinaa <[email protected]> --------- Signed-off-by: redvinaa <[email protected]> Signed-off-by: Tony Najjar <[email protected]> * nav2_costmap_2d: add missing default_value_ copy in Costmap2D operator= (#4753) default_value_ is an attribute of the Costmap2D class and should be copied along with the other attributes. Signed-off-by: Dylan De Coeyer <[email protected]> Signed-off-by: Tony Najjar <[email protected]> * improvements Signed-off-by: Tony Najjar <[email protected]> * change back to NO_INFORMATION Signed-off-by: Tony Najjar <[email protected]> * Revert "change back to NO_INFORMATION" This reverts commit 9f8c69c. Signed-off-by: Tony Najjar <[email protected]> * Add IsStoppedBTNode Signed-off-by: Tony Najjar <[email protected]> * add topic name + reformat Signed-off-by: Tony Najjar <[email protected]> * fix comment Signed-off-by: Tony Najjar <[email protected]> * fix abs Signed-off-by: Tony Najjar <[email protected]> * remove log Signed-off-by: Tony Najjar <[email protected]> * add getter functions for raw twist Signed-off-by: Tony Najjar <[email protected]> * remove unused code Signed-off-by: Tony Najjar <[email protected]> * use odomsmoother Signed-off-by: Tony Najjar <[email protected]> * fix formatting Signed-off-by: Tony Najjar <[email protected]> * update groot Signed-off-by: Tony Najjar <[email protected]> * Add test Signed-off-by: Tony Najjar <[email protected]> * reset at success Signed-off-by: Tony Najjar <[email protected]> * mppi parameters_handler: Improve verbose handling (#4704) (#4711) * mppi parameters_handler: Improve verbose handling (#4704) The "verbose" parameter of the parameters_handler is a special case that needs registration before the dynamic parameter handler callback is registered. In verbose mode make the parameter handler info/warn/debug messages more expressive. Signed-off-by: Mike Wake <[email protected]> * Address review comments. (#4704) * remove comments. * Use RCLCPP_DEBUG instead of INFO for low level messages. * Add test for trying to access parameters that are not declared. Signed-off-by: Mike Wake <[email protected]> * mppi parameters_handler: Improve static/dynamic/not defined logging (#4704) Attempts to change undefined parameters will not be successful and will log an error. Attempts to change static parameters will be ignored, a debug message is logged if a change in parameters is attempted. Signed-off-by: Mike Wake <[email protected]> * mppi parameters_handler: populate SetParametersResult (#4704) Provide a mechanism to populate an rcl_interfaces::msg::SetParametersResult with the reasons for unsuccessful parameter setting, so that it may be propogated back to a set parameter client. The mechanism provides feedback when attempting to set undefined parameters, static parameters and could be used to validate dynamic parameters and provide a reason for rejection. NOTE: This changes public interface of ParametersHandler class. s/setDynamicParamCallback/setParamCallback s/addDynamicParamCallback/addParamCallback which takes a callback function that is able to populate a rcl_interfaces::msg::SetParametersResult. In order to indicate an unsuccessful parameter change and the reason, callback functions should append a "\n" to the reason before appending to if it is not empty. Signed-off-by: Mike Wake <[email protected]> * mppi parameters_handler: fix reason handling and improve tests Signed-off-by: Mike Wake <[email protected]> --------- Signed-off-by: Mike Wake <[email protected]> Signed-off-by: Tony Najjar <[email protected]> * Added collision detection for docking (#4752) * Added collision detection for docking Signed-off-by: Alberto Tudela <[email protected]> * Minor fixes Signed-off-by: Alberto Tudela <[email protected]> * Improve collision while undocking and test Signed-off-by: Alberto Tudela <[email protected]> * Fix smoke testing Signed-off-by: Alberto Tudela <[email protected]> * Rename dock_collision_threshold Signed-off-by: Alberto Tudela <[email protected]> * Added docs and params Signed-off-by: Alberto Tudela <[email protected]> * Minor changes in README Signed-off-by: Alberto Tudela <[email protected]> --------- Signed-off-by: Alberto Tudela <[email protected]> Signed-off-by: Tony Najjar <[email protected]> * Use BT.CPP Tree::sleep (#4761) * Use BT.cpp sleep Signed-off-by: Tony Najjar <[email protected]> * Implement BT Loop Rate Signed-off-by: Tony Najjar <[email protected]> * Fix formatting Signed-off-by: Tony Najjar <[email protected]> * Fix formatting Signed-off-by: Tony Najjar <[email protected]> * move to nav2_behavior_tree Signed-off-by: Tony Najjar <[email protected]> * fix Signed-off-by: Tony Najjar <[email protected]> * fix lint Signed-off-by: Tony Najjar <[email protected]> * cache Signed-off-by: Tony Najjar <[email protected]> --------- Signed-off-by: Tony Najjar <[email protected]> * FIX velocity_threshold_ Signed-off-by: Tony Najjar <[email protected]> * Fix stopped Node Signed-off-by: Tony Najjar <[email protected]> * Add tests to odometry_utils Signed-off-by: Tony Najjar <[email protected]> * fix linting Signed-off-by: Tony Najjar <[email protected]> * Simplify namespaced bringups and multirobot sim (#4715) * WIP single robot namespacing working Signed-off-by: Luca Della Vedova <[email protected]> * Remove manual namespace substitution Signed-off-by: Luca Della Vedova <[email protected]> * Remove all multirobot specific configs Signed-off-by: Luca Della Vedova <[email protected]> * Refactor parsing function to common, add for rest of layers Signed-off-by: Luca Della Vedova <[email protected]> * Fix dwb_critics test Signed-off-by: Luca Della Vedova <[email protected]> * Add alternative API for costmap construction Signed-off-by: Luca Della Vedova <[email protected]> * Address review feedback Signed-off-by: Luca Della Vedova <[email protected]> * Remove remaining usage of `use_namespace` parameter Signed-off-by: Luca Della Vedova <[email protected]> * Always join with parent namespace Signed-off-by: Luca Della Vedova <[email protected]> * Use private parameter for parent namespace Signed-off-by: Luca Della Vedova <[email protected]> * Fix integration test Signed-off-by: Luca Della Vedova <[email protected]> * Revert "Use private parameter for parent namespace" This reverts commit 0c958dc. Signed-off-by: Luca Della Vedova <[email protected]> * Revert "Fix integration test" This reverts commit 137d577. Signed-off-by: Luca Della Vedova <[email protected]> * Remove global map_topic parameter Signed-off-by: Luca Della Vedova <[email protected]> * Simplify Costmap2DROS constructor Signed-off-by: Luca Della Vedova <[email protected]> --------- Signed-off-by: Luca Della Vedova <[email protected]> Signed-off-by: Luca Della Vedova <[email protected]> Signed-off-by: Tony Najjar <[email protected]> * Make RecoveryNode return Running (#4777) * Add IsStoppedBTNode Signed-off-by: Tony Najjar <[email protected]> * add topic name + reformat Signed-off-by: Tony Najjar <[email protected]> * fix comment Signed-off-by: Tony Najjar <[email protected]> * fix abs Signed-off-by: Tony Najjar <[email protected]> * remove log Signed-off-by: Tony Najjar <[email protected]> * add getter functions for raw twist Signed-off-by: Tony Najjar <[email protected]> * remove unused code Signed-off-by: Tony Najjar <[email protected]> * use odomsmoother Signed-off-by: Tony Najjar <[email protected]> * fix formatting Signed-off-by: Tony Najjar <[email protected]> * update groot Signed-off-by: Tony Najjar <[email protected]> * Add test Signed-off-by: Tony Najjar <[email protected]> * reset at success Signed-off-by: Tony Najjar <[email protected]> * FIX velocity_threshold_ Signed-off-by: Tony Najjar <[email protected]> * Fix stopped Node Signed-off-by: Tony Najjar <[email protected]> * Add tests to odometry_utils Signed-off-by: Tony Najjar <[email protected]> * fix linting Signed-off-by: Tony Najjar <[email protected]> * Make RecoveryNode return RUNNING Signed-off-by: Tony Najjar <[email protected]> * PR review Signed-off-by: Tony Najjar <[email protected]> * add halt at the end Signed-off-by: Tony Najjar <[email protected]> --------- Signed-off-by: Tony Najjar <[email protected]> * Migrating twist to twiststamped in simulations for recommended default bringups (#4779) * migrating from twist to twiststamped Signed-off-by: Steve Macenski <[email protected]> * bump ci cache for updated TB4 sim files Signed-off-by: Steve Macenski <[email protected]> * fixing collision monitor, velocity smoother unit tests Signed-off-by: Steve Macenski <[email protected]> * fix assisted teleop test Signed-off-by: Steve Macenski <[email protected]> * fixing docking server smoke test Signed-off-by: Steve Macenski <[email protected]> * bust nav2 minimal tb sim cache --------- Signed-off-by: Steve Macenski <[email protected]> Signed-off-by: Tony Najjar <[email protected]> * address comments Signed-off-by: Tony Najjar <[email protected]> * set response to true Signed-off-by: Tony Najjar <[email protected]> * fix test Signed-off-by: Tony Najjar <[email protected]> * fail if out of bounds Signed-off-by: Tony Najjar <[email protected]> --------- Signed-off-by: Rein Appeldoorn <[email protected]> Signed-off-by: Tony Najjar <[email protected]> Signed-off-by: Steve Macenski <[email protected]> Signed-off-by: Tiwa Ojo <[email protected]> Signed-off-by: Chris Lalancette <[email protected]> Signed-off-by: stevedan <[email protected]> Signed-off-by: Kemal Bektas <[email protected]> Signed-off-by: Alberto Tudela <[email protected]> Signed-off-by: Daniil Khaninaev <[email protected]> Signed-off-by: agennart <[email protected]> Signed-off-by: Adi Vardi <[email protected]> Signed-off-by: Ryan Friedman <[email protected]> Signed-off-by: Guillaume Doisy <[email protected]> Signed-off-by: redvinaa <[email protected]> Signed-off-by: Dylan De Coeyer <[email protected]> Signed-off-by: Mike Wake <[email protected]> Signed-off-by: Luca Della Vedova <[email protected]> Signed-off-by: Luca Della Vedova <[email protected]> Co-authored-by: Rein Appeldoorn <[email protected]> Co-authored-by: Steve Macenski <[email protected]> Co-authored-by: Tiwa Ojo <[email protected]> Co-authored-by: Chris Lalancette <[email protected]> Co-authored-by: Stevedan Ogochukwu Omodolor <[email protected]> Co-authored-by: ruffsl <[email protected]> Co-authored-by: Kemal Bektas <[email protected]> Co-authored-by: Saitama <[email protected]> Co-authored-by: agennart <[email protected]> Co-authored-by: Alberto Tudela <[email protected]> Co-authored-by: Daniil Khaninaev <[email protected]> Co-authored-by: Adi Vardi <[email protected]> Co-authored-by: Ryan <[email protected]> Co-authored-by: Guillaume Doisy <[email protected]> Co-authored-by: Guillaume Doisy <[email protected]> Co-authored-by: Vince Reda <[email protected]> Co-authored-by: DylanDeCoeyer-Quimesis <[email protected]> Co-authored-by: aosmw <[email protected]> Co-authored-by: Luca Della Vedova <[email protected]>
1 parent add09f6 commit d6b02ac

File tree

4 files changed

+118
-22
lines changed

4 files changed

+118
-22
lines changed

nav2_behavior_tree/plugins/action/remove_in_collision_goals_action.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,14 @@ void RemoveInCollisionGoals::on_tick()
5555
BT::NodeStatus RemoveInCollisionGoals::on_completion(
5656
std::shared_ptr<nav2_msgs::srv::GetCosts::Response> response)
5757
{
58+
if (!response->success) {
59+
RCLCPP_ERROR(
60+
node_->get_logger(),
61+
"GetCosts service call failed");
62+
setOutput("output_goals", input_goals_);
63+
return BT::NodeStatus::FAILURE;
64+
}
65+
5866
Goals valid_goal_poses;
5967
for (size_t i = 0; i < response->costs.size(); ++i) {
6068
if ((response->costs[i] == 255 && !consider_unknown_as_obstacle_) ||

nav2_behavior_tree/test/plugins/action/test_remove_in_collision_goals_action.cpp

Lines changed: 93 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,10 @@
2525
#include "utils/test_behavior_tree_fixture.hpp"
2626

2727

28-
class RemoveInCollisionGoalsService : public TestService<nav2_msgs::srv::GetCosts>
28+
class RemoveInCollisionGoalsSucessService : public TestService<nav2_msgs::srv::GetCosts>
2929
{
3030
public:
31-
RemoveInCollisionGoalsService()
31+
RemoveInCollisionGoalsSucessService()
3232
: TestService("/global_costmap/get_cost_global_costmap")
3333
{}
3434

@@ -40,9 +40,28 @@ class RemoveInCollisionGoalsService : public TestService<nav2_msgs::srv::GetCost
4040
(void)request_header;
4141
(void)request;
4242
response->costs = {100, 50, 5, 254};
43+
response->success = true;
4344
}
4445
};
4546

47+
class RemoveInCollisionGoalsFailureService : public TestService<nav2_msgs::srv::GetCosts>
48+
{
49+
public:
50+
RemoveInCollisionGoalsFailureService()
51+
: TestService("/local_costmap/get_cost_local_costmap")
52+
{}
53+
54+
virtual void handle_service(
55+
const std::shared_ptr<rmw_request_id_t> request_header,
56+
const std::shared_ptr<nav2_msgs::srv::GetCosts::Request> request,
57+
const std::shared_ptr<nav2_msgs::srv::GetCosts::Response> response)
58+
{
59+
(void)request_header;
60+
(void)request;
61+
response->costs = {255, 50, 5, 254};
62+
response->success = false;
63+
}
64+
};
4665

4766
class RemoveInCollisionGoalsTestFixture : public ::testing::Test
4867
{
@@ -86,15 +105,16 @@ class RemoveInCollisionGoalsTestFixture : public ::testing::Test
86105
delete config_;
87106
config_ = nullptr;
88107
node_.reset();
89-
server_.reset();
108+
success_server_.reset();
90109
factory_.reset();
91110
}
92111

93112
void TearDown() override
94113
{
95114
tree_.reset();
96115
}
97-
static std::shared_ptr<RemoveInCollisionGoalsService> server_;
116+
static std::shared_ptr<RemoveInCollisionGoalsSucessService> success_server_;
117+
static std::shared_ptr<RemoveInCollisionGoalsFailureService> failure_server_;
98118

99119
protected:
100120
static rclcpp::Node::SharedPtr node_;
@@ -106,12 +126,14 @@ class RemoveInCollisionGoalsTestFixture : public ::testing::Test
106126
rclcpp::Node::SharedPtr RemoveInCollisionGoalsTestFixture::node_ = nullptr;
107127

108128
BT::NodeConfiguration * RemoveInCollisionGoalsTestFixture::config_ = nullptr;
109-
std::shared_ptr<RemoveInCollisionGoalsService>
110-
RemoveInCollisionGoalsTestFixture::server_ = nullptr;
129+
std::shared_ptr<RemoveInCollisionGoalsSucessService>
130+
RemoveInCollisionGoalsTestFixture::success_server_ = nullptr;
131+
std::shared_ptr<RemoveInCollisionGoalsFailureService>
132+
RemoveInCollisionGoalsTestFixture::failure_server_ = nullptr;
111133
std::shared_ptr<BT::BehaviorTreeFactory> RemoveInCollisionGoalsTestFixture::factory_ = nullptr;
112134
std::shared_ptr<BT::Tree> RemoveInCollisionGoalsTestFixture::tree_ = nullptr;
113135

114-
TEST_F(RemoveInCollisionGoalsTestFixture, test_tick_remove_in_collision_goals)
136+
TEST_F(RemoveInCollisionGoalsTestFixture, test_tick_remove_in_collision_goals_success)
115137
{
116138
// create tree
117139
std::string xml_txt =
@@ -141,11 +163,13 @@ TEST_F(RemoveInCollisionGoalsTestFixture, test_tick_remove_in_collision_goals)
141163

142164
config_->blackboard->set("goals", poses);
143165

144-
// tick until node succeeds
145-
while (tree_->rootNode()->status() != BT::NodeStatus::SUCCESS) {
166+
// tick until node is not running
167+
tree_->rootNode()->executeTick();
168+
while (tree_->rootNode()->status() == BT::NodeStatus::RUNNING) {
146169
tree_->rootNode()->executeTick();
147170
}
148171

172+
EXPECT_EQ(tree_->rootNode()->status(), BT::NodeStatus::SUCCESS);
149173
// check that it removed the point in range
150174
std::vector<geometry_msgs::msg::PoseStamped> output_poses;
151175
EXPECT_TRUE(config_->blackboard->get("goals", output_poses));
@@ -156,6 +180,54 @@ TEST_F(RemoveInCollisionGoalsTestFixture, test_tick_remove_in_collision_goals)
156180
EXPECT_EQ(output_poses[2], poses[2]);
157181
}
158182

183+
TEST_F(RemoveInCollisionGoalsTestFixture, test_tick_remove_in_collision_goals_fail)
184+
{
185+
// create tree
186+
std::string xml_txt =
187+
R"(
188+
<root BTCPP_format="4">
189+
<BehaviorTree ID="MainTree">
190+
<RemoveInCollisionGoals service_name="/local_costmap/get_cost_local_costmap" input_goals="{goals}" output_goals="{goals}" cost_threshold="253"/>
191+
</BehaviorTree>
192+
</root>)";
193+
194+
tree_ = std::make_shared<BT::Tree>(factory_->createTreeFromText(xml_txt, config_->blackboard));
195+
196+
// create new goal and set it on blackboard
197+
std::vector<geometry_msgs::msg::PoseStamped> poses;
198+
poses.resize(4);
199+
poses[0].pose.position.x = 0.0;
200+
poses[0].pose.position.y = 0.0;
201+
202+
poses[1].pose.position.x = 0.5;
203+
poses[1].pose.position.y = 0.0;
204+
205+
poses[2].pose.position.x = 1.0;
206+
poses[2].pose.position.y = 0.0;
207+
208+
poses[3].pose.position.x = 2.0;
209+
poses[3].pose.position.y = 0.0;
210+
211+
config_->blackboard->set("goals", poses);
212+
213+
// tick until node is not running
214+
tree_->rootNode()->executeTick();
215+
while (tree_->rootNode()->status() == BT::NodeStatus::RUNNING) {
216+
tree_->rootNode()->executeTick();
217+
}
218+
219+
// check that it failed and returned the original goals
220+
EXPECT_EQ(tree_->rootNode()->status(), BT::NodeStatus::FAILURE);
221+
std::vector<geometry_msgs::msg::PoseStamped> output_poses;
222+
EXPECT_TRUE(config_->blackboard->get("goals", output_poses));
223+
224+
EXPECT_EQ(output_poses.size(), 4u);
225+
EXPECT_EQ(output_poses[0], poses[0]);
226+
EXPECT_EQ(output_poses[1], poses[1]);
227+
EXPECT_EQ(output_poses[2], poses[2]);
228+
EXPECT_EQ(output_poses[3], poses[3]);
229+
}
230+
159231
int main(int argc, char ** argv)
160232
{
161233
::testing::InitGoogleTest(&argc, argv);
@@ -164,17 +236,24 @@ int main(int argc, char ** argv)
164236
rclcpp::init(argc, argv);
165237

166238
// initialize service and spin on new thread
167-
RemoveInCollisionGoalsTestFixture::server_ =
168-
std::make_shared<RemoveInCollisionGoalsService>();
169-
std::thread server_thread([]() {
170-
rclcpp::spin(RemoveInCollisionGoalsTestFixture::server_);
239+
RemoveInCollisionGoalsTestFixture::success_server_ =
240+
std::make_shared<RemoveInCollisionGoalsSucessService>();
241+
std::thread success_server_thread([]() {
242+
rclcpp::spin(RemoveInCollisionGoalsTestFixture::success_server_);
243+
});
244+
245+
RemoveInCollisionGoalsTestFixture::failure_server_ =
246+
std::make_shared<RemoveInCollisionGoalsFailureService>();
247+
std::thread failure_server_thread([]() {
248+
rclcpp::spin(RemoveInCollisionGoalsTestFixture::failure_server_);
171249
});
172250

173251
int all_successful = RUN_ALL_TESTS();
174252

175253
// shutdown ROS
176254
rclcpp::shutdown();
177-
server_thread.join();
255+
success_server_thread.join();
256+
failure_server_thread.join();
178257

179258
return all_successful;
180259
}

nav2_costmap_2d/src/costmap_2d_ros.cpp

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -825,15 +825,14 @@ void Costmap2DROS::getCostsCallback(
825825
unsigned int mx, my;
826826

827827
Costmap2D * costmap = layered_costmap_->getCostmap();
828-
828+
response->success = true;
829829
for (const auto & pose : request->poses) {
830830
geometry_msgs::msg::PoseStamped pose_transformed;
831-
transformPoseToGlobalFrame(pose, pose_transformed);
832-
bool in_bounds = costmap->worldToMap(
833-
pose_transformed.pose.position.x,
834-
pose_transformed.pose.position.y, mx, my);
835-
836-
if (!in_bounds) {
831+
if (!transformPoseToGlobalFrame(pose, pose_transformed)) {
832+
RCLCPP_ERROR(
833+
get_logger(), "Failed to transform, cannot get cost for pose (%.2f, %.2f)",
834+
pose.pose.position.x, pose.pose.position.y);
835+
response->success = false;
837836
response->costs.push_back(NO_INFORMATION);
838837
continue;
839838
}
@@ -857,6 +856,15 @@ void Costmap2DROS::getCostsCallback(
857856
pose_transformed.pose.position.x,
858857
pose_transformed.pose.position.y);
859858

859+
bool in_bounds = costmap->worldToMap(
860+
pose_transformed.pose.position.x,
861+
pose_transformed.pose.position.y, mx, my);
862+
863+
if (!in_bounds) {
864+
response->success = false;
865+
response->costs.push_back(LETHAL_OBSTACLE);
866+
continue;
867+
}
860868
// Get the cost at the map coordinates
861869
response->costs.push_back(static_cast<float>(costmap->getCost(mx, my)));
862870
}

nav2_msgs/srv/GetCosts.srv

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,5 @@
33
bool use_footprint
44
geometry_msgs/PoseStamped[] poses
55
---
6-
float32[] costs
6+
float32[] costs
7+
bool success

0 commit comments

Comments
 (0)