Skip to content

Commit e0334ea

Browse files
redvinaaturtlewizard73
authored andcommitted
Add doors to distance remaining
1 parent 93cf99b commit e0334ea

4 files changed

Lines changed: 40 additions & 2 deletions

File tree

nav2_bt_navigator/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ find_package(rclcpp_lifecycle REQUIRED)
99
find_package(rclcpp_components REQUIRED)
1010
find_package(std_msgs REQUIRED)
1111
find_package(geometry_msgs REQUIRED)
12+
find_package(service_robot_msgs REQUIRED)
1213
find_package(nav2_behavior_tree REQUIRED)
1314
find_package(nav_msgs REQUIRED)
1415
find_package(nav2_msgs REQUIRED)
@@ -40,6 +41,7 @@ set(dependencies
4041
rclcpp_components
4142
std_msgs
4243
geometry_msgs
44+
service_robot_msgs
4345
nav2_behavior_tree
4446
nav_msgs
4547
nav2_msgs

nav2_bt_navigator/include/nav2_bt_navigator/navigators/navigate_to_pose.hpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,12 @@
1717

1818
#include <string>
1919
#include <vector>
20+
#include <tuple>
2021
#include <memory>
2122
#include "rclcpp/rclcpp.hpp"
2223
#include "rclcpp_action/rclcpp_action.hpp"
2324
#include "geometry_msgs/msg/pose_stamped.hpp"
25+
#include "service_robot_msgs/msg/door.hpp"
2426
#include "nav2_core/behavior_tree_navigator.hpp"
2527
#include "nav2_msgs/action/navigate_to_pose.hpp"
2628
#include "nav2_util/geometry_utils.hpp"
@@ -31,6 +33,9 @@
3133
namespace nav2_bt_navigator
3234
{
3335

36+
using Door = service_robot_msgs::msg::Door;
37+
using Direction = uint16_t;
38+
3439
/**
3540
* @class NavigateToPoseNavigator
3641
* @brief A navigator for navigating to a specified pose
@@ -126,6 +131,7 @@ class NavigateToPoseNavigator
126131

127132
std::string goal_blackboard_id_;
128133
std::string path_blackboard_id_;
134+
std::string doors_list_blackboard_id_;
129135

130136
// Odometry smoother object
131137
std::shared_ptr<nav2_util::OdomSmoother> odom_smoother_;
@@ -134,6 +140,8 @@ class NavigateToPoseNavigator
134140
double avg_linear_vel_;
135141
// Robot's angular velocity (to calculate time remaining, if set)
136142
double avg_angular_vel_;
143+
// Expected time to cross door, used to calculate remaining time
144+
double time_to_cross_door_;
137145
};
138146

139147
} // namespace nav2_bt_navigator

nav2_bt_navigator/package.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
<build_depend>behaviortree_cpp_v3</build_depend>
2121
<build_depend>std_msgs</build_depend>
2222
<build_depend>geometry_msgs</build_depend>
23+
<build_depend>service_robot_msgs</build_depend>
2324
<build_depend>std_srvs</build_depend>
2425
<build_depend>nav2_util</build_depend>
2526
<build_depend>pluginlib</build_depend>
@@ -35,6 +36,7 @@
3536
<exec_depend>std_msgs</exec_depend>
3637
<exec_depend>nav2_util</exec_depend>
3738
<exec_depend>geometry_msgs</exec_depend>
39+
<exec_depend>service_robot_msgs</exec_depend>
3840
<exec_depend>pluginlib</exec_depend>
3941
<exec_depend>nav2_core</exec_depend>
4042

nav2_bt_navigator/src/navigators/navigate_to_pose.cpp

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
// limitations under the License.
1414

1515
#include <vector>
16+
#include <tuple>
1617
#include <string>
1718
#include <memory>
1819
#include <limits>
@@ -43,6 +44,18 @@ NavigateToPoseNavigator::configure(
4344

4445
path_blackboard_id_ = node->get_parameter("path_blackboard_id").as_string();
4546

47+
if (!node->has_parameter("doors_list_blackboard_id")) {
48+
node->declare_parameter("doors_list_blackboard_id", std::string("doors_list"));
49+
}
50+
51+
doors_list_blackboard_id_ = node->get_parameter("doors_list_blackboard_id").as_string();
52+
53+
if (!node->has_parameter("time_to_cross_door")) {
54+
node->declare_parameter("time_to_cross_door", 10.0);
55+
}
56+
57+
time_to_cross_door_ = node->get_parameter("time_to_cross_door").as_double();
58+
4659
if (!node->has_parameter("average_linear_speed")) {
4760
node->declare_parameter("average_linear_speed", 0.0);
4861
}
@@ -205,10 +218,23 @@ NavigateToPoseNavigator::onLoop()
205218
rclcpp::Duration::from_seconds(distance_remaining / std::abs(current_linear_speed));
206219
}
207220

221+
// If doors_lists is set, add doors to time remaining
222+
try {
223+
auto doors_list = blackboard->get<std::vector<std::tuple<Door, Direction>>>(
224+
"doors_list");
225+
estimated_time_remaining = rclcpp::Duration::from_seconds(
226+
estimated_time_remaining.seconds() +
227+
doors_list.size() * time_to_cross_door_);
228+
} catch (BT::RuntimeError &) {
229+
RCLCPP_DEBUG(
230+
logger_, "Doors list not found in blackboard. Doors will not be added to time remaining");
231+
}
232+
208233
feedback_msg->distance_remaining = distance_remaining;
209234
feedback_msg->estimated_time_remaining = estimated_time_remaining;
210-
} catch (...) {
211-
// Ignore
235+
} catch (std::exception & e) {
236+
RCLCPP_ERROR(
237+
logger_, "Exception caught while calculating distance and time remaining: %s", e.what());
212238
}
213239

214240
int recovery_count = 0;

0 commit comments

Comments
 (0)