Skip to content

Commit a1eed42

Browse files
tonynajjarjosephduchesne
authored andcommitted
PoseStamped vector specialization (ros-navigation#4607)
* PoseStamped vector specialization Signed-off-by: Tony Najjar <tony.najjar.1997@gmail.com> * merge master Signed-off-by: Tony Najjar <tony.najjar.1997@gmail.com> * add path Signed-off-by: Tony Najjar <tony.najjar.1997@gmail.com> * fix size check Signed-off-by: Tony Najjar <tony.najjar.1997@gmail.com> * fix test Signed-off-by: Tony Najjar <tony.najjar.1997@gmail.com> * Revert "fix test" This reverts commit 51f54eb. * fix test Signed-off-by: Tony Najjar <tony.najjar.1997@gmail.com> --------- Signed-off-by: Tony Najjar <tony.najjar.1997@gmail.com> Signed-off-by: Joseph Duchesne <josephgeek@gmail.com>
1 parent 5af1784 commit a1eed42

23 files changed

+206
-12
lines changed

nav2_behavior_tree/include/nav2_behavior_tree/bt_utils.hpp

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,15 @@
1717

1818
#include <string>
1919
#include <set>
20+
#include <vector>
2021

2122
#include "rclcpp/time.hpp"
2223
#include "rclcpp/node.hpp"
2324
#include "behaviortree_cpp/behavior_tree.h"
2425
#include "geometry_msgs/msg/point.hpp"
2526
#include "geometry_msgs/msg/quaternion.hpp"
2627
#include "geometry_msgs/msg/pose_stamped.hpp"
28+
#include "nav_msgs/msg/path.hpp"
2729

2830
namespace BT
2931
{
@@ -102,6 +104,70 @@ inline geometry_msgs::msg::PoseStamped convertFromString(const StringView key)
102104
}
103105
}
104106

