chan_angles_test.cpp 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. #include <gtest/gtest.h>
  2. #include <rs_driver/driver/decoder/chan_angles.hpp>
  3. using namespace robosense::lidar;
  4. TEST(TestChanAngles, genUserChan)
  5. {
  6. std::vector<int32_t> vert_angles;
  7. std::vector<uint16_t> user_chans;
  8. vert_angles.push_back(100);
  9. vert_angles.push_back(0);
  10. vert_angles.push_back(-100);
  11. vert_angles.push_back(200);
  12. ChanAngles::genUserChan (vert_angles, user_chans);
  13. ASSERT_EQ(user_chans.size(), 4);
  14. ASSERT_EQ(user_chans[0], 2);
  15. ASSERT_EQ(user_chans[1], 1);
  16. ASSERT_EQ(user_chans[2], 0);
  17. ASSERT_EQ(user_chans[3], 3);
  18. }
  19. TEST(TestChanAngles, loadFromFile)
  20. {
  21. std::vector<int32_t> vert_angles, horiz_angles;
  22. // load
  23. ASSERT_EQ(ChanAngles::loadFromFile ("../rs_driver/test/res/angle.csv", 4, vert_angles, horiz_angles), 0);
  24. ASSERT_EQ(vert_angles.size(), 4);
  25. ASSERT_EQ(horiz_angles.size(), 4);
  26. ASSERT_EQ(vert_angles[0], 500);
  27. ASSERT_EQ(vert_angles[1], 250);
  28. ASSERT_EQ(vert_angles[2], 0);
  29. ASSERT_EQ(vert_angles[3], -250);
  30. ASSERT_EQ(horiz_angles[0], 10);
  31. ASSERT_EQ(horiz_angles[1], -20);
  32. ASSERT_EQ(horiz_angles[2], 0);
  33. ASSERT_EQ(horiz_angles[3], -100);
  34. // load again
  35. ASSERT_EQ(ChanAngles::loadFromFile ("../rs_driver/test/res/angle.csv", 4, vert_angles, horiz_angles), 0);
  36. ASSERT_EQ(vert_angles.size(), 4);
  37. ASSERT_EQ(horiz_angles.size(), 4);
  38. // load non-existing file
  39. ASSERT_LT(ChanAngles::loadFromFile ("../rs_driver/test/res/non_exist.csv", 4, vert_angles, horiz_angles), 0);
  40. ASSERT_EQ(vert_angles.size(), 0);
  41. ASSERT_EQ(horiz_angles.size(), 0);
  42. }
  43. TEST(TestChanAngles, loadFromDifop)
  44. {
  45. uint8_t vert_angle_arr[] = {0x00, 0x01, 0x02,
  46. 0x01, 0x03, 0x04,
  47. 0x01, 0x05, 0x06,
  48. 0x00, 0x07, 0x08};
  49. uint8_t horiz_angle_arr[] = {0x00, 0x01, 0x11,
  50. 0x01, 0x02, 0x22,
  51. 0x00, 0x03, 0x33,
  52. 0x01, 0x04, 0x44};
  53. std::vector<int32_t> vert_angles, horiz_angles;
  54. // load
  55. ASSERT_EQ(ChanAngles::loadFromDifop(
  56. (const RSCalibrationAngle*)vert_angle_arr,
  57. (const RSCalibrationAngle*)horiz_angle_arr,
  58. 4,
  59. vert_angles,
  60. horiz_angles), 0);
  61. ASSERT_EQ(vert_angles.size(), 4);
  62. ASSERT_EQ(horiz_angles.size(), 4);
  63. ASSERT_EQ(vert_angles[0], 258);
  64. ASSERT_EQ(vert_angles[1], -772);
  65. ASSERT_EQ(vert_angles[2], -1286);
  66. ASSERT_EQ(vert_angles[3], 1800);
  67. ASSERT_EQ(horiz_angles[0], 273);
  68. ASSERT_EQ(horiz_angles[1], -546);
  69. ASSERT_EQ(horiz_angles[2], 819);
  70. ASSERT_EQ(horiz_angles[3], -1092);
  71. // load again
  72. ASSERT_EQ(ChanAngles::loadFromDifop(
  73. (const RSCalibrationAngle*)vert_angle_arr,
  74. (const RSCalibrationAngle*)horiz_angle_arr,
  75. 4,
  76. vert_angles,
  77. horiz_angles), 0);
  78. ASSERT_EQ(vert_angles.size(), 4);
  79. ASSERT_EQ(horiz_angles.size(), 4);
  80. }
  81. TEST(TestChanAngles, memberLoadFromFile)
  82. {
  83. ChanAngles angles(4);
  84. // not loading yet
  85. ASSERT_EQ(angles.chan_num_, 4);
  86. ASSERT_EQ(angles.vert_angles_.size(), 4);
  87. ASSERT_EQ(angles.horiz_angles_.size(), 4);
  88. ASSERT_EQ(angles.user_chans_.size(), 4);
  89. // load
  90. ASSERT_EQ(angles.loadFromFile ("../rs_driver/test/res/angle.csv"), 0);
  91. ASSERT_EQ(angles.user_chans_.size(), 4);
  92. ASSERT_EQ(angles.toUserChan(0), 3);
  93. ASSERT_EQ(angles.toUserChan(1), 2);
  94. ASSERT_EQ(angles.toUserChan(2), 1);
  95. ASSERT_EQ(angles.toUserChan(3), 0);
  96. }
  97. TEST(TestChanAngles, memberLoadFromFile_fail)
  98. {
  99. ChanAngles angles(4);
  100. ASSERT_EQ(angles.chan_num_, 4);
  101. // load non-existing file
  102. ASSERT_LT(angles.loadFromFile ("../rs_driver/test/res/non_exist.csv"), 0);
  103. ASSERT_EQ(angles.vert_angles_.size(), 4);
  104. ASSERT_EQ(angles.vert_angles_[0], 0);
  105. }
  106. TEST(TestChanAngles, memberLoadFromDifop)
  107. {
  108. uint8_t vert_angle_arr[] = {0x00, 0x01, 0x02,
  109. 0x01, 0x03, 0x04,
  110. 0x01, 0x05, 0x06,
  111. 0x00, 0x07, 0x08};
  112. uint8_t horiz_angle_arr[] = {0x00, 0x01, 0x11,
  113. 0x01, 0x02, 0x22,
  114. 0x00, 0x03, 0x33,
  115. 0x01, 0x04, 0x44};
  116. ChanAngles angles(4);
  117. ASSERT_EQ(angles.chan_num_, 4);
  118. // load
  119. ASSERT_EQ(angles.loadFromDifop((const RSCalibrationAngle*)vert_angle_arr, (const RSCalibrationAngle*)horiz_angle_arr), 0);
  120. ASSERT_EQ(angles.vert_angles_.size(), 4);
  121. ASSERT_EQ(angles.vert_angles_[0], 258);
  122. ASSERT_EQ(angles.vert_angles_[1], -772);
  123. ASSERT_EQ(angles.vert_angles_[2], -1286);
  124. ASSERT_EQ(angles.vert_angles_[3], 1800);
  125. ASSERT_EQ(angles.horiz_angles_[0], 273);
  126. ASSERT_EQ(angles.horiz_angles_[1], -546);
  127. ASSERT_EQ(angles.horiz_angles_[2], 819);
  128. ASSERT_EQ(angles.horiz_angles_[3], -1092);
  129. ASSERT_EQ(angles.user_chans_.size(), 4);
  130. ASSERT_EQ(angles.toUserChan(0), 2);
  131. ASSERT_EQ(angles.toUserChan(1), 1);
  132. ASSERT_EQ(angles.toUserChan(2), 0);
  133. ASSERT_EQ(angles.toUserChan(3), 3);
  134. }
  135. TEST(TestChanAngles, memberLoadFromDifop_fail)
  136. {
  137. uint8_t vert_angle_arr[] = {0x00, 0x01, 0x02,
  138. 0x01, 0x03, 0x04,
  139. 0xFF, 0x05, 0x06,
  140. 0xFF, 0x07, 0x08};
  141. uint8_t horiz_angle_arr[] = {0x00, 0x11, 0x22,
  142. 0x01, 0x33, 0x44,
  143. 0xFF, 0x55, 0x66,
  144. 0xFF, 0x77, 0x88};
  145. ChanAngles angles(4);
  146. ASSERT_EQ(angles.chan_num_, 4);
  147. // load invalid difop
  148. ASSERT_LT(angles.loadFromDifop((const RSCalibrationAngle*)vert_angle_arr, (const RSCalibrationAngle*)horiz_angle_arr), 0);
  149. ASSERT_EQ(angles.vert_angles_.size(), 4);
  150. ASSERT_EQ(angles.vert_angles_[0], 0);
  151. }
  152. TEST(TestChanAngles, memberLoadFromDifop_fail_angle)
  153. {
  154. uint8_t vert_angle_arr[] = {0x00, 0x01, 0x02,
  155. 0x01, 0x03, 0x04,
  156. 0x01, 0x05, 0x06,
  157. 0x00, 0x07, 0x08};
  158. // -9000 <= angle < 9000
  159. ChanAngles angles(4);
  160. ASSERT_EQ(angles.chan_num_, 4);
  161. {
  162. // 9000
  163. uint8_t horiz_angle_arr[] =
  164. {
  165. 0x00, 0x01, 0x11,
  166. 0x01, 0x02, 0x22,
  167. 0x00, 0x03, 0x33,
  168. 0x00, 0x23, 0x28
  169. };
  170. // load
  171. ASSERT_LT(angles.loadFromDifop((const RSCalibrationAngle*)vert_angle_arr, (const RSCalibrationAngle*)horiz_angle_arr), 0);
  172. }
  173. {
  174. // -9001
  175. uint8_t horiz_angle_arr[] =
  176. {
  177. 0x00, 0x01, 0x11,
  178. 0x01, 0x02, 0x22,
  179. 0x00, 0x03, 0x33,
  180. 0x01, 0x23, 0x29
  181. };
  182. // load
  183. ASSERT_LT(angles.loadFromDifop((const RSCalibrationAngle*)vert_angle_arr, (const RSCalibrationAngle*)horiz_angle_arr), 0);
  184. }
  185. }