123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223 |
- #include <gtest/gtest.h>
- #include <rs_driver/driver/decoder/chan_angles.hpp>
- using namespace robosense::lidar;
- TEST(TestChanAngles, genUserChan)
- {
- std::vector<int32_t> vert_angles;
- std::vector<uint16_t> user_chans;
- vert_angles.push_back(100);
- vert_angles.push_back(0);
- vert_angles.push_back(-100);
- vert_angles.push_back(200);
- ChanAngles::genUserChan (vert_angles, user_chans);
- ASSERT_EQ(user_chans.size(), 4);
- ASSERT_EQ(user_chans[0], 2);
- ASSERT_EQ(user_chans[1], 1);
- ASSERT_EQ(user_chans[2], 0);
- ASSERT_EQ(user_chans[3], 3);
- }
- TEST(TestChanAngles, loadFromFile)
- {
- std::vector<int32_t> vert_angles, horiz_angles;
- // load
- ASSERT_EQ(ChanAngles::loadFromFile ("../rs_driver/test/res/angle.csv", 4, vert_angles, horiz_angles), 0);
- ASSERT_EQ(vert_angles.size(), 4);
- ASSERT_EQ(horiz_angles.size(), 4);
- ASSERT_EQ(vert_angles[0], 500);
- ASSERT_EQ(vert_angles[1], 250);
- ASSERT_EQ(vert_angles[2], 0);
- ASSERT_EQ(vert_angles[3], -250);
- ASSERT_EQ(horiz_angles[0], 10);
- ASSERT_EQ(horiz_angles[1], -20);
- ASSERT_EQ(horiz_angles[2], 0);
- ASSERT_EQ(horiz_angles[3], -100);
- // load again
- ASSERT_EQ(ChanAngles::loadFromFile ("../rs_driver/test/res/angle.csv", 4, vert_angles, horiz_angles), 0);
- ASSERT_EQ(vert_angles.size(), 4);
- ASSERT_EQ(horiz_angles.size(), 4);
- // load non-existing file
- ASSERT_LT(ChanAngles::loadFromFile ("../rs_driver/test/res/non_exist.csv", 4, vert_angles, horiz_angles), 0);
- ASSERT_EQ(vert_angles.size(), 0);
- ASSERT_EQ(horiz_angles.size(), 0);
- }
- TEST(TestChanAngles, loadFromDifop)
- {
- uint8_t vert_angle_arr[] = {0x00, 0x01, 0x02,
- 0x01, 0x03, 0x04,
- 0x01, 0x05, 0x06,
- 0x00, 0x07, 0x08};
- uint8_t horiz_angle_arr[] = {0x00, 0x01, 0x11,
- 0x01, 0x02, 0x22,
- 0x00, 0x03, 0x33,
- 0x01, 0x04, 0x44};
- std::vector<int32_t> vert_angles, horiz_angles;
- // load
- ASSERT_EQ(ChanAngles::loadFromDifop(
- (const RSCalibrationAngle*)vert_angle_arr,
- (const RSCalibrationAngle*)horiz_angle_arr,
- 4,
- vert_angles,
- horiz_angles), 0);
- ASSERT_EQ(vert_angles.size(), 4);
- ASSERT_EQ(horiz_angles.size(), 4);
- ASSERT_EQ(vert_angles[0], 258);
- ASSERT_EQ(vert_angles[1], -772);
- ASSERT_EQ(vert_angles[2], -1286);
- ASSERT_EQ(vert_angles[3], 1800);
- ASSERT_EQ(horiz_angles[0], 273);
- ASSERT_EQ(horiz_angles[1], -546);
- ASSERT_EQ(horiz_angles[2], 819);
- ASSERT_EQ(horiz_angles[3], -1092);
- // load again
- ASSERT_EQ(ChanAngles::loadFromDifop(
- (const RSCalibrationAngle*)vert_angle_arr,
- (const RSCalibrationAngle*)horiz_angle_arr,
- 4,
- vert_angles,
- horiz_angles), 0);
- ASSERT_EQ(vert_angles.size(), 4);
- ASSERT_EQ(horiz_angles.size(), 4);
- }
- TEST(TestChanAngles, memberLoadFromFile)
- {
- ChanAngles angles(4);
- // not loading yet
- ASSERT_EQ(angles.chan_num_, 4);
- ASSERT_EQ(angles.vert_angles_.size(), 4);
- ASSERT_EQ(angles.horiz_angles_.size(), 4);
- ASSERT_EQ(angles.user_chans_.size(), 4);
- // load
- ASSERT_EQ(angles.loadFromFile ("../rs_driver/test/res/angle.csv"), 0);
- ASSERT_EQ(angles.user_chans_.size(), 4);
- ASSERT_EQ(angles.toUserChan(0), 3);
- ASSERT_EQ(angles.toUserChan(1), 2);
- ASSERT_EQ(angles.toUserChan(2), 1);
- ASSERT_EQ(angles.toUserChan(3), 0);
- }
- TEST(TestChanAngles, memberLoadFromFile_fail)
- {
- ChanAngles angles(4);
- ASSERT_EQ(angles.chan_num_, 4);
- // load non-existing file
- ASSERT_LT(angles.loadFromFile ("../rs_driver/test/res/non_exist.csv"), 0);
- ASSERT_EQ(angles.vert_angles_.size(), 4);
- ASSERT_EQ(angles.vert_angles_[0], 0);
- }
- TEST(TestChanAngles, memberLoadFromDifop)
- {
- uint8_t vert_angle_arr[] = {0x00, 0x01, 0x02,
- 0x01, 0x03, 0x04,
- 0x01, 0x05, 0x06,
- 0x00, 0x07, 0x08};
- uint8_t horiz_angle_arr[] = {0x00, 0x01, 0x11,
- 0x01, 0x02, 0x22,
- 0x00, 0x03, 0x33,
- 0x01, 0x04, 0x44};
- ChanAngles angles(4);
- ASSERT_EQ(angles.chan_num_, 4);
- // load
- ASSERT_EQ(angles.loadFromDifop((const RSCalibrationAngle*)vert_angle_arr, (const RSCalibrationAngle*)horiz_angle_arr), 0);
- ASSERT_EQ(angles.vert_angles_.size(), 4);
- ASSERT_EQ(angles.vert_angles_[0], 258);
- ASSERT_EQ(angles.vert_angles_[1], -772);
- ASSERT_EQ(angles.vert_angles_[2], -1286);
- ASSERT_EQ(angles.vert_angles_[3], 1800);
- ASSERT_EQ(angles.horiz_angles_[0], 273);
- ASSERT_EQ(angles.horiz_angles_[1], -546);
- ASSERT_EQ(angles.horiz_angles_[2], 819);
- ASSERT_EQ(angles.horiz_angles_[3], -1092);
- ASSERT_EQ(angles.user_chans_.size(), 4);
- ASSERT_EQ(angles.toUserChan(0), 2);
- ASSERT_EQ(angles.toUserChan(1), 1);
- ASSERT_EQ(angles.toUserChan(2), 0);
- ASSERT_EQ(angles.toUserChan(3), 3);
- }
- TEST(TestChanAngles, memberLoadFromDifop_fail)
- {
- uint8_t vert_angle_arr[] = {0x00, 0x01, 0x02,
- 0x01, 0x03, 0x04,
- 0xFF, 0x05, 0x06,
- 0xFF, 0x07, 0x08};
- uint8_t horiz_angle_arr[] = {0x00, 0x11, 0x22,
- 0x01, 0x33, 0x44,
- 0xFF, 0x55, 0x66,
- 0xFF, 0x77, 0x88};
- ChanAngles angles(4);
- ASSERT_EQ(angles.chan_num_, 4);
- // load invalid difop
- ASSERT_LT(angles.loadFromDifop((const RSCalibrationAngle*)vert_angle_arr, (const RSCalibrationAngle*)horiz_angle_arr), 0);
- ASSERT_EQ(angles.vert_angles_.size(), 4);
- ASSERT_EQ(angles.vert_angles_[0], 0);
- }
- TEST(TestChanAngles, memberLoadFromDifop_fail_angle)
- {
- uint8_t vert_angle_arr[] = {0x00, 0x01, 0x02,
- 0x01, 0x03, 0x04,
- 0x01, 0x05, 0x06,
- 0x00, 0x07, 0x08};
- // -9000 <= angle < 9000
- ChanAngles angles(4);
- ASSERT_EQ(angles.chan_num_, 4);
- {
- // 9000
- uint8_t horiz_angle_arr[] =
- {
- 0x00, 0x01, 0x11,
- 0x01, 0x02, 0x22,
- 0x00, 0x03, 0x33,
- 0x00, 0x23, 0x28
- };
- // load
- ASSERT_LT(angles.loadFromDifop((const RSCalibrationAngle*)vert_angle_arr, (const RSCalibrationAngle*)horiz_angle_arr), 0);
- }
- {
- // -9001
- uint8_t horiz_angle_arr[] =
- {
- 0x00, 0x01, 0x11,
- 0x01, 0x02, 0x22,
- 0x00, 0x03, 0x33,
- 0x01, 0x23, 0x29
- };
- // load
- ASSERT_LT(angles.loadFromDifop((const RSCalibrationAngle*)vert_angle_arr, (const RSCalibrationAngle*)horiz_angle_arr), 0);
- }
- }
|