Skip to content

Commit d550a2a

Browse files
committed
Use transformPoseInTargetFrame in all controllers
Signed-off-by: mini-1235 <mauricepurnawan@gmail.com>
1 parent 39ae1b4 commit d550a2a

File tree

6 files changed

+21
-83
lines changed

6 files changed

+21
-83
lines changed

‎nav2_mppi_controller/include/nav2_mppi_controller/tools/path_handler.hpp‎

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -98,17 +98,6 @@ class PathHandler
9898
geometry_msgs::msg::PoseStamped getTransformedGoal(const builtin_interfaces::msg::Time & stamp);
9999

100100
protected:
101-
/**
102-
* @brief Transform a pose to another frame
103-
* @param frame Frame to transform to
104-
* @param in_pose Input pose
105-
* @param out_pose Output pose
106-
* @return Bool if successful
107-
*/
108-
bool transformPose(
109-
const std::string & frame, const geometry_msgs::msg::PoseStamped & in_pose,
110-
geometry_msgs::msg::PoseStamped & out_pose) const;
111-
112101
/**
113102
* @brief Get largest dimension of costmap (radially)
114103
* @return Max distance from center of costmap to edge

‎nav2_mppi_controller/src/path_handler.cpp‎

Lines changed: 9 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include "nav2_mppi_controller/tools/path_handler.hpp"
1818
#include "nav2_mppi_controller/tools/utils.hpp"
1919
#include "nav2_costmap_2d/costmap_2d_ros.hpp"
20+
#include "nav2_util/robot_utils.hpp"
2021

2122
namespace mppi
2223
{
@@ -85,7 +86,8 @@ PathHandler::getGlobalPlanConsideringBoundsInCostmapFrame(
8586
geometry_msgs::msg::PoseStamped costmap_plan_pose;
8687
global_plan_pose->header.stamp = global_pose.header.stamp;
8788
global_plan_pose->header.frame_id = global_plan_.header.frame_id;
88-
transformPose(costmap_->getGlobalFrameID(), *global_plan_pose, costmap_plan_pose);
89+
nav2_util::transformPoseInTargetFrame(*global_plan_pose, costmap_plan_pose, *tf_buffer_,
90+
costmap_->getGlobalFrameID(), transform_tolerance_);
8991

9092
// Check if pose is inside the costmap
9193
if (!costmap_->getCostmap()->worldToMap(
@@ -109,7 +111,9 @@ geometry_msgs::msg::PoseStamped PathHandler::transformToGlobalPlanFrame(
109111
}
110112

111113
geometry_msgs::msg::PoseStamped robot_pose;
112-
if (!transformPose(global_plan_up_to_inversion_.header.frame_id, pose, robot_pose)) {
114+
if (!nav2_util::transformPoseInTargetFrame(pose, robot_pose, *tf_buffer_,
115+
global_plan_up_to_inversion_.header.frame_id, transform_tolerance_))
116+
{
113117
throw nav2_core::ControllerTFError(
114118
"Unable to transform robot pose into global plan's frame");
115119
}
@@ -142,27 +146,6 @@ nav_msgs::msg::Path PathHandler::transformPath(
142146
return transformed_plan;
143147
}
144148

145-
bool PathHandler::transformPose(
146-
const std::string & frame, const geometry_msgs::msg::PoseStamped & in_pose,
147-
geometry_msgs::msg::PoseStamped & out_pose) const
148-
{
149-
if (in_pose.header.frame_id == frame) {
150-
out_pose = in_pose;
151-
return true;
152-
}
153-
154-
try {
155-
tf_buffer_->transform(
156-
in_pose, out_pose, frame,
157-
tf2::durationFromSec(transform_tolerance_));
158-
out_pose.header.frame_id = frame;
159-
return true;
160-
} catch (tf2::TransformException & ex) {
161-
RCLCPP_ERROR(logger_, "Exception in transformPose: %s", ex.what());
162-
}
163-
return false;
164-
}
165-
166149
double PathHandler::getMaxCostmapDist()
167150
{
168151
const auto & costmap = costmap_->getCostmap();
@@ -196,7 +179,9 @@ geometry_msgs::msg::PoseStamped PathHandler::getTransformedGoal(
196179
throw nav2_core::ControllerTFError("Goal pose has an empty frame_id");
197180
}
198181
geometry_msgs::msg::PoseStamped transformed_goal;
199-
if (!transformPose(costmap_->getGlobalFrameID(), goal, transformed_goal)) {
182+
if (!nav2_util::transformPoseInTargetFrame(goal, transformed_goal, *tf_buffer_,
183+
costmap_->getGlobalFrameID(), transform_tolerance_))
184+
{
200185
throw nav2_core::ControllerTFError("Unable to transform goal pose into costmap frame");
201186
}
202187
return transformed_goal;

‎nav2_mppi_controller/test/path_handler_test.cpp‎

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,6 @@ class PathHandlerWrapper : public PathHandler
4646
return getGlobalPlanConsideringBoundsInCostmapFrame(pose);
4747
}
4848

49-
bool transformPoseWrapper(
50-
const std::string & frame, const geometry_msgs::msg::PoseStamped & in_pose,
51-
geometry_msgs::msg::PoseStamped & out_pose) const
52-
{
53-
return transformPose(frame, in_pose, out_pose);
54-
}
55-
5649
geometry_msgs::msg::PoseStamped transformToGlobalPlanFrameWrapper(
5750
const geometry_msgs::msg::PoseStamped & pose)
5851
{
@@ -180,12 +173,10 @@ TEST(PathHandlerTests, TestTransforms)
180173
path.poses[i].header.frame_id = "map";
181174
}
182175

183-
geometry_msgs::msg::PoseStamped robot_pose, output_pose;
176+
geometry_msgs::msg::PoseStamped robot_pose;
184177
robot_pose.header.frame_id = "odom";
185178
robot_pose.pose.position.x = 2.5;
186179

187-
EXPECT_TRUE(handler.transformPoseWrapper("map", robot_pose, output_pose));
188-
EXPECT_EQ(output_pose.pose.position.x, 2.5);
189180

190181
EXPECT_THROW(handler.transformToGlobalPlanFrameWrapper(robot_pose), std::runtime_error);
191182
handler.setPath(path);

‎nav2_regulated_pure_pursuit_controller/include/nav2_regulated_pure_pursuit_controller/path_handler.hpp‎

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ class PathHandler
4343
* @brief Constructor for nav2_regulated_pure_pursuit_controller::PathHandler
4444
*/
4545
PathHandler(
46-
tf2::Duration transform_tolerance,
46+
double transform_tolerance,
4747
std::shared_ptr<tf2_ros::Buffer> tf,
4848
std::shared_ptr<nav2_costmap_2d::Costmap2DROS> costmap_ros);
4949

