fiducial_vertices_test.cpp
Go to the documentation of this file.
1 #include <gtest/gtest.h>
2 
3 #include <ros/ros.h>
5 #include <sensor_msgs/CameraInfo.h>
6 #include <opencv2/highgui/highgui.hpp>
7 #include <cv_bridge/cv_bridge.h>
8 
9 #include <fiducial_msgs/FiducialArray.h>
10 #include <fiducial_msgs/FiducialTransformArray.h>
11 
12 class FiducialsVerticesTests : public ::testing::Test {
13 protected:
14  virtual void SetUp() {
16  image_pub = it->advertise("camera/image", 1);
17 
18  CameraInfoPub = nh.advertise<sensor_msgs::CameraInfo>("camera_info", 5);
19 
20  c_info.height = 960;
21  c_info.width = 1280;
22  c_info.distortion_model = "plumb_bob";
23 
24  double data_D[] = {0.1349735087283542, -0.2335869827451621, 0.0006697030315075139, 0.004846737465872353, 0.0};
25  c_info.D = std::vector<double> (data_D, data_D + sizeof(data_D)/ sizeof(double));
26 
27  c_info.K = {1006.126285753055, 0.0, 655.8639244150409, 0.0, 1004.015433012594, 490.6140221242933, 0.0, 0.0, 1.0};
28  c_info.R = {1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0};
29  c_info.P = {1021.54345703125, 0.0, 661.9091982335958, 0.0, 0.0, 1025.251953125, 490.6380671707448, 0.0, 0.0, 0.0, 1.0, 0.0};
30 
31  ros::NodeHandle nh_priv("~");
32  nh_priv.getParam("image_directory", image_directory);
33 
34  vertices_sub = nh.subscribe("/fiducial_vertices", 1, &FiducialsVerticesTests::vertices_callback, this);
35  got_vertices = false;
36  }
37 
38  virtual void TearDown() { delete it;}
39 
40  void publish_image(std::string file) {
41  cv::Mat image = cv::imread(image_directory+file, CV_LOAD_IMAGE_COLOR);
42  cv::waitKey(30);
43  sensor_msgs::ImagePtr msg = cv_bridge::CvImage(std_msgs::Header(), "bgr8", image).toImageMsg();
44  image_pub.publish(msg);
45  c_info.header.stamp = ros::Time::now();
47  }
48 
49  void vertices_callback(const fiducial_msgs::FiducialArray& f) {
50  got_vertices = true;
51  fiducials = f;
52  }
53 
55 
56  // Set up Publishing of static images
59 
60  sensor_msgs::CameraInfo c_info;
62 
63  std::string image_directory;
64 
65  // Set up subscribing
67  fiducial_msgs::FiducialArray fiducials;
69 };
70 
72  ros::Rate loop_rate(5);
73  while (nh.ok() && !got_vertices) {
74  publish_image("fiducial_30.png");
75  ros::spinOnce();
76  loop_rate.sleep();
77  }
78 
79  ASSERT_EQ(1, fiducials.fiducials.size());
80 
81  fiducial_msgs::Fiducial& vertices = fiducials.fiducials[0];
82 
83  ASSERT_EQ(30, vertices.fiducial_id);
84 
85  ASSERT_DOUBLE_EQ(788.7144775390625000, vertices.x0);
86  ASSERT_DOUBLE_EQ(424.7263488769531250, vertices.y0);
87  ASSERT_DOUBLE_EQ(797.6848144531250000, vertices.x1);
88  ASSERT_DOUBLE_EQ(664.1170654296875000, vertices.y1);
89  ASSERT_DOUBLE_EQ(552.2851562500000000, vertices.x2);
90  ASSERT_DOUBLE_EQ(668.5111083984375000, vertices.y2);
91  ASSERT_DOUBLE_EQ(551.7211303710937500, vertices.x3);
92  ASSERT_DOUBLE_EQ(426.8039855957031250, vertices.y3);
93 }
94 
96  ros::Rate loop_rate(5);
97  while (nh.ok() && !got_vertices) {
98  publish_image("fiducial_34.png");
99  ros::spinOnce();
100  loop_rate.sleep();
101  }
102 
103  int len = fiducials.fiducials.size();
104  ASSERT_LE(1, len);
105 
106  fiducial_msgs::Fiducial& vertices = fiducials.fiducials[len-1];
107 
108  ASSERT_EQ(34, vertices.fiducial_id);
109 
110  ASSERT_DOUBLE_EQ(840.3661499023437500, vertices.x0);
111  ASSERT_DOUBLE_EQ(105.3488464355468750, vertices.y0);
112  ASSERT_DOUBLE_EQ(839.5590820312500000, vertices.x1);
113  ASSERT_DOUBLE_EQ(456.3438720703125000, vertices.y1);
114  ASSERT_DOUBLE_EQ(506.3190307617187500, vertices.x2);
115  ASSERT_DOUBLE_EQ(462.5921936035156250, vertices.y2);
116  ASSERT_DOUBLE_EQ(493.5599365234375000, vertices.x3);
117  ASSERT_DOUBLE_EQ(118.8109970092773437, vertices.y3);
118 }
119 
121  ros::Rate loop_rate(5);
122  while (nh.ok() && !got_vertices) {
123  publish_image("fiducial_35.png");
124  ros::spinOnce();
125  loop_rate.sleep();
126  }
127 
128  int len = fiducials.fiducials.size();
129  ASSERT_LE(1, len);
130 
131  fiducial_msgs::Fiducial& vertices = fiducials.fiducials[len-1];
132 
133  ASSERT_EQ(35, vertices.fiducial_id);
134 
135  ASSERT_DOUBLE_EQ(863.0485839843750000, vertices.x0);
136  ASSERT_DOUBLE_EQ(120.1449050903320312, vertices.y0);
137  ASSERT_DOUBLE_EQ(861.0425415039062500, vertices.x1);
138  ASSERT_DOUBLE_EQ(459.1877746582031250, vertices.y1);
139  ASSERT_DOUBLE_EQ(532.6334838867187500, vertices.x2);
140  ASSERT_DOUBLE_EQ(463.8345336914062500, vertices.y2);
141  ASSERT_DOUBLE_EQ(524.2216186523437500, vertices.x3);
142  ASSERT_DOUBLE_EQ(126.8642807006835937, vertices.y3);
143 }
144 
145 int main(int argc, char** argv)
146 {
147 
148  testing::InitGoogleTest(&argc, argv);
149  ros::init(argc, argv, "FiducialsVerticesTests");
150  return RUN_ALL_TESTS();
151 }
void publish(const boost::shared_ptr< M > &message) const
Subscriber subscribe(const std::string &topic, uint32_t queue_size, void(T::*fp)(M), T *obj, const TransportHints &transport_hints=TransportHints())
ROSCPP_DECL void init(int &argc, char **argv, const std::string &name, uint32_t options=0)
Publisher advertise(const std::string &base_topic, uint32_t queue_size, bool latch=false)
sensor_msgs::CameraInfo c_info
void publish_image(std::string file)
TEST_F(FiducialsVerticesTests, fiducial_30)
image_transport::Publisher image_pub
void publish(const sensor_msgs::Image &message) const
Publisher advertise(const std::string &topic, uint32_t queue_size, bool latch=false)
int main(int argc, char **argv)
bool sleep()
bool getParam(const std::string &key, std::string &s) const
image_transport::ImageTransport * it
fiducial_msgs::FiducialArray fiducials
static Time now()
bool ok() const
ROSCPP_DECL void spinOnce()
sensor_msgs::ImagePtr toImageMsg() const
void vertices_callback(const fiducial_msgs::FiducialArray &f)


fiducial_detect
Author(s): Austin Hendrix
autogenerated on Thu Dec 28 2017 04:07:00