Skip to content

Commit 8353ac8

Browse files
committed
added translation and rotation tests for TransformPose
1 parent 69e5710 commit 8353ac8

File tree

2 files changed

+95
-3
lines changed

2 files changed

+95
-3
lines changed

ros2_ws/src/rcdt_utilities/include/tests/test_package.hpp

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,28 @@
44

55
#include "rcdt_messages/srv/express_pose_in_other_frame.hpp"
66
#include "rcdt_messages/srv/transform_pose.hpp"
7+
#include <chrono>
78
#include <gtest/gtest.h>
89
#include <iostream>
10+
#include <memory>
911
#include <rcdt_messages/srv/express_pose_in_other_frame.hpp>
1012
#include <rcdt_messages/srv/transform_pose.hpp>
1113
#include <rclcpp/executors.hpp>
1214
#include <rclcpp/executors/multi_threaded_executor.hpp>
15+
#include <rclcpp/executors/single_threaded_executor.hpp>
16+
#include <rclcpp/future_return_code.hpp>
1317
#include <rclcpp/rclcpp.hpp>
18+
#include <thread>
1419

1520
class PackageTester : public rclcpp::Node {
1621
public:
1722
PackageTester() : Node("manipulate_pose_tester") {
1823
express_pose_in_other_frame_client_ =
1924
this->create_client<rcdt_messages::srv::ExpressPoseInOtherFrame>(
20-
"~/express_pose_in_other_frame");
25+
"pose_manipulator/express_pose_in_other_frame");
2126
transform_pose_client_ =
2227
this->create_client<rcdt_messages::srv::TransformPose>(
23-
"~/transform_pose");
28+
"pose_manipulator/transform_pose");
2429
}
2530