107+
/**
108+
* @brief Parse XML string to std::vector<geometry_msgs::msg::PoseStamped>
109+
* @param key XML string
110+
* @return std::vector<geometry_msgs::msg::PoseStamped>
111+
*/
112+
template<>
113+
inline std::vector<geometry_msgs::msg::PoseStamped> convertFromString(const StringView key)
114+
{
115+
// 9 real numbers separated by semicolons
116+
auto parts = BT::splitString(key, ';');
117+
if (parts.size() % 9 != 0) {
118+
throw std::runtime_error("invalid number of fields for std::vector<PoseStamped> attribute)");
119+
} else {
120+
std::vector<geometry_msgs::msg::PoseStamped> poses;
121+
for (size_t i = 0; i < parts.size(); i += 9) {
122+
geometry_msgs::msg::PoseStamped pose_stamped;
123+
pose_stamped.header.stamp = rclcpp::Time(BT::convertFromString<int64_t>(parts[i]));
124+
pose_stamped.header.frame_id = BT::convertFromString<std::string>(parts[i + 1]);
125+
pose_stamped.pose.position.x = BT::convertFromString<double>(parts[i + 2]);
126+
pose_stamped.pose.position.y = BT::convertFromString<double>(parts[i + 3]);
127+
pose_stamped.pose.position.z = BT::convertFromString<double>(parts[i + 4]);
128+
pose_stamped.pose.orientation.x = BT::convertFromString<double>(parts[i + 5]);
129+
pose_stamped.pose.orientation.y = BT::convertFromString<double>(parts[i + 6]);
130+
pose_stamped.pose.orientation.z = BT::convertFromString<double>(parts[i + 7]);
131+
pose_stamped.pose.orientation.w = BT::convertFromString<double>(parts[i + 8]);
132+
poses.push_back(pose_stamped);
133+
}
134+
return poses;
135+
}
136+
}
137+
138+
/**
139+
* @brief Parse XML string to nav_msgs::msg::Path
140+
* @param key XML string
141+
* @return nav_msgs::msg::Path
142+
*/
143+
template<>
144+
inline nav_msgs::msg::Path convertFromString(const StringView key)
145+
{
146+
// 9 real numbers separated by semicolons
147+
auto parts = BT::splitString(key, ';');
148+
if ((parts.size() - 2) % 9 != 0) {
149+
throw std::runtime_error("invalid number of fields for Path attribute)");
150+
} else {
151+
nav_msgs::msg::Path path;
152+
path.header.stamp = rclcpp::Time(BT::convertFromString<int64_t>(parts[0]));
153+
path.header.frame_id = BT::convertFromString<std::string>(parts[1]);
154+
for (size_t i = 2; i < parts.size(); i += 9) {
155+
geometry_msgs::msg::PoseStamped pose_stamped;
156+
path.header.stamp = rclcpp::Time(BT::convertFromString<int64_t>(parts[i]));
157+
pose_stamped.header.frame_id = BT::convertFromString<std::string>(parts[i + 1]);
158+
pose_stamped.pose.position.x = BT::convertFromString<double>(parts[i + 2]);
159+
pose_stamped.pose.position.y = BT::convertFromString<double>(parts[i + 3]);
160+
pose_stamped.pose.position.z = BT::convertFromString<double>(parts[i + 4]);
161+
pose_stamped.pose.orientation.x = BT::convertFromString<double>(parts[i + 5]);
162+
pose_stamped.pose.orientation.y = BT::convertFromString<double>(parts[i + 6]);
163+
pose_stamped.pose.orientation.z = BT::convertFromString<double>(parts[i + 7]);
164+
pose_stamped.pose.orientation.w = BT::convertFromString<double>(parts[i + 8]);
165+
path.poses.push_back(pose_stamped);
166+
}
167+
return path;
168+
}
169+
}
170+
105171
/**
106172
* @brief Parse XML string to std::chrono::milliseconds
107173
* @param key XML string

nav2_behavior_tree/include/nav2_behavior_tree/plugins/action/remove_passed_goals_action.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
#include "nav2_util/geometry_utils.hpp"
2424
#include "nav2_util/robot_utils.hpp"
2525
#include "behaviortree_cpp/action_node.h"
26+
#include "nav2_behavior_tree/bt_utils.hpp"
2627

2728
namespace nav2_behavior_tree
2829
{

nav2_behavior_tree/include/nav2_behavior_tree/plugins/condition/distance_traveled_condition.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
#include "rclcpp/rclcpp.hpp"
2525
#include "geometry_msgs/msg/pose_stamped.hpp"
2626
#include "tf2_ros/buffer.h"
27+
#include "nav2_behavior_tree/bt_utils.hpp"
2728

2829
namespace nav2_behavior_tree
2930
{

nav2_behavior_tree/include/nav2_behavior_tree/plugins/condition/globally_updated_goal_condition.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
#include "behaviortree_cpp/condition_node.h"
2424
#include "geometry_msgs/msg/pose_stamped.hpp"
25+
#include "nav2_behavior_tree/bt_utils.hpp"
2526

2627

2728
namespace nav2_behavior_tree

nav2_behavior_tree/include/nav2_behavior_tree/plugins/condition/goal_reached_condition.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#include "rclcpp/rclcpp.hpp"
2222
#include "behaviortree_cpp/condition_node.h"
2323
#include "tf2_ros/buffer.h"
24+
#include "nav2_behavior_tree/bt_utils.hpp"
2425

2526
namespace nav2_behavior_tree
2627
{

nav2_behavior_tree/include/nav2_behavior_tree/plugins/condition/goal_updated_condition.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
#include "behaviortree_cpp/condition_node.h"
2222
#include "geometry_msgs/msg/pose_stamped.hpp"
23+
#include "nav2_behavior_tree/bt_utils.hpp"
2324

2425
namespace nav2_behavior_tree
2526
{

nav2_behavior_tree/include/nav2_behavior_tree/plugins/condition/initial_pose_received_condition.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
#include <string>
1919
#include "behaviortree_cpp/behavior_tree.h"
20+
#include "nav2_behavior_tree/bt_utils.hpp"
2021

2122
namespace nav2_behavior_tree
2223
{

nav2_behavior_tree/include/nav2_behavior_tree/plugins/condition/path_expiring_timer_condition.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include "rclcpp/rclcpp.hpp"
2121
#include "behaviortree_cpp/condition_node.h"
2222
#include "nav_msgs/msg/path.hpp"
23+
#include "nav2_behavior_tree/bt_utils.hpp"
2324

2425
namespace nav2_behavior_tree
2526
{

nav2_behavior_tree/include/nav2_behavior_tree/plugins/decorator/distance_controller.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
#include "tf2_ros/buffer.h"
2424

2525
#include "behaviortree_cpp/decorator_node.h"
26+
#include "nav2_behavior_tree/bt_utils.hpp"
2627

2728
namespace nav2_behavior_tree
2829
{

nav2_behavior_tree/include/nav2_behavior_tree/plugins/decorator/goal_updated_controller.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
#include "rclcpp/rclcpp.hpp"
2525
#include "geometry_msgs/msg/pose_stamped.hpp"
26+
#include "nav2_behavior_tree/bt_utils.hpp"
2627

2728
namespace nav2_behavior_tree
2829
{

0 commit comments

Comments
 (0)