24
24
#include " nav2_util/robot_utils.hpp"
25
25
#include " nav_msgs/msg/path.hpp"
26
26
#include " rclcpp/rclcpp.hpp"
27
- #include " tf2/LinearMath/Quaternion.h "
27
+ #include " tf2/LinearMath/Quaternion.hpp "
28
28
#include " tf2_ros/buffer.h"
29
29
#include " tf2_ros/create_timer_ros.h"
30
30
31
31
#include " nav2_behavior_tree/plugins/action/truncate_path_local_action.hpp"
32
32
33
- namespace nav2_behavior_tree
34
- {
33
+ namespace nav2_behavior_tree {
35
34
36
- TruncatePathLocal::TruncatePathLocal (
37
- const std::string & name,
38
- const BT::NodeConfiguration & conf)
39
- : BT::ActionNodeBase(name, conf)
40
- {
35
+ TruncatePathLocal::TruncatePathLocal (const std::string &name,
36
+ const BT::NodeConfiguration &conf)
37
+ : BT::ActionNodeBase(name, conf) {
41
38
tf_buffer_ =
42
- config ().blackboard ->template get <std::shared_ptr<tf2_ros::Buffer>>(
43
- " tf_buffer" );
39
+ config ().blackboard ->template get <std::shared_ptr<tf2_ros::Buffer>>(
40
+ " tf_buffer" );
44
41
}
45
42
46
- inline BT::NodeStatus TruncatePathLocal::tick ()
47
- {
43
+ inline BT::NodeStatus TruncatePathLocal::tick () {
48
44
setStatus (BT::NodeStatus::RUNNING);
49
45
50
46
double distance_forward, distance_backward;
@@ -76,70 +72,77 @@ inline BT::NodeStatus TruncatePathLocal::tick()
76
72
77
73
auto closest_pose_detection_end = path_.poses .end ();
78
74
if (path_pruning) {
79
- closest_pose_detection_end = nav2_util::geometry_utils::first_after_integrated_distance (
80
- closest_pose_detection_begin_, path_.poses .end (), max_robot_pose_search_dist);
75
+ closest_pose_detection_end =
76
+ nav2_util::geometry_utils::first_after_integrated_distance (
77
+ closest_pose_detection_begin_, path_.poses .end (),
78
+ max_robot_pose_search_dist);
81
79
}
82
80
83
81
// find the closest pose on the path
84
82
auto current_pose = nav2_util::geometry_utils::min_by (
85
- closest_pose_detection_begin_, closest_pose_detection_end,
86
- [&pose, angular_distance_weight](const geometry_msgs::msg::PoseStamped & ps) {
87
- return poseDistance (pose, ps, angular_distance_weight);
88
- });
83
+ closest_pose_detection_begin_, closest_pose_detection_end,
84
+ [&pose,
85
+ angular_distance_weight](const geometry_msgs::msg::PoseStamped &ps) {
86
+ return poseDistance (pose, ps, angular_distance_weight);
87
+ });
89
88
90
89
if (path_pruning) {
91
90
closest_pose_detection_begin_ = current_pose;
92
91
}
93
92
94
93
// expand forwards to extract desired length
95
- auto forward_pose_it = nav2_util::geometry_utils::first_after_integrated_distance (
96
- current_pose, path_.poses .end (), distance_forward);
94
+ auto forward_pose_it =
95
+ nav2_util::geometry_utils::first_after_integrated_distance (
96
+ current_pose, path_.poses .end (), distance_forward);
97
97
98
98
// expand backwards to extract desired length
99
- // Note: current_pose + 1 is used because reverse iterator points to a cell before it
100
- auto backward_pose_it = nav2_util::geometry_utils::first_after_integrated_distance (
101
- std::reverse_iterator (current_pose + 1 ), path_.poses .rend (), distance_backward);
99
+ // Note: current_pose + 1 is used because reverse iterator points to a cell
100
+ // before it
101
+ auto backward_pose_it =
102
+ nav2_util::geometry_utils::first_after_integrated_distance (
103
+ std::reverse_iterator (current_pose + 1 ), path_.poses .rend (),
104
+ distance_backward);
102
105
103
106
nav_msgs::msg::Path output_path;
104
107
output_path.header = path_.header ;
105
108
output_path.poses = std::vector<geometry_msgs::msg::PoseStamped>(
106
- backward_pose_it.base (), forward_pose_it);
109
+ backward_pose_it.base (), forward_pose_it);
107
110
setOutput (" output_path" , output_path);
108
111
109
112
return BT::NodeStatus::SUCCESS;
110
113
}
111
114
112
- inline bool TruncatePathLocal::getRobotPose (
113
- std::string path_frame_id, geometry_msgs::msg::PoseStamped & pose)
114
- {
115
+ inline bool
116
+ TruncatePathLocal::getRobotPose ( std::string path_frame_id,
117
+ geometry_msgs::msg::PoseStamped &pose) {
115
118
if (!getInput (" pose" , pose)) {
116
119
std::string robot_frame;
117
120
if (!getInput (" robot_frame" , robot_frame)) {
118
- RCLCPP_ERROR (
119
- config ().blackboard ->get <rclcpp::Node::SharedPtr>(" node" )->get_logger (),
120
- " Neither pose nor robot_frame specified for %s" , name ().c_str ());
121
+ RCLCPP_ERROR (config ()
122
+ .blackboard ->get <rclcpp::Node::SharedPtr>(" node" )
123
+ ->get_logger (),
124
+ " Neither pose nor robot_frame specified for %s" ,
125
+ name ().c_str ());
121
126
return false ;
122
127
}
123
128
double transform_tolerance;
124
129
getInput (" transform_tolerance" , transform_tolerance);
125
- if (!nav2_util::getCurrentPose (
126
- pose, *tf_buffer_, path_frame_id, robot_frame, transform_tolerance))
127
- {
128
- RCLCPP_WARN (
129
- config (). blackboard -> get <rclcpp::Node::SharedPtr>( " node " ) ->get_logger (),
130
- " Failed to lookup current robot pose for %s" , name ().c_str ());
130
+ if (!nav2_util::getCurrentPose (pose, *tf_buffer_, path_frame_id,
131
+ robot_frame, transform_tolerance)) {
132
+ RCLCPP_WARN ( config ()
133
+ . blackboard -> get <rclcpp::Node::SharedPtr>( " node " )
134
+ ->get_logger (),
135
+ " Failed to lookup current robot pose for %s" , name ().c_str ());
131
136
return false ;
132
137
}
133
138
}
134
139
return true ;
135
140
}
136
141
137
142
double
138
- TruncatePathLocal::poseDistance (
139
- const geometry_msgs::msg::PoseStamped & pose1,
140
- const geometry_msgs::msg::PoseStamped & pose2,
141
- const double angular_distance_weight)
142
- {
143
+ TruncatePathLocal::poseDistance (const geometry_msgs::msg::PoseStamped &pose1,
144
+ const geometry_msgs::msg::PoseStamped &pose2,
145
+ const double angular_distance_weight) {
143
146
double dx = pose1.pose .position .x - pose2.pose .position .x ;
144
147
double dy = pose1.pose .position .y - pose2.pose .position .y ;
145
148
// taking angular distance into account in addition to spatial distance
@@ -152,10 +155,10 @@ TruncatePathLocal::poseDistance(
152
155
return std::sqrt (dx * dx + dy * dy + da * da);
153
156
}
154
157
155
- } // namespace nav2_behavior_tree
158
+ } // namespace nav2_behavior_tree
156
159
157
160
#include " behaviortree_cpp/bt_factory.h"
158
161
BT_REGISTER_NODES (factory) {
159
162
factory.registerNodeType <nav2_behavior_tree::TruncatePathLocal>(
160
- " TruncatePathLocal" );
163
+ " TruncatePathLocal" );
161
164
}
0 commit comments