@@ -65,18 +65,6 @@ class PathHandler
6565
const geometry_msgs::msg::PoseStamped & pose,
6666
double max_robot_pose_search_dist, bool reject_unit_path = false);
6767

68-
/**
69-
* @brief Transform a pose to another frame.
70-
* @param frame Frame ID to transform to
71-
* @param in_pose Pose input to transform
72-
* @param out_pose transformed output
73-
* @return bool if successful
74-
*/
75-
bool transformPose(
76-
const std::string frame,
77-
const geometry_msgs::msg::PoseStamped & in_pose,
78-
geometry_msgs::msg::PoseStamped & out_pose) const;
79-
8068
void setPlan(const nav_msgs::msg::Path & path) {global_plan_ = path;}
8169

8270
nav_msgs::msg::Path getPlan() {return global_plan_;}
@@ -89,7 +77,7 @@ class PathHandler
8977
double getCostmapMaxExtent() const;
9078

9179
rclcpp::Logger logger_ {rclcpp::get_logger("RPPPathHandler")};
92-
tf2::Duration transform_tolerance_;
80+
double transform_tolerance_;
9381
std::shared_ptr<tf2_ros::Buffer> tf_;
9482
std::shared_ptr<nav2_costmap_2d::Costmap2DROS> costmap_ros_;
9583
nav_msgs::msg::Path global_plan_;

