Skip to content

Commit c89beaf

Browse files
authored
fix vec bug, added support for PoseWithCovariance (#24)
1 parent 9bb93fa commit c89beaf

File tree

2 files changed

+80
-2
lines changed

2 files changed

+80
-2
lines changed

cpp_test/test_ros_conversions.cpp

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,75 @@ TEST(ros_to_pose_vec, pose) {
148148
EXPECT_NEAR(v[0].qz, 0.0, 1e-6);
149149
}
150150

151+
TEST(ros_to_pose_vec, pose_stamped) {
152+
geometry_msgs::msg::PoseStamped p;
153+
p.pose.position.x = 1;
154+
p.pose.position.y = 2;
155+
p.pose.position.z = 3;
156+
p.pose.orientation.w = 1;
157+
p.pose.orientation.x = 0;
158+
p.pose.orientation.y = 0;
159+
p.pose.orientation.z = 0;
160+
161+
auto v = vortex::utils::ros_conversions::ros_to_pose_vec(p);
162+
163+
ASSERT_EQ(v.size(), 1);
164+
EXPECT_NEAR(v[0].x, 1.0, 1e-6);
165+
EXPECT_NEAR(v[0].y, 2.0, 1e-6);
166+
EXPECT_NEAR(v[0].z, 3.0, 1e-6);
167+
168+
EXPECT_NEAR(v[0].qw, 1.0, 1e-6);
169+
EXPECT_NEAR(v[0].qz, 0.0, 1e-6);
170+
EXPECT_NEAR(v[0].qz, 0.0, 1e-6);
171+
EXPECT_NEAR(v[0].qz, 0.0, 1e-6);
172+
}
173+
174+
TEST(ros_to_pose_vec, pose_with_covariance) {
175+
geometry_msgs::msg::PoseWithCovariance p;
176+
p.pose.position.x = 1;
177+
p.pose.position.y = 2;
178+
p.pose.position.z = 3;
179+
p.pose.orientation.w = 1;
180+
p.pose.orientation.x = 0;
181+
p.pose.orientation.y = 0;
182+
p.pose.orientation.z = 0;
183+
184+
auto v = vortex::utils::ros_conversions::ros_to_pose_vec(p);
185+
186+
ASSERT_EQ(v.size(), 1);
187+
EXPECT_NEAR(v[0].x, 1.0, 1e-6);
188+
EXPECT_NEAR(v[0].y, 2.0, 1e-6);
189+
EXPECT_NEAR(v[0].z, 3.0, 1e-6);
190+
191+
EXPECT_NEAR(v[0].qw, 1.0, 1e-6);
192+
EXPECT_NEAR(v[0].qz, 0.0, 1e-6);
193+
EXPECT_NEAR(v[0].qz, 0.0, 1e-6);
194+
EXPECT_NEAR(v[0].qz, 0.0, 1e-6);
195+
}
196+
197+
TEST(ros_to_pose_vec, pose_with_covariance_stamped) {
198+
geometry_msgs::msg::PoseWithCovarianceStamped p;
199+
p.pose.pose.position.x = 1;
200+
p.pose.pose.position.y = 2;
201+
p.pose.pose.position.z = 3;
202+
p.pose.pose.orientation.w = 1;
203+
p.pose.pose.orientation.x = 0;
204+
p.pose.pose.orientation.y = 0;
205+
p.pose.pose.orientation.z = 0;
206+
207+
auto v = vortex::utils::ros_conversions::ros_to_pose_vec(p);
208+
209+
ASSERT_EQ(v.size(), 1);
210+
EXPECT_NEAR(v[0].x, 1.0, 1e-6);
211+
EXPECT_NEAR(v[0].y, 2.0, 1e-6);
212+
EXPECT_NEAR(v[0].z, 3.0, 1e-6);
213+
214+
EXPECT_NEAR(v[0].qw, 1.0, 1e-6);
215+
EXPECT_NEAR(v[0].qz, 0.0, 1e-6);
216+
EXPECT_NEAR(v[0].qz, 0.0, 1e-6);
217+
EXPECT_NEAR(v[0].qz, 0.0, 1e-6);
218+
}
219+
151220
TEST(ros_to_pose_vec, pose_array) {
152221
geometry_msgs::msg::PoseArray arr;
153222
arr.poses.resize(2);

include/vortex/utils/ros_conversions.hpp

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include <geometry_msgs/msg/pose.hpp>
1212
#include <geometry_msgs/msg/pose_array.hpp>
1313
#include <geometry_msgs/msg/pose_stamped.hpp>
14+
#include <geometry_msgs/msg/pose_with_covariance.hpp>
1415
#include <geometry_msgs/msg/pose_with_covariance_stamped.hpp>
1516

1617
#include "concepts.hpp"
@@ -39,6 +40,8 @@ concept same_bare_as = std::same_as<std::remove_cvref_t<T>, U>;
3940
*
4041
* - `geometry_msgs::msg::PoseStamped`
4142
*
43+
* - `geometry_msgs::msg::PoseWithCovariance`
44+
*
4245
* - `geometry_msgs::msg::PoseWithCovarianceStamped`
4346
*
4447
* - `geometry_msgs::msg::PoseArray`
@@ -49,6 +52,7 @@ template <typename T>
4952
concept ROSPoseLike =
5053
same_bare_as<T, geometry_msgs::msg::Pose> ||
5154
same_bare_as<T, geometry_msgs::msg::PoseStamped> ||
55+
same_bare_as<T, geometry_msgs::msg::PoseWithCovariance> ||
5256
same_bare_as<T, geometry_msgs::msg::PoseWithCovarianceStamped> ||
5357
same_bare_as<T, geometry_msgs::msg::PoseArray>;
5458

@@ -140,6 +144,8 @@ inline vortex::utils::types::Pose ros_pose_to_pose(
140144
*
141145
* - `geometry_msgs::msg::PoseStamped`
142146
*
147+
* - `geometry_msgs::msg::PoseWithCovariance`
148+
*
143149
* - `geometry_msgs::msg::PoseWithCovarianceStamped`
144150
*
145151
* - `geometry_msgs::msg::PoseArray`
@@ -156,11 +162,14 @@ std::vector<vortex::utils::types::Pose> ros_to_pose_vec(const T& msg) {
156162
if constexpr (same_bare_as<T, geometry_msgs::msg::Pose>) {
157163
return {ros_pose_to_pose(msg)};
158164
} else if constexpr (same_bare_as<T, geometry_msgs::msg::PoseStamped>) {
159-
return ros_pose_to_pose(msg.pose);
165+
return {ros_pose_to_pose(msg.pose)};
166+
} else if constexpr (same_bare_as<T,
167+
geometry_msgs::msg::PoseWithCovariance>) {
168+
return {ros_pose_to_pose(msg.pose)};
160169
} else if constexpr (same_bare_as<
161170
T,
162171
geometry_msgs::msg::PoseWithCovarianceStamped>) {
163-
return ros_pose_to_pose(msg.pose.pose);
172+
return {ros_pose_to_pose(msg.pose.pose)};
164173
} else if constexpr (same_bare_as<T, geometry_msgs::msg::PoseArray>) {
165174
std::vector<vortex::utils::types::Pose> poses;
166175
poses.reserve(msg.poses.size());

0 commit comments

Comments
 (0)