fiducial_transform_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/FiducialTransformArray.h>
10 
11 class FiducialsTransformTests : public ::testing::Test {
12 protected:
13  virtual void SetUp() {
15  image_pub = it->advertise("camera/image", 1);
16 
17  CameraInfoPub = nh.advertise<sensor_msgs::CameraInfo>("camera_info", 5);
18 
19  c_info.height = 960;
20  c_info.width = 1280;
21  c_info.distortion_model = "plumb_bob";
22 
23  double data_D[] = {0.1349735087283542, -0.2335869827451621, 0.0006697030315075139, 0.004846737465872353, 0.0};
24  c_info.D = std::vector<double> (data_D, data_D + sizeof(data_D)/ sizeof(double));
25 
26  c_info.K = {1006.126285753055, 0.0, 655.8639244150409, 0.0, 1004.015433012594, 490.6140221242933, 0.0, 0.0, 1.0};
27  c_info.R = {1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0};
28  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};
29 
30  ros::NodeHandle nh_priv("~");
31  nh_priv.getParam("image_directory", image_directory);
32 
33  transforms_sub = nh.subscribe("/fiducial_transforms", 1, &FiducialsTransformTests::transforms_callback, this);
34  got_transforms = false;
35  }
36 
37  virtual void TearDown() { delete it;}
38 
39  void publish_image(std::string file) {
40  cv::Mat image = cv::imread(image_directory+file, CV_LOAD_IMAGE_COLOR);
41  cv::waitKey(30);
42  sensor_msgs::ImagePtr msg = cv_bridge::CvImage(std_msgs::Header(), "bgr8", image).toImageMsg();
43  image_pub.publish(msg);
44  c_info.header.stamp = ros::Time::now();
46  }
47 
48  void transforms_callback(const fiducial_msgs::FiducialTransformArray& f) {
49  got_transforms = true;
50  transforms = f;
51  }
52 
54 
55  // Set up Publishing of static images
58 
59  sensor_msgs::CameraInfo c_info;
61 
62  std::string image_directory;
63 
64  // Set up subscribing
66  fiducial_msgs::FiducialTransformArray transforms;
68 };
69 
71  ros::Rate loop_rate(5);
72  while (nh.ok() && !got_transforms) {
73  publish_image("fiducial_30.png");
74  ros::spinOnce();
75  loop_rate.sleep();
76  }
77 
78  ASSERT_EQ(30, transforms.transforms[0].fiducial_id);
79 
80  ASSERT_NEAR(0.0111652960709, transforms.transforms[0].transform.translation.x, 0.05);
81  ASSERT_NEAR(0.0345085728175, transforms.transforms[0].transform.translation.y, 0.05);
82  ASSERT_NEAR(0.6496505488590, transforms.transforms[0].transform.translation.z, 0.05);
83 
84  ASSERT_NEAR(0.9971363567790, transforms.transforms[0].transform.rotation.x, 0.05);
85  ASSERT_NEAR(-0.007139744467, transforms.transforms[0].transform.rotation.y, 0.05);
86  ASSERT_NEAR(0.0201383049329, transforms.transforms[0].transform.rotation.z, 0.05);
87  ASSERT_NEAR(0.0725434953236, transforms.transforms[0].transform.rotation.w, 0.05);
88 }
89 
91  ros::Rate loop_rate(5);
92  while (nh.ok() && !got_transforms) {
93  publish_image("fiducial_34.png");
94  ros::spinOnce();
95  loop_rate.sleep();
96  }
97 
98  ASSERT_EQ(34, transforms.transforms[0].fiducial_id);
99 
100  ASSERT_NEAR(0.00557772645364, transforms.transforms[0].transform.translation.x, 0.05);
101  ASSERT_NEAR(-0.0921505293117, transforms.transforms[0].transform.translation.y, 0.05);
102  ASSERT_NEAR(0.459902136894, transforms.transforms[0].transform.translation.z, 0.05);
103 
104  ASSERT_NEAR(0.997516008884, transforms.transforms[0].transform.rotation.x, 0.05);
105  ASSERT_NEAR(-0.00861731470528, transforms.transforms[0].transform.rotation.y, 0.05);
106  ASSERT_NEAR(-0.0332893760892, transforms.transforms[0].transform.rotation.z, 0.05);
107  ASSERT_NEAR(-0.0614765918635, transforms.transforms[0].transform.rotation.w, 0.05);
108 }
109 
111  ros::Rate loop_rate(5);
112  while (nh.ok() && !got_transforms) {
113  publish_image("fiducial_35.png");
114  ros::spinOnce();
115  loop_rate.sleep();
116  }
117 
118  ASSERT_EQ(35, transforms.transforms[0].fiducial_id);
119 
120  ASSERT_NEAR(0.0181760973715, transforms.transforms[0].transform.translation.x, 0.05);
121  ASSERT_NEAR(-0.0915359838771, transforms.transforms[0].transform.translation.y, 0.05);
122  ASSERT_NEAR(0.470431107885, transforms.transforms[0].transform.translation.z, 0.05);
123 
124  ASSERT_NEAR(0.998738802658, transforms.transforms[0].transform.rotation.x, 0.05);
125  ASSERT_NEAR(-0.00669542019471, transforms.transforms[0].transform.rotation.y, 0.05);
126  ASSERT_NEAR(-0.00914052301956, transforms.transforms[0].transform.rotation.z, 0.05);
127  ASSERT_NEAR(-0.0489124345408, transforms.transforms[0].transform.rotation.w, 0.05);
128 }
129 
130 int main(int argc, char** argv)
131 {
132 
133  testing::InitGoogleTest(&argc, argv);
134  ros::init(argc, argv, "FiducialsTransformTests");
135  return RUN_ALL_TESTS();
136 }
fiducial_msgs::FiducialTransformArray transforms
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())
TEST_F(FiducialsTransformTests, fiducial_30)
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)
int main(int argc, char **argv)
image_transport::ImageTransport * it
void publish_image(std::string file)
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)
sensor_msgs::CameraInfo c_info
bool sleep()
bool getParam(const std::string &key, std::string &s) const
static Time now()
void transforms_callback(const fiducial_msgs::FiducialTransformArray &f)
bool ok() const
ROSCPP_DECL void spinOnce()
sensor_msgs::ImagePtr toImageMsg() const


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