‎nav2_regulated_pure_pursuit_controller/src/path_handler.cpp‎

Lines changed: 8 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,15 @@
2323
#include "nav2_core/controller_exceptions.hpp"
2424
#include "nav2_ros_common/node_utils.hpp"
2525
#include "nav2_util/geometry_utils.hpp"
26+
#include "nav2_util/robot_utils.hpp"
2627

2728
namespace nav2_regulated_pure_pursuit_controller
2829
{
2930

3031
using nav2_util::geometry_utils::euclidean_distance;
3132

3233
PathHandler::PathHandler(
33-
tf2::Duration transform_tolerance,
34+
double transform_tolerance,
3435
std::shared_ptr<tf2_ros::Buffer> tf,
3536
std::shared_ptr<nav2_costmap_2d::Costmap2DROS> costmap_ros)
3637
: transform_tolerance_(transform_tolerance), tf_(tf), costmap_ros_(costmap_ros)
@@ -60,7 +61,9 @@ nav_msgs::msg::Path PathHandler::transformGlobalPlan(
6061

6162
// let's get the pose of the robot in the frame of the plan
6263
geometry_msgs::msg::PoseStamped robot_pose;
63-
if (!transformPose(global_plan_.header.frame_id, pose, robot_pose)) {
64+
if (!nav2_util::transformPoseInTargetFrame(pose, robot_pose, *tf_, global_plan_.header.frame_id,
65+
transform_tolerance_))
66+
{
6467
throw nav2_core::ControllerTFError("Unable to transform robot pose into global plan's frame");
6568
}
6669

@@ -101,7 +104,9 @@ nav_msgs::msg::Path PathHandler::transformGlobalPlan(
101104
stamped_pose.header.frame_id = global_plan_.header.frame_id;
102105
stamped_pose.header.stamp = robot_pose.header.stamp;
103106
stamped_pose.pose = global_plan_pose.pose;
104-
if (!transformPose(costmap_ros_->getBaseFrameID(), stamped_pose, transformed_pose)) {
107+
if (!nav2_util::transformPoseInTargetFrame(stamped_pose, transformed_pose, *tf_,
108+
costmap_ros_->getBaseFrameID(), transform_tolerance_))
109+
{
105110
throw nav2_core::ControllerTFError("Unable to transform plan pose into local frame");
106111
}
107112
transformed_pose.pose.position.z = 0.0;
@@ -128,24 +133,4 @@ nav_msgs::msg::Path PathHandler::transformGlobalPlan(
128133
return transformed_plan;
129134
}
130135

131-
bool PathHandler::transformPose(
132-
const std::string frame,
133-
const geometry_msgs::msg::PoseStamped & in_pose,
134-
geometry_msgs::msg::PoseStamped & out_pose) const
135-
{
136-
if (in_pose.header.frame_id == frame) {
137-
out_pose = in_pose;
138-
return true;
139-
}
140-
141-
try {
142-
tf_->transform(in_pose, out_pose, frame, transform_tolerance_);
143-
out_pose.header.frame_id = frame;
144-
return true;
145-
} catch (tf2::TransformException & ex) {
146-
RCLCPP_ERROR(logger_, "Exception in transformPose: %s", ex.what());
147-
}
148-
return false;
149-
}
150-
151136
} // namespace nav2_regulated_pure_pursuit_controller

‎nav2_regulated_pure_pursuit_controller/src/regulated_pure_pursuit_controller.cpp‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ void RegulatedPurePursuitController::configure(
6161

6262
// Handles global path transformations
6363
path_handler_ = std::make_unique<PathHandler>(
64-
tf2::durationFromSec(params_->transform_tolerance), tf_, costmap_ros_);
64+
params_->transform_tolerance, tf_, costmap_ros_);
6565

6666
// Checks for imminent collisions
6767
collision_checker_ = std::make_unique<CollisionChecker>(node, costmap_ros_, params_);

0 commit comments

Comments
 (0)