Skip to content

Commit 1120672

Browse files
authored
Rename vortex util types (#22)
* smol refactor * reverted eta changes * member concepts * member concept accessors * removed eigen6d conversion for Pose struct * moved to concept folder * doxygen comments * renamed types to Pose, PoseEuler & Twist * removed accessors, views & member concepts * update struct doxygen comments
1 parent 69391c1 commit 1120672

File tree

8 files changed

+478
-549
lines changed

8 files changed

+478
-549
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,4 @@ for common QoS profile definitions, and
2727
```C++
2828
#include <vortex/utils/types.hpp>
2929
```
30-
for common structs like 6DOF `Eta` and `Nu`.
30+
for common structs like 6DOF `PoseEuler`, `Pose` and `Twist`.

cpp_test/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ add_executable(
88
${TEST_BINARY_NAME}
99
test_math.cpp
1010
test_types.cpp
11+
test_concepts.cpp
1112
test_ros_conversions.cpp
1213
)
1314

cpp_test/test_concepts.cpp

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
#include <string>
2+
#include <type_traits>
3+
4+
#include <eigen3/Eigen/Core>
5+
6+
#include "vortex/utils/concepts.hpp"
7+
8+
struct HasPositionAndEuler {
9+
double x, y, z;
10+
double roll, pitch, yaw;
11+
};
12+
13+
struct HasPositionAndEulerExtra {
14+
double x, y, z;
15+
double roll, pitch, yaw;
16+
int extra;
17+
};
18+
19+
struct HasPositionAndQuaternion {
20+
double x, y, z;
21+
double qw, qx, qy, qz;
22+
};
23+
24+
struct PositionOnly {
25+
double x, y, z;
26+
};
27+
28+
struct EulerOnly {
29+
double roll, pitch, yaw;
30+
};
31+
32+
struct IncompleteEulerMembers {
33+
double x, y, z;
34+
double roll, pitch; // missing yaw
35+
};
36+
37+
struct IncompleteQuaternionMembers {
38+
double x, y, z;
39+
double qx, qy, qz; // missing qw
40+
};
41+
42+
struct WrongEulerMemberType {
43+
double x, y, z;
44+
std::string roll; // wrong type
45+
double pitch, yaw;
46+
};
47+
48+
struct HasEulerAndQuaternionMembers {
49+
double x, y, z;
50+
double roll, pitch, yaw;
51+
double qw, qx, qy, qz;
52+
};
53+
54+
// ---------- PositionLike ----------
55+
56+
static_assert(vortex::utils::concepts::PositionLike<HasPositionAndEuler>);
57+
static_assert(vortex::utils::concepts::PositionLike<HasPositionAndQuaternion>);
58+
static_assert(vortex::utils::concepts::PositionLike<PositionOnly>);
59+
static_assert(!vortex::utils::concepts::PositionLike<EulerOnly>);
60+
61+
// ---------- EulerLike ----------
62+
63+
static_assert(vortex::utils::concepts::EulerLike<HasPositionAndEuler>);
64+
static_assert(vortex::utils::concepts::EulerLike<HasPositionAndEulerExtra>);
65+
static_assert(!vortex::utils::concepts::EulerLike<HasPositionAndQuaternion>);
66+
static_assert(!vortex::utils::concepts::EulerLike<IncompleteEulerMembers>);
67+
static_assert(!vortex::utils::concepts::EulerLike<WrongEulerMemberType>);
68+
69+
// ---------- QuaternionLike ----------
70+
71+
static_assert(
72+
vortex::utils::concepts::QuaternionLike<HasPositionAndQuaternion>);
73+
static_assert(!vortex::utils::concepts::QuaternionLike<HasPositionAndEuler>);
74+
static_assert(
75+
!vortex::utils::concepts::QuaternionLike<IncompleteQuaternionMembers>);
76+
77+
// ---------- Pose Concepts ----------
78+
79+
static_assert(vortex::utils::concepts::EulerPoseLike<HasPositionAndEuler>);
80+
static_assert(vortex::utils::concepts::EulerPoseLike<HasPositionAndEulerExtra>);
81+
static_assert(
82+
!vortex::utils::concepts::EulerPoseLike<HasPositionAndQuaternion>);
83+
84+
static_assert(vortex::utils::concepts::QuatPoseLike<HasPositionAndQuaternion>);
85+
static_assert(!vortex::utils::concepts::QuatPoseLike<HasPositionAndEuler>);
86+
87+
static_assert(!vortex::utils::concepts::PoseLike<HasEulerAndQuaternionMembers>,
88+
"Types exposing both Euler and Quaternion representations must "
89+
"be rejected");
90+
91+
static_assert(vortex::utils::concepts::PoseLike<HasPositionAndEuler>);
92+
static_assert(vortex::utils::concepts::PoseLike<HasPositionAndQuaternion>);
93+
static_assert(!vortex::utils::concepts::PoseLike<IncompleteEulerMembers>);
94+
static_assert(!vortex::utils::concepts::PoseLike<WrongEulerMemberType>);
95+
96+
// ---------- Eigen Tests ----------
97+
98+
static_assert(
99+
!vortex::utils::concepts::EulerPoseLike<Eigen::Matrix<double, 6, 1>>,
100+
"Eigen::Vector6d should NOT satisfy EulerPoseLike without adapters");
101+
102+
static_assert(
103+
!vortex::utils::concepts::QuatPoseLike<Eigen::Matrix<double, 7, 1>>,
104+
"Eigen::Vector7d should NOT satisfy QuatPoseLike");
105+
106+
static_assert(!vortex::utils::concepts::PositionLike<Eigen::Vector3d>,
107+
"Eigen::Vector3d must NOT satisfy PositionLike");

0 commit comments

Comments
 (0)