@@ -276,6 +276,39 @@ TEST(TfGeometry, Point)
276276 EXPECT_NEAR (v_advanced.point .z , 27 , EPS);
277277}
278278
279+ TEST (TfGeometry, Quaternion)
280+ {
281+ // rotated by -90° around y
282+ // 0, 0, -1
283+ // 0, 1, 0,
284+ // 1, 0, 0
285+ geometry_msgs::msg::QuaternionStamped q1, res;
286+ q1.quaternion .x = 0 ;
287+ q1.quaternion .y = -0.707107 ;
288+ q1.quaternion .z = 0 ;
289+ q1.quaternion .w = 0.707107 ;
290+ q1.header .stamp = tf2_ros::toMsg (tf2::timeFromSec (2 ));
291+ q1.header .frame_id = " A" ;
292+
293+ // simple api
294+ const geometry_msgs::msg::QuaternionStamped q_simple = tf_buffer->transform (
295+ q1, " B" , tf2::durationFromSec (
296+ 2.0 ));
297+ EXPECT_NEAR (q_simple.quaternion .x , 0.707107 , EPS);
298+ EXPECT_NEAR (q_simple.quaternion .y , 0 , EPS);
299+ EXPECT_NEAR (q_simple.quaternion .z , -0.707107 , EPS);
300+ EXPECT_NEAR (q_simple.quaternion .w , 0 , EPS);
301+
302+ // advanced api
303+ const geometry_msgs::msg::QuaternionStamped q_advanced = tf_buffer->transform (
304+ q1, " B" , tf2::timeFromSec (2.0 ),
305+ " A" , tf2::durationFromSec (3.0 ));
306+ EXPECT_NEAR (q_advanced.quaternion .x , 0.707107 , EPS);
307+ EXPECT_NEAR (q_advanced.quaternion .y , 0 , EPS);
308+ EXPECT_NEAR (q_advanced.quaternion .z , -0.707107 , EPS);
309+ EXPECT_NEAR (q_advanced.quaternion .w , 0 , EPS);
310+ }
311+
279312
280313int main (int argc, char **argv){
281314 testing::InitGoogleTest (&argc, argv);
0 commit comments