Skip to content
This repository was archived by the owner on May 31, 2025. It is now read-only.

Commit ba75aff

Browse files
author
Bjar Ne
committed
[test_tf2] PoseStamped and Quaternion convert tests
1 parent 17230ea commit ba75aff

File tree

3 files changed

+86
-2
lines changed

3 files changed

+86
-2
lines changed

test_tf2/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 2.8.3)
22

33
project(test_tf2)
44

5-
find_package(catkin REQUIRED COMPONENTS rosconsole roscpp rostest tf tf2 tf2_bullet tf2_ros tf2_geometry_msgs tf2_kdl tf2_msgs)
5+
find_package(catkin REQUIRED COMPONENTS rosconsole roscpp rostest tf tf2 tf2_bullet tf2_ros tf2_geometry_msgs tf2_kdl tf2_msgs tf2_eigen)
66
find_package(Boost REQUIRED COMPONENTS thread)
77
find_package(orocos_kdl REQUIRED)
88

test_tf2/package.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
<build_depend>tf2_geometry_msgs</build_depend>
2424
<build_depend>tf2_kdl</build_depend>
2525
<build_depend>tf2_msgs</build_depend>
26+
<build_depend>tf2_eigen</build_depend>
2627

2728
<run_depend>rosconsole</run_depend>
2829
<run_depend>roscpp</run_depend>
@@ -34,6 +35,7 @@
3435
<run_depend>tf2_geometry_msgs</run_depend>
3536
<run_depend>tf2_kdl</run_depend>
3637
<run_depend>tf2_msgs</run_depend>
38+
<run_depend>tf2_eigen</run_depend>
3739

3840
<test_depend>rosunit</test_depend>
3941
<test_depend>rosbash</test_depend>

test_tf2/test/test_convert.cpp

Lines changed: 83 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
#include <tf2_kdl/tf2_kdl.h>
4040
#include <tf2_bullet/tf2_bullet.h>
4141
#include <tf2_geometry_msgs/tf2_geometry_msgs.h>
42+
#include <tf2_eigen/tf2_eigen.h>
4243
#include <ros/time.h>
4344