2631
bool waitForServices(std::chrono::seconds timeout) {
@@ -43,6 +48,20 @@ class PackageTester : public rclcpp::Node {
4348
return true;
4449
}
4550

51+
rclcpp::Client<rcdt_messages::srv::TransformPose>::FutureAndRequestId
52+
sendTransformPoseRequest(
53+
std::shared_ptr<rcdt_messages::srv::TransformPose::Request> req) {
54+
return transform_pose_client_->async_send_request(req);
55+
}
56+
57+
rclcpp::Client<
58+
rcdt_messages::srv::ExpressPoseInOtherFrame>::FutureAndRequestId
59+
sendExpressPoseInOtherFrameRequest(
60+
std::shared_ptr<rcdt_messages::srv::ExpressPoseInOtherFrame::Request>
61+
req) {
62+
return express_pose_in_other_frame_client_->async_send_request(req);
63+
}
64+
4665
private:
4766
rclcpp::Client<rcdt_messages::srv::ExpressPoseInOtherFrame>::SharedPtr
4867
express_pose_in_other_frame_client_;

ros2_ws/src/rcdt_utilities/tests/test_package.cpp

Lines changed: 74 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,17 @@
33
// # SPDX-License-Identifier: Apache-2.0
44

55
#include "tests/test_package.hpp"
6+
#include "geometry_msgs/msg/transform.hpp"
7+
#include "rcdt_messages/srv/transform_pose.hpp"
68
#include "rcdt_utilities/manipulate_pose.h"
9+
#include <chrono>
10+
#include <future>
11+
#include <gtest/gtest.h>
12+
#include <memory>
13+
#include <rclcpp/duration.hpp>
14+
#include <rclcpp/future_return_code.hpp>
15+
16+
#define PI 3.14159265
717

818
/**
919
* @brief Test fixture class for the PackageTester Node.
@@ -27,15 +37,22 @@ class PackageTesterFixture : public testing::Test {
2737

2838
protected:
2939
void SetUp() override {
40+
pose_manipulator_node_ = std::make_shared<PoseManipulator>();
3041
tester_node_ = std::make_shared<PackageTester>();
42+
43+
executor_->add_node(pose_manipulator_node_);
3144
executor_->add_node(tester_node_);
3245
}
3346

3447
void TearDown() override {
48+
executor_->remove_node(pose_manipulator_node_);
3549
executor_->remove_node(tester_node_);
50+
51+
pose_manipulator_node_.reset();
3652
tester_node_.reset();
3753
}
3854

55+
std::shared_ptr<PoseManipulator> pose_manipulator_node_;
3956
std::shared_ptr<PackageTester> tester_node_;
4057
static std::shared_ptr<rclcpp::executors::MultiThreadedExecutor> executor_;
4158
};
@@ -44,10 +61,66 @@ std::shared_ptr<rclcpp::executors::MultiThreadedExecutor>
4461
PackageTesterFixture::executor_ = nullptr;
4562

4663
// TESTS
47-
TEST_F(PackageTesterFixture, TestTrue) {
64+
TEST_F(PackageTesterFixture, TestNodeInitialization) {
4865
ASSERT_EQ(std::string(tester_node_->get_name()), "manipulate_pose_tester");
4966
}
5067

68+
TEST_F(PackageTesterFixture, TestServiceInitialization) {
69+
ASSERT_TRUE(tester_node_->waitForServices(std::chrono::seconds(1)));
70+
}
71+
72+
TEST_F(PackageTesterFixture, TestTransformPoseTranslation) {
73+
geometry_msgs::msg::PoseStamped pose_in;
74+
pose_in.pose.position.y = 1;
75+
pose_in.pose.position.z = 2;
76+
77+
geometry_msgs::msg::Transform tf;
78+
tf.translation.x = 5;
79+
tf.translation.y = 5;
80+
tf.translation.z = 5;
81+
82+
auto req = std::make_shared<rcdt_messages::srv::TransformPose::Request>();
83+
req->pose = pose_in;
84+
req->transform = tf;
85+
86+
auto future_and_id = tester_node_->sendTransformPoseRequest(req);
87+
auto result_code = executor_->spin_until_future_complete(
88+
future_and_id.future, std::chrono::milliseconds(500));
89+
90+
ASSERT_EQ(result_code, rclcpp::FutureReturnCode::SUCCESS);
91+
auto response = future_and_id.future.get();
92+
ASSERT_NE(response, nullptr);
93+
94+
ASSERT_EQ(response->pose.pose.position.x, 5);
95+
ASSERT_EQ(response->pose.pose.position.y, 6);
96+
ASSERT_EQ(response->pose.pose.position.z, 7);
97+
}
98+
99+
TEST_F(PackageTesterFixture, TestTransformPoseRotation) {
100+
geometry_msgs::msg::PoseStamped pose_in;
101+
pose_in.pose.position.x = 5;
102+
103+
// apply rotation of +PI/2 around Z-axis, which shifts pose to Y-axis
104+
geometry_msgs::msg::Transform tf;
105+
tf.rotation.w = 0.7071068;
106+
tf.rotation.z = 0.7071068;
107+
108+
auto req = std::make_shared<rcdt_messages::srv::TransformPose::Request>();
109+
req->pose = pose_in;
110+
req->transform = tf;
111+
112+
auto future_and_id = tester_node_->sendTransformPoseRequest(req);
113+
auto result_code = executor_->spin_until_future_complete(
114+
future_and_id.future, std::chrono::milliseconds(500));
115+
116+
ASSERT_EQ(result_code, rclcpp::FutureReturnCode::SUCCESS);
117+
auto response = future_and_id.future.get();
118+
ASSERT_NE(response, nullptr);
119+
120+
ASSERT_EQ(response->pose.pose.position.x, 0);
121+
ASSERT_NEAR(response->pose.pose.position.y, 5, 1e-4);
122+
}
123+
51124
// MAIN
52125
int main(int argc, char **argv) {
53126
testing::InitGoogleTest(&argc, argv);

0 commit comments

Comments
 (0)