18 #include "nav2_util/robot_utils.hpp"
19 #include "geometry_msgs/msg/pose_stamped.hpp"
20 #include "nav2_ros_common/node_utils.hpp"
21 #include "nav2_ros_common/tf2_factories.hpp"
23 #include "nav2_behavior_tree/plugins/condition/are_poses_near_condition.hpp"
25 namespace nav2_behavior_tree
29 const std::string & condition_name,
30 const BT::NodeConfiguration & conf)
31 : BT::ConditionNode(condition_name, conf)
33 auto node = config().blackboard->get<nav2::LifecycleNode::SharedPtr>(
"node");
34 global_frame_ = BT::deconflictPortAndParamFrame<std::string>(
35 node,
"global_frame",
this);
40 node_ = config().blackboard->get<nav2::LifecycleNode::SharedPtr>(
"node");
41 tf_ = config().blackboard->get<nav2::TransformBuffer::SharedPtr>(
"tf_buffer");
42 node_->get_parameter(
"transform_tolerance", transform_tolerance_);
47 if (!BT::isStatusActive(status())) {
52 return BT::NodeStatus::SUCCESS;
54 return BT::NodeStatus::FAILURE;
59 geometry_msgs::msg::PoseStamped pose1, pose2;
61 getInput(
"ref_pose", pose1);
62 getInput(
"target_pose", pose2);
63 getInput(
"tolerance", tol);
65 if (pose1.header.frame_id != pose2.header.frame_id) {
66 if (!nav2_util::transformPoseInTargetFrame(
67 pose1, pose1, *tf_, global_frame_, transform_tolerance_) ||
68 !nav2_util::transformPoseInTargetFrame(
69 pose2, pose2, *tf_, global_frame_, transform_tolerance_))
71 RCLCPP_ERROR(node_->get_logger(),
"Failed to transform poses to the same frame");
76 double dx = pose1.pose.position.x - pose2.pose.position.x;
77 double dy = pose1.pose.position.y - pose2.pose.position.y;
78 return (dx * dx + dy * dy) <= (tol * tol);
83 #include "behaviortree_cpp/bt_factory.h"
84 BT_REGISTER_NODES(factory)
A BT::ConditionNode that returns SUCCESS when a specified goal is reached and FAILURE otherwise.
ArePosesNearCondition(const std::string &condition_name, const BT::NodeConfiguration &conf)
A constructor for nav2_behavior_tree::ArePosesNearCondition.
BT::NodeStatus tick() override
The main override required by a BT action.
bool arePosesNearby()
Checks if the current robot pose lies within a given distance from the goal.
void initialize()
Function to read parameters and initialize class variables.