4445
TEST(tf2Convert, kdlToBullet)
@@ -95,7 +96,88 @@ TEST(tf2Convert, kdlBulletROSConversions)
9596
EXPECT_NEAR(b1.x(), b4.x(), epsilon);
9697
EXPECT_NEAR(b1.y(), b4.y(), epsilon);
9798
EXPECT_NEAR(b1.z(), b4.z(), epsilon);
98-
}
99+
}
100+
101+
TEST(tf2Convert, PoseStampedConversions) {
102+
double epsilon = 1e-9;
103+
104+
const tf2::Stamped<tf2::Transform> p_tf2_1(tf2::Transform(tf2::Quaternion(1.0,0.0,0.0,2.0), tf2::Vector3(1,2,3)), ros::Time(), "my_frame");
105+
tf2::Stamped<tf2::Transform> p_tf2_2;
106+
geometry_msgs::PoseStamped msg;
107+
tf2::toMsg(p_tf2_1, msg);
108+
109+
tf2::Stamped<Eigen::Isometry3d> p_e_iso;
110+
tf2::Stamped<Eigen::Affine3d> p_e_aff;
111+
tf2::Stamped<KDL::Frame> p_f;
112+
113+
tf2::convert(p_tf2_1, p_e_iso);
114+
tf2::convert(p_e_iso, p_f);
115+
tf2::convert(p_f, p_e_aff);
116+
tf2::convert(p_e_aff, p_tf2_2);
117+
118+
tf2::toMsg(p_e_aff, msg);
119+
120+
EXPECT_EQ(p_tf2_1.frame_id_, p_tf2_2.frame_id_);
121+
EXPECT_NEAR(p_tf2_1.stamp_.toSec(), p_tf2_2.stamp_.toSec(), epsilon);
122+
123+
const auto& q1(p_tf2_1.getRotation()), q2(p_tf2_2.getRotation());
124+
EXPECT_NEAR(q1.x(), q2.x(), epsilon);
125+
EXPECT_NEAR(q1.y(), q2.y(), epsilon);
126+
EXPECT_NEAR(q1.z(), q2.z(), epsilon);
127+
EXPECT_NEAR(q1.w(), q2.w(), epsilon);
128+
129+
const auto& o1(p_tf2_1.getOrigin()), o2(p_tf2_2.getOrigin());
130+
EXPECT_NEAR(o1.x(), o2.x(), epsilon);
131+
EXPECT_NEAR(o1.y(), o2.y(), epsilon);
132+
EXPECT_NEAR(o1.z(), o2.z(), epsilon);
133+
}
134+
135+
TEST(tf2Convert, QuaternionStampedConversations)
136+
{
137+
const double epsilon = 1e-9;
138+
const tf2::Stamped<Eigen::Quaterniond> q_e_1(Eigen::Quaterniond(2.0, 4.0, 0.25, -1),
139+
ros::Time(), "my_frame");
140+
tf2::Stamped<tf2::Quaternion> q_tf_1;
141+
tf2::convert(q_e_1, q_tf_1);
142+
143+
EXPECT_EQ(q_e_1.frame_id_, q_tf_1.frame_id_);
144+
EXPECT_NEAR(q_e_1.stamp_.toSec(), q_tf_1.stamp_.toSec(), epsilon);
145+
EXPECT_NEAR(q_e_1.x(), q_tf_1.x(), epsilon);
146+
EXPECT_NEAR(q_e_1.y(), q_tf_1.y(), epsilon);
147+
EXPECT_NEAR(q_e_1.z(), q_tf_1.z(), epsilon);
148+
EXPECT_NEAR(q_e_1.w(), q_tf_1.w(), epsilon);
149+
150+
tf2::Stamped<Eigen::Quaterniond> q_e_2;
151+
tf2::convert(q_tf_1, q_e_2);
152+
153+
EXPECT_EQ(q_e_2.frame_id_, q_tf_1.frame_id_);
154+
EXPECT_NEAR(q_e_2.stamp_.toSec(), q_tf_1.stamp_.toSec(), epsilon);
155+
EXPECT_NEAR(q_e_2.x(), q_tf_1.x(), epsilon);
156+
EXPECT_NEAR(q_e_2.y(), q_tf_1.y(), epsilon);
157+
EXPECT_NEAR(q_e_2.z(), q_tf_1.z(), epsilon);
158+
EXPECT_NEAR(q_e_2.w(), q_tf_1.w(), epsilon);
159+
}
160+
161+
TEST(tf2Convert, QuaternionConversations)
162+
{
163+
const double epsilon = 1e-9;
164+
const Eigen::Quaterniond q_e_1(2.0, 4.0, 0.25, -1);
165+
tf2::Quaternion q_tf_1;
166+
tf2::convert(q_e_1, q_tf_1);
167+
168+
EXPECT_NEAR(q_e_1.x(), q_tf_1.x(), epsilon);
169+
EXPECT_NEAR(q_e_1.y(), q_tf_1.y(), epsilon);
170+
EXPECT_NEAR(q_e_1.z(), q_tf_1.z(), epsilon);
171+
EXPECT_NEAR(q_e_1.w(), q_tf_1.w(), epsilon);
172+
173+
Eigen::Quaterniond q_e_2;
174+
tf2::convert(q_tf_1, q_e_2);
175+
176+
EXPECT_NEAR(q_e_2.x(), q_tf_1.x(), epsilon);
177+
EXPECT_NEAR(q_e_2.y(), q_tf_1.y(), epsilon);
178+
EXPECT_NEAR(q_e_2.z(), q_tf_1.z(), epsilon);
179+
EXPECT_NEAR(q_e_2.w(), q_tf_1.w(), epsilon);
180+
}
99181

100182
int main(int argc, char** argv)
101183
{

0 commit comments

Comments
 (0)