Skip to content

Commit edddc8d

Browse files
committed
added missing transform of start and target pose
1 parent 8149d93 commit edddc8d

4 files changed

Lines changed: 54 additions & 23 deletions

File tree

cvp_mesh_planner/src/cvp_mesh_planner.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,15 +65,17 @@ uint32_t CVPMeshPlanner::makePlan(const geometry_msgs::msg::PoseStamped& start,
6565
std::vector<geometry_msgs::msg::PoseStamped>& plan, double& cost,
6666
std::string& message)
6767
{
68+
// This planner requires start and goal pose to be in map frame
69+
const geometry_msgs::msg::PoseStamped start_in_map = mesh_map_->transformToMapFrame(start);
70+
const geometry_msgs::msg::PoseStamped goal_in_map = mesh_map_->transformToMapFrame(goal);
71+
6872
const auto mesh = mesh_map_->mesh();
6973
std::list<std::pair<mesh_map::Vector, lvr2::FaceHandle>> path;
7074

71-
// mesh_map->combineVertexCosts(); // TODO should be outside the planner
72-
7375
RCLCPP_DEBUG_STREAM(node_->get_logger(), "start wave front propagation.");
7476

75-
mesh_map::Vector goal_vec = mesh_map::toVector(goal.pose.position);
76-
mesh_map::Vector start_vec = mesh_map::toVector(start.pose.position);
77+
mesh_map::Vector start_vec = mesh_map::toVector(start_in_map.pose.position);
78+
mesh_map::Vector goal_vec = mesh_map::toVector(goal_in_map.pose.position);
7779

7880
const uint32_t outcome = waveFrontPropagation(goal_vec, start_vec, path, message);
7981

dijkstra_mesh_planner/src/dijkstra_mesh_planner.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,17 @@ uint32_t DijkstraMeshPlanner::makePlan(const geometry_msgs::msg::PoseStamped& st
5656
double tolerance, std::vector<geometry_msgs::msg::PoseStamped>& plan, double& cost,
5757
std::string& message)
5858
{
59+
// This planner requires start and goal pose to be in map frame
60+
const geometry_msgs::msg::PoseStamped start_in_map = mesh_map_->transformToMapFrame(start);
61+
const geometry_msgs::msg::PoseStamped goal_in_map = mesh_map_->transformToMapFrame(goal);
62+
5963
const auto mesh = mesh_map_->mesh();
6064

6165
std::list<lvr2::VertexHandle> path;
6266
RCLCPP_INFO(node_->get_logger(), "start dijkstra mesh planner.");
6367

64-
mesh_map::Vector goal_vec = mesh_map::toVector(goal.pose.position);
65-
mesh_map::Vector start_vec = mesh_map::toVector(start.pose.position);
68+
mesh_map::Vector start_vec = mesh_map::toVector(start_in_map.pose.position);
69+
mesh_map::Vector goal_vec = mesh_map::toVector(goal_in_map.pose.position);
6670

6771
// call dijkstra with the goal pose as seed / start vertex
6872
uint32_t outcome = dijkstra(goal_vec, start_vec, path);

mesh_map/include/mesh_map/mesh_map.h

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@
4242
#include <mutex>
4343
#include <tuple>
4444
#include <unordered_map>
45-
#include <geometry_msgs/msg/point.hpp>
4645
#include <memory>
4746

4847
#include <mesh_map/abstract_layer.h>
@@ -57,6 +56,9 @@
5756
#include <visualization_msgs/msg/marker.hpp>
5857
#include <visualization_msgs/msg/marker_array.hpp>
5958
#include <std_srvs/srv/trigger.hpp>
59+
#include <geometry_msgs/msg/point.hpp>
60+
#include <geometry_msgs/msg/transform_stamped.hpp>
61+
#include <geometry_msgs/msg/pose_stamped.hpp>
6062

6163
#include <lvr2/algorithm/raycasting/RaycasterBase.hpp>
6264
#include <lvr2/geometry/BaseVector.hpp>
@@ -254,6 +256,12 @@ class MeshMap
254256
*/
255257
bool resetLayers();
256258

259+
/**
260+
* @brief Transforms the given transform to the global frame of the MeshMap
261+
*/
262+
geometry_msgs::msg::PoseStamped transformToMapFrame(
263+
const geometry_msgs::msg::PoseStamped& input_pose) const;
264+
257265
/**
258266
* @brief Returns the stored vector map
259267
*/
@@ -289,7 +297,7 @@ class MeshMap
289297
/**
290298
* @brief Returns the map frame / coordinate system id
291299
*/
292-
const std::string& mapFrame()
300+
const std::string& mapFrame() const
293301
{
294302
return global_frame;
295303
}

mesh_map/src/mesh_map.cpp

Lines changed: 32 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -41,43 +41,42 @@
4141
#include <boost/uuid/uuid_io.hpp>
4242
#include <optional>
4343
#include <memory>
44-
4544
#include <functional>
46-
#include <geometry_msgs/msg/point_stamped.hpp>
47-
#include <geometry_msgs/msg/vector3.hpp>
48-
#include <visualization_msgs/msg/marker_array.hpp>
45+
#include <mutex>
46+
#include <filesystem>
47+
#include <assimp/Importer.hpp>
48+
#include <assimp/postprocess.h>
49+
#include <assimp/scene.h>
4950

5051
#include <lvr2/geometry/Normal.hpp>
5152
#include <lvr2/algorithm/GeometryAlgorithms.hpp>
5253
#include <lvr2/algorithm/NormalAlgorithms.hpp>
5354
#include <lvr2/io/deprecated/hdf5/MeshIO.hpp>
5455
#include <lvr2/types/MeshBuffer.hpp>
55-
5656
// Mesh structure for fast surface traversal
5757
#include <lvr2/geometry/PMPMesh.hpp>
58-
5958
// Raycaster implementations
6059
#ifdef LVR2_USE_EMBREE
6160
#include <lvr2/algorithm/raycasting/EmbreeRaycaster.hpp>
6261
#else
6362
#include <lvr2/algorithm/raycasting/BVHRaycaster.hpp>
6463
#endif
6564

65+
#include <rclcpp/rclcpp.hpp>
66+
#include <tf2_ros/buffer.h>
67+
#include <tf2_geometry_msgs/tf2_geometry_msgs.hpp>
68+
#include <geometry_msgs/msg/point_stamped.hpp>
69+
#include <geometry_msgs/msg/transform_stamped.hpp>
70+
#include <geometry_msgs/msg/vector3.hpp>
71+
#include <visualization_msgs/msg/marker.hpp>
72+
#include <visualization_msgs/msg/marker_array.hpp>
73+
6674
#include <mesh_map/abstract_layer.h>
6775
#include <mesh_map/mesh_map.h>
6876
#include <mesh_map/util.h>
6977
#include <mesh_map/timer.h>
7078
#include <mesh_msgs/msg/mesh_geometry_stamped.hpp>
7179
#include <mesh_msgs_conversions/conversions.h>
72-
#include <mutex>
73-
#include <rclcpp/rclcpp.hpp>
74-
#include <visualization_msgs/msg/marker.hpp>
75-
76-
#include <filesystem>
77-
78-
#include <assimp/Importer.hpp>
79-
#include <assimp/postprocess.h>
80-
#include <assimp/scene.h>
8180

8281
namespace fs = std::filesystem;
8382

@@ -1307,6 +1306,24 @@ bool MeshMap::resetLayers()
13071306
return true; // TODO implement
13081307
}
13091308

1309+
geometry_msgs::msg::PoseStamped MeshMap::transformToMapFrame(
1310+
const geometry_msgs::msg::PoseStamped& input_pose) const
1311+
{
1312+
if(input_pose.header.frame_id == mapFrame())
1313+
{
1314+
return input_pose;
1315+
}
1316+
1317+
// we shouldn't catch/ignore the error that comes from here, as it indicates a misconfiguration
1318+
const geometry_msgs::msg::TransformStamped Tim = tf_buffer.lookupTransform(
1319+
mapFrame(), input_pose.header.frame_id, input_pose.header.stamp);
1320+
1321+
geometry_msgs::msg::PoseStamped output_pose;
1322+
tf2::doTransform(input_pose, output_pose, Tim);
1323+
1324+
return output_pose;
1325+
}
1326+
13101327
void MeshMap::publishVertexCosts(const lvr2::VertexMap<float>& costs, const std::string& name, const rclcpp::Time& map_stamp)
13111328
{
13121329
layer_manager_.publish_cost_layer(costs, name, map_stamp);

0 commit comments

Comments
 (0)