pose_selector_test.cpp
Go to the documentation of this file.
1 #include <ros/ros.h>
2 #include <ros/package.h>
3 
4 #include <unique_id/unique_id.h>
5 
6 #include <ram_msgs/AdditiveManufacturingTrajectory.h>
7 
8 #include <ram_modify_trajectory/GetPosesFromTrajectory.h>
9 #include <ram_modify_trajectory/GetPosesFromLayersList.h>
10 #include <ram_modify_trajectory/GetPosesFromLayer.h>
11 
12 #include <gtest/gtest.h>
13 
14 std::unique_ptr<ros::NodeHandle> nh;
16 ram_msgs::AdditiveManufacturingTrajectory trajectory;
17 
18 // Pose selector services
22 
23 TEST(TestSuite, testSrvsExistence)
24 {
25  get_poses_from_trajectory_client = nh->serviceClient<ram_modify_trajectory::GetPosesFromTrajectory>(
26  "ram/pose_selector/get_poses_from_trajectory");
27  bool exists_4(get_poses_from_trajectory_client.waitForExistence(ros::Duration(1)));
28  EXPECT_TRUE(exists_4);
29 
30  get_poses_from_layers_list_client = nh->serviceClient<ram_modify_trajectory::GetPosesFromLayersList>(
31  "ram/pose_selector/get_poses_from_layers_list");
32  bool exists_5(get_poses_from_layers_list_client.waitForExistence(ros::Duration(1)));
33  EXPECT_TRUE(exists_5);
34 
35  get_poses_from_layer_client = nh->serviceClient<ram_modify_trajectory::GetPosesFromLayer>(
36  "ram/pose_selector/get_poses_from_layer");
37  bool exists_6(get_poses_from_layer_client.waitForExistence(ros::Duration(1)));
38  EXPECT_TRUE(exists_6);
39 }
40 
41 TEST(TestSuite, selectPosesInEmptyTrajectory)
42 {
43  // Publish empty trajectory
44  trajectory.poses.clear();
45  ros::Time timestamp = ros::Time::now();
46  trajectory.generated = timestamp;
47  trajectory.modified = timestamp;
48  test_trajectory_pub.publish(trajectory);
49 
50  ram_modify_trajectory::GetPosesFromTrajectory get_poses_from_trajectory_srv;
51  bool success_4(get_poses_from_trajectory_client.call(get_poses_from_trajectory_srv));
52  EXPECT_FALSE(success_4);
53 
54  ram_modify_trajectory::GetPosesFromLayersList get_poses_from_layers_list_srv;
55  bool success_5(get_poses_from_layers_list_client.call(get_poses_from_layers_list_srv));
56  EXPECT_FALSE(success_5);
57 
58  ram_modify_trajectory::GetPosesFromLayer get_poses_from_layer_srv;
59  bool success_6(get_poses_from_layer_client.call(get_poses_from_layer_srv));
60  EXPECT_FALSE(success_6);
61 }
62 
63 TEST(TestSuite, getPosesFromTrajectory)
64 {
65  trajectory.poses.clear();
66  // 3 layers. 1 pose in the first layer, 2 poses in the second, etc.
67  for (int i(0); i < 3; ++i)
68  {
69  for (int j(0); j <= i; ++j)
70  {
71  ram_msgs::AdditiveManufacturingPose pose;
72  pose.layer_level = i;
73  pose.unique_id = unique_id::toMsg(unique_id::fromRandom());
74  trajectory.poses.push_back(pose);
75  }
76  }
77  ros::Time timestamp = ros::Time::now();
78  trajectory.generated = timestamp;
79  trajectory.modified = timestamp;
80  test_trajectory_pub.publish(trajectory);
81 
82  ram_modify_trajectory::GetPosesFromTrajectory srv;
83  srv.request.pose_index_list =
84  { 0,1,2,3};
85  bool success(get_poses_from_trajectory_client.call(srv));
86  // Verify uuid
87  bool response = true;
88  for (unsigned i(0); i < srv.request.pose_index_list.size(); ++i)
89  {
90  std::string trajectory_id = unique_id::toHexString(trajectory.poses[i].unique_id);
91  std::string response_id = unique_id::toHexString(srv.response.poses[i].unique_id);
92 
93  if (trajectory_id.compare(response_id) != 0) // uuid are not equals
94  {
95  response = false;
96  break;
97  }
98  }
99  EXPECT_TRUE(success && response);
100 }
101 
102 TEST(TestSuite, getPosesFromLayersList)
103 {
104  trajectory.poses.clear();
105  // 3 layers. 1 pose in the first layer, 2 poses in the second, etc.
106  for (int i(0); i < 3; ++i)
107  {
108  for (int j(0); j <= i; ++j)
109  {
110  ram_msgs::AdditiveManufacturingPose pose;
111  pose.layer_level = i;
112  pose.unique_id = unique_id::toMsg(unique_id::fromRandom());
113  trajectory.poses.push_back(pose);
114  }
115  }
116  ros::Time timestamp = ros::Time::now();
117  trajectory.generated = timestamp;
118  trajectory.modified = timestamp;
119  test_trajectory_pub.publish(trajectory);
120 
121  ram_modify_trajectory::GetPosesFromLayersList srv;
122  srv.request.layer_level_list =
123  { 2};
124  bool success(get_poses_from_layers_list_client.call(srv));
125  // Verify uuid
126  bool response = true;
127  for (unsigned i(0); i < 3; ++i) // 3 poses in this layer
128  {
129  std::string trajectory_id = unique_id::toHexString(trajectory.poses[i + 3].unique_id);
130  std::string response_id = unique_id::toHexString(srv.response.poses[i].unique_id);
131 
132  if (trajectory_id.compare(response_id) != 0) // uuid are not equals
133  {
134  response = false;
135  break;
136  }
137  }
138  EXPECT_TRUE(success && response);
139 }
140 
141 TEST(TestSuite, getPosesFromLayer)
142 {
143  ram_modify_trajectory::GetPosesFromLayer srv;
144  srv.request.layer_level = 2;
145  srv.request.index_list_relative =
146  { 2}; //last pose in the trajectory
147  bool success(get_poses_from_layer_client.call(srv));
148  // Verify uuid
149  std::string trajectory_id = unique_id::toHexString(trajectory.poses.back().unique_id);
150  std::string response_id = unique_id::toHexString(srv.response.poses[0].unique_id);
151 
152  bool response = (trajectory_id.compare(response_id) == 0) ? true : false;
153  EXPECT_TRUE(success && response);
154 }
155 
156 TEST(TestSuite, trajectoryWithEmptyLayer)
157 {
158 
159  // 4 layers. 4 poses par layer. third layer is empty
160  trajectory.poses.clear();
161  for (int i(0); i < 4; ++i)
162  {
163  if (i == 2)
164  continue;
165  for (int j(0); j < 4; ++j)
166  {
167  ram_msgs::AdditiveManufacturingPose pose;
168  pose.layer_level = i;
169  pose.unique_id = unique_id::toMsg(unique_id::fromRandom());
170  trajectory.poses.push_back(pose);
171  }
172  }
173 
174  ros::Time timestamp = ros::Time::now();
175  trajectory.generated = timestamp;
176  trajectory.modified = timestamp;
177  test_trajectory_pub.publish(trajectory);
178 
179  ram_modify_trajectory::GetPosesFromLayersList srv;
180  srv.request.layer_level_list =
181  { 2};
182  bool success(get_poses_from_layers_list_client.call(srv));
183  bool response = (srv.response.poses.size() == 0) ? true : false;
184  EXPECT_TRUE(success && response);
185 }
186 
187 int main(int argc,
188  char **argv)
189 {
190  ros::init(argc, argv, "modify_trajectory_test");
191  nh.reset(new ros::NodeHandle);
192 
193  test_trajectory_pub = nh->advertise<ram_msgs::AdditiveManufacturingTrajectory>("ram/trajectory", 5, true);
194 
195  // Make sure we have at least one subscriber to this topic
196  while (test_trajectory_pub.getNumSubscribers() != 1)
197  {
198  ROS_WARN_STREAM_THROTTLE(1, test_trajectory_pub.getTopic() + " has zero subscriber, waiting...");
199  ros::Duration(0.1).sleep();
200  }
201 
202  testing::InitGoogleTest(&argc, argv);
203  return RUN_ALL_TESTS();
204 }
static boost::uuids::uuid fromRandom(void)
void publish(const boost::shared_ptr< M > &message) const
bool sleep() const
ROSCPP_DECL void init(int &argc, char **argv, const std::string &name, uint32_t options=0)
bool call(MReq &req, MRes &res)
ros::ServiceClient get_poses_from_layers_list_client
std::unique_ptr< ros::NodeHandle > nh
int main(int argc, char **argv)
bool waitForExistence(ros::Duration timeout=ros::Duration(-1))
ros::Publisher test_trajectory_pub
static std::string toHexString(boost::uuids::uuid const &uu)
#define ROS_WARN_STREAM_THROTTLE(rate, args)
uint32_t getNumSubscribers() const
ros::ServiceClient get_poses_from_layer_client
TEST(TestSuite, testSrvsExistence)
static Time now()
static uuid_msgs::UniqueID toMsg(boost::uuids::uuid const &uu)
std::string getTopic() const
ram_msgs::AdditiveManufacturingTrajectory trajectory
ros::ServiceClient get_poses_from_trajectory_client


ram_modify_trajectory
Author(s): Andres Campos - Institut Maupertuis
autogenerated on Mon Jun 10 2019 14:50:00