58#include "modules/common_msgs/sensor_msgs/pointcloud.pb.h"
59#include "modules/drivers/lidar/lslidar/proto/config.pb.h"
60#include "modules/drivers/lidar/lslidar/proto/lslidar.pb.h"
65#define DEG_TO_RAD 0.017453292
66#define RAD_TO_DEG 57.29577951
90#define DEG2RAD(x) ((x) * 0.017453293)
91static const int SIZE_BLOCK = 100;
92static const int RAW_SCAN_SIZE = 3;
93static const int SCANS_PER_BLOCK = 32;
94static const int BLOCK_DATA_SIZE = (SCANS_PER_BLOCK * RAW_SCAN_SIZE);
96static const float ROTATION_RESOLUTION = 0.01f;
97static const uint16_t ROTATION_MAX_UNITS = 36000;
99static const unsigned int POINTS_ONE_CHANNEL_PER_SECOND = 20000;
100static const unsigned int BLOCKS_ONE_CHANNEL_PER_PKT = 12;
104static const float DISTANCE_MAX = 200.0f;
105static const float DISTANCE_MIN = 0.2f;
106static const float DISTANCE_RESOLUTION = 0.01f;
107static const double DISTANCE_RESOLUTION2 = 0.0000390625;
108static const float DISTANCE_RESOLUTION_NEW = 0.005f;
109static const float DISTANCE_MAX_UNITS
110 = (DISTANCE_MAX / DISTANCE_RESOLUTION + 1.0f);
113static const uint16_t UPPER_BANK = 0xeeff;
114static const uint16_t LOWER_BANK = 0xddff;
117static const int LSC16_FIRINGS_PER_BLOCK = 2;
118static const int LSC16_SCANS_PER_FIRING = 16;
119static const float LSC16_BLOCK_TDURATION = 100.0f;
120static const float LSC16_DSR_TOFFSET = 3.125f;
121static const float LSC16_FIRING_TOFFSET = 50.0f;
123static const int LSC32_FIRINGS_PER_BLOCK = 1;
124static const int LSC32_SCANS_PER_FIRING = 32;
125static const float LSC32_FIRING_TOFFSET = 100.0f;
126static const float LSC32_AZIMUTH_TOFFSET = 12.98f;
127static const float LSC32_DISTANCE_TOFFSET = 4.94f;
129static const int SCANS_PER_FIRING_C32 = 32;
130static const int FIRING_TOFFSET_C32 = 32;
131static const double R32_1_ = 0.0361;
132static const double CX4_R1_ = 0.0361;
133static const double CX4_C32W = 0.03416;
134static const double CX4_R1_90 = 0.0209;
135static const double CX4_conversionAngle_ = 20.25;
136static const double CX4_conversionAngle_90 = 27.76;
167static const int PACKET_SIZE = 1212;
168static const int POINTS_PER_PACKET = 171;
169static const int LS_POINTS_PER_PACKET = 149;
170static const int BLOCKS_PER_PACKET = 12;
171static const int PACKET_STATUS_SIZE = 4;
172static const int SCANS_PER_PACKET = (SCANS_PER_BLOCK * BLOCKS_PER_PACKET);
174const int ORDER_16[16] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
176 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
177 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31};
179static const double scan_altitude_original_A[32] = {
180 -16, -15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1,
181 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
184static const double scan_altitude_original_A3[32]
185 = {-16, 0, -15, 1, -14, 2, -13, 3, -12, 4, -11, 5, -10, 6, -9, 7,
186 -8, 8, -7, 9, -6, 10, -5, 11, -4, 12, -3, 13, -2, 14, -1, 15};
189static const double scan_altitude_original_C[32]
190 = {-18, -15, -12, -10, -8, -7, -6, -5, -4, -3.33, -2.66,
191 -3, -2.33, -2, -1.33, -1.66, -1, -0.66, 0, -0.33, 0.33, 0.66,
192 1.33, 1, 1.66, 2, 3, 4, 6, 8, 11, 14};
195static const double scan_altitude_original_C3[32]
196 = {-18, -1, -15, -0.66, -12, -0.33, -10, 0, -8, 0.33, -7,
197 0.66, -6, 1, -5, 1.33, -4, 1.66, -3.33, 2, -3, 3,
198 -2.66, 4, -2.33, 6, -2, 8, -1.66, 11, -1.33, 14};
203static const double c32_32_vertical_angle[32]
204 = {-16, -8, 0, 8, -15, -7, 1, 9, -14, -6, 2, 10, -13, -5, 3, 11,
205 -12, -4, 4, 12, -11, -3, 5, 13, -10, -2, 6, 14, -9, -1, 7, 15};
207static const double c32_70_vertical_angle[32]
208 = {-54, -31, -8, 2.66, -51.5, -28, -6.66, 4, -49, -25, -5.33,
209 5.5, -46, -22, -4, 7, -43, -18.5, -2.66, 9, -40, -15,
210 -1.33, 11, -37, -12, 0, 13, -34, -10, 1.33, 15};
213static const double c32_70_vertical_angle2[32]
214 = {-54.7, -31, -9, 3, -51.5, -28, -7.5, 4.5, -49, -25, -6.0,
215 6.0, -46, -22, -4.5, 7.5, -43, -18.5, -3.0, 9, -40, -15,
216 -1.5, 11, -37, -12, 0, 13, -34, -10.5, 1.5, 15};
219static const double c32_90_vertical_angle[32]
220 = {2.487, 25.174, 47.201, 68.819, 5.596, 27.811, 49.999, 71.525,
221 8.591, 30.429, 52.798, 74.274, 11.494, 33.191, 55.596, 77.074,
222 14.324, 36.008, 58.26, 79.938, 17.096, 38.808, 60.87, 82.884,
223 19.824, 41.603, 63.498, 85.933, 22.513, 44.404, 66.144, 89.105};
225static const double c16_vertical_angle[16]
226 = {-16, 0, -14, 2, -12, 4, -10, 6, -8, 8, -6, 10, -4, 12, -2, 14};
228static const double c8_vertical_angle[8] = {-12, 4, -8, 8, -4, 10, 0, 12};
229static const double c1_vertical_angle[8] = {0, 0, 0, 0, 0, 0, 0, 0};
231static const double scan_altitude_original_2[16]
232 = {-0.2617993877991494,
233 0.017453292519943295,
234 -0.22689280275926285,
236 -0.19198621771937624,
238 -0.15707963267948966,
240 -0.12217304763960307,
242 -0.08726646259971647,
244 -0.05235987755982989,
246 -0.017453292519943295,
248static const double scan_altitude_original_1[16]
249 = {-0.17453292519943295,
251 -0.15123277968530863,
253 -0.12793263417118436,
255 -0.10471975511965978,
257 -0.08141960960553547,
259 -0.05811946409141117,
261 -0.03490658503988659,
263 -0.01160643952576229,
264 0.17453292519943295};
266static const double scan_laser_altitude[8] = {
267 -0.11641346110802178,
268 -0.09302604913129776,
269 -0.06981317007977318,
270 -0.04642575810304917,
271 -0.023212879051524585,
273 0.023212879051524585,
277static const double scan_laser_altitude_ch32[8] = {
278 -0.24434609527920614,
279 -0.19198621771937624,
280 -0.13962634015954636,
281 -0.08726646259971647,
282 -0.03490658503988659,
288static const double big_angle[32] = {
289 -17, -16, -15, -14, -13, -12, -11, -10, -9, -8, -7,
290 -6, -5, -4.125, -4, -3.125, -3, -2.125, -2, -1.125, -1, -0.125,
291 0, 0.875, 1, 1.875, 2, 3, 4, 5, 6, 7};
293static const double sin_scan_laser_altitude[8] = {
294 std::sin(scan_laser_altitude[0]),
295 std::sin(scan_laser_altitude[1]),
296 std::sin(scan_laser_altitude[2]),
297 std::sin(scan_laser_altitude[3]),
298 std::sin(scan_laser_altitude[4]),
299 std::sin(scan_laser_altitude[5]),
300 std::sin(scan_laser_altitude[6]),
301 std::sin(scan_laser_altitude[7]),
304static const double sin_scan_laser_altitude_ch32[8] = {
305 std::sin(scan_laser_altitude_ch32[0]),
306 std::sin(scan_laser_altitude_ch32[1]),
307 std::sin(scan_laser_altitude_ch32[2]),
308 std::sin(scan_laser_altitude_ch32[3]),
309 std::sin(scan_laser_altitude_ch32[4]),
310 std::sin(scan_laser_altitude_ch32[5]),
311 std::sin(scan_laser_altitude_ch32[6]),
312 std::sin(scan_laser_altitude_ch32[7]),
316static const double scan_laser_altitude_ch128[32] = {
317 -0.29670597283903605, -0.2792526803190927, -0.2617993877991494,
318 -0.24434609527920614, -0.22689280275926285, -0.20943951023931956,
319 -0.19198621771937624, -0.17453292519943295, -0.15707963267948966,
320 -0.13962634015954636, -0.12217304763960307, -0.10471975511965978,
321 -0.08726646259971647, -0.06981317007977318, -0.05235987755982989,
322 -0.03490658503988659, -0.017453292519943295, 0.0,
323 0.017453292519943295, 0.03490658503988659, 0.05235987755982989,
324 0.06981317007977318, 0.08726646259971647, 0.10471975511965978,
325 0.12217304763960307, 0.13962634015954636, 0.15707963267948966,
326 0.17453292519943295, 0.19198621771937624, 0.20943951023931956,
327 0.22689280275926285, 0.24434609527920614,
330static const double sin_scan_laser_altitude_ch128[32] = {
331 std::sin(scan_laser_altitude_ch128[0]),
332 std::sin(scan_laser_altitude_ch128[1]),
333 std::sin(scan_laser_altitude_ch128[2]),
334 std::sin(scan_laser_altitude_ch128[3]),
335 std::sin(scan_laser_altitude_ch128[4]),
336 std::sin(scan_laser_altitude_ch128[5]),
337 std::sin(scan_laser_altitude_ch128[6]),
338 std::sin(scan_laser_altitude_ch128[7]),
339 std::sin(scan_laser_altitude_ch128[8]),
340 std::sin(scan_laser_altitude_ch128[9]),
341 std::sin(scan_laser_altitude_ch128[10]),
342 std::sin(scan_laser_altitude_ch128[11]),
343 std::sin(scan_laser_altitude_ch128[12]),
344 std::sin(scan_laser_altitude_ch128[13]),
345 std::sin(scan_laser_altitude_ch128[14]),
346 std::sin(scan_laser_altitude_ch128[15]),
347 std::sin(scan_laser_altitude_ch128[16]),
348 std::sin(scan_laser_altitude_ch128[17]),
349 std::sin(scan_laser_altitude_ch128[18]),
350 std::sin(scan_laser_altitude_ch128[19]),
351 std::sin(scan_laser_altitude_ch128[20]),
352 std::sin(scan_laser_altitude_ch128[21]),
353 std::sin(scan_laser_altitude_ch128[22]),
354 std::sin(scan_laser_altitude_ch128[23]),
355 std::sin(scan_laser_altitude_ch128[24]),
356 std::sin(scan_laser_altitude_ch128[25]),
357 std::sin(scan_laser_altitude_ch128[26]),
358 std::sin(scan_laser_altitude_ch128[27]),
359 std::sin(scan_laser_altitude_ch128[28]),
360 std::sin(scan_laser_altitude_ch128[29]),
361 std::sin(scan_laser_altitude_ch128[30]),
362 std::sin(scan_laser_altitude_ch128[31]),
365static const double scan_mirror_altitude[4] = {
367 0.005759586531581287,
368 0.011693705988362009,
369 0.017453292519943295,
372static const double sin_scan_mirror_altitude[4] = {
373 std::sin(scan_mirror_altitude[0]),
374 std::sin(scan_mirror_altitude[1]),
375 std::sin(scan_mirror_altitude[2]),
376 std::sin(scan_mirror_altitude[3]),
379static const double scan_mirror_altitude_ch128[4] = {
381 0.004363323129985824,
382 0.008726646259971648,
383 0.013089969389957472,
386static const double sin_scan_mirror_altitude_ch128[4] = {
387 std::sin(scan_mirror_altitude_ch128[0]),
388 std::sin(scan_mirror_altitude_ch128[1]),
389 std::sin(scan_mirror_altitude_ch128[2]),
390 std::sin(scan_mirror_altitude_ch128[3]),
393static const int POINTS_PER_PACKET_SINGLE_ECHO = 1192;
394static const int POINTS_PER_PACKET_DOUBLE_ECHO = 1188;
493static const float nan = std::numeric_limits<float>::signaling_NaN();
512 const std::shared_ptr<LslidarScan>& scan_msg,
513 const std::shared_ptr<apollo::drivers::PointCloud>& out_msg)
515 virtual void setup();
518 virtual void Order(std::shared_ptr<apollo::drivers::PointCloud> cloud) = 0;
547 const float& raw_distance,
549 const uint16_t rotation,
555 const float& raw_distance,
557 const double rotation,
567 const std::shared_ptr<apollo::drivers::lslidar::LslidarScan>&
569 const std::shared_ptr<apollo::drivers::PointCloud>& out_msg);
570 void Order(std::shared_ptr<apollo::drivers::PointCloud> cloud);
575 std::shared_ptr<apollo::drivers::PointCloud> pc,
578 double previous_packet_stamp_;
579 uint64_t gps_base_usec_;
580 uint64_t last_packet_time;
581 uint8_t difop_data[PACKET_SIZE];
593 const std::shared_ptr<apollo::drivers::lslidar::LslidarScan>&
595 const std::shared_ptr<apollo::drivers::PointCloud>& out_msg);
596 void Order(std::shared_ptr<apollo::drivers::PointCloud> cloud);
601 std::shared_ptr<apollo::drivers::PointCloud> pc,
604 double adjust_angle_two;
605 double adjust_angle_three;
606 double adjust_angle_four;
609 double previous_packet_stamp_;
610 uint64_t gps_base_usec_;
611 uint64_t last_packet_time;
612 uint64_t last_point_time;
613 uint8_t difop_data[PACKET_SIZE];
619 double scan_altitude_A[32] = {0};
620 double scan_altitude_C[32] = {0};
631 const std::shared_ptr<apollo::drivers::lslidar::LslidarScan>&
633 const std::shared_ptr<apollo::drivers::PointCloud>& out_msg);
634 void Order(std::shared_ptr<apollo::drivers::PointCloud> cloud);
641 std::shared_ptr<apollo::drivers::PointCloud> pc,
645 double previous_packet_stamp_;
646 uint64_t gps_base_usec_;
647 uint64_t last_packet_time;
648 uint64_t last_point_time;
649 uint8_t difop_data[PACKET_SIZE];
656 double cos_scan_altitude[32] = {0};
657 double sin_scan_altitude[32] = {0};
658 double cos_azimuth_table[36000];
659 double sin_azimuth_table[36000];
662 double distance_unit_;
665 bool is_get_scan_altitude_;
674 const std::shared_ptr<LslidarScan>& scan_msg,
675 const std::shared_ptr<apollo::drivers::PointCloud>& out_msg);
676 void Order(std::shared_ptr<apollo::drivers::PointCloud> cloud);
682 std::shared_ptr<apollo::drivers::PointCloud> pc);
685 double previous_packet_stamp_;
686 uint64_t gps_base_usec_;
687 uint64_t last_packet_time;
688 uint8_t difop_data[PACKET_SIZE];
698 const std::shared_ptr<LslidarScan>& scan_msg,
699 const std::shared_ptr<apollo::drivers::PointCloud>& out_msg);
700 void Order(std::shared_ptr<apollo::drivers::PointCloud> cloud);
706 std::shared_ptr<apollo::drivers::PointCloud> pc);
709 double previous_packet_stamp_;
710 uint64_t gps_base_usec_;
711 uint64_t last_packet_time;
712 uint64_t last_point_time;
715 uint8_t difop_data[PACKET_SIZE];
716 Firing firings[POINTS_PER_PACKET];
725 const std::shared_ptr<LslidarScan>& scan_msg,
726 const std::shared_ptr<apollo::drivers::PointCloud>& out_msg);
727 void Order(std::shared_ptr<apollo::drivers::PointCloud> cloud);
733 std::shared_ptr<apollo::drivers::PointCloud> pc);
736 double previous_packet_stamp_;
737 uint64_t gps_base_usec_;
738 uint64_t last_packet_time;
739 uint64_t last_point_time;
742 uint8_t difop_data[PACKET_SIZE];
743 Firing firings[POINTS_PER_PACKET];
752 const std::shared_ptr<LslidarScan>& scan_msg,
753 const std::shared_ptr<apollo::drivers::PointCloud>& out_msg);
754 void Order(std::shared_ptr<apollo::drivers::PointCloud> cloud);
760 std::shared_ptr<apollo::drivers::PointCloud> pc);
763 double previous_packet_stamp_;
764 uint64_t gps_base_usec_;
765 uint64_t last_packet_time;
766 uint64_t last_point_time;
769 uint8_t difop_data[PACKET_SIZE];
770 Firing firings[POINTS_PER_PACKET];
779 const std::shared_ptr<LslidarScan>& scan_msg,
780 const std::shared_ptr<apollo::drivers::PointCloud>& out_msg);
781 void Order(std::shared_ptr<apollo::drivers::PointCloud> cloud);
787 std::shared_ptr<apollo::drivers::PointCloud> pc);
790 double previous_packet_stamp_;
791 uint64_t gps_base_usec_;
792 uint64_t last_packet_time;
793 uint64_t last_point_time;
796 double theat1_s[128];
797 double theat2_s[128];
798 double theat1_c[128];
799 double theat2_c[128];
800 double point_time_diff;
801 uint8_t difop_data[PACKET_SIZE];
802 Firing firings[POINTS_PER_PACKET];
811 const std::shared_ptr<LslidarScan>& scan_msg,
812 const std::shared_ptr<PointCloud>& out_msg);
813 void Order(std::shared_ptr<PointCloud> cloud);
819 std::shared_ptr<PointCloud> pc);
822 double previous_packet_stamp_;
823 uint64_t gps_base_usec_;
824 uint64_t last_packet_time;
825 uint64_t last_point_time;
828 uint8_t difop_data[PACKET_SIZE];
829 Firing firings[POINTS_PER_PACKET];
838 const std::shared_ptr<LslidarScan>& scan_msg,
839 const std::shared_ptr<PointCloud>& out_msg);
840 void Order(std::shared_ptr<PointCloud> cloud);
846 std::shared_ptr<PointCloud> pc);
849 double previous_packet_stamp_;
850 uint64_t gps_base_usec_;
851 uint64_t last_packet_time;
852 uint64_t last_point_time;
854 double sinTheta_2[128];
855 double prism_angle128[4];
857 uint8_t difop_data[PACKET_SIZE];
858 Firing firings[POINTS_PER_PACKET];
867 const std::shared_ptr<LslidarScan>& scan_msg,
868 const std::shared_ptr<PointCloud>& out_msg);
869 void Order(std::shared_ptr<PointCloud> cloud);
875 std::shared_ptr<PointCloud> pc);
878 double previous_packet_stamp_;
879 uint64_t gps_base_usec_;
880 uint64_t last_packet_time;
881 uint64_t last_point_time;
883 uint8_t difop_data[PACKET_SIZE];
884 Firing firings[POINTS_PER_PACKET];
893 const std::shared_ptr<LslidarScan>& scan_msg,
894 const std::shared_ptr<PointCloud>& out_msg);
895 void Order(std::shared_ptr<PointCloud> cloud);
901 std::shared_ptr<PointCloud> out_cloud);
907 std::shared_ptr<PointCloud> pc);
910 double previous_packet_stamp_;
911 uint64_t gps_base_usec_;
912 uint64_t last_packet_time;
913 uint64_t last_point_time;
915 uint8_t difop_data[PACKET_SIZE];
919 double cos_table[36000]{};
920 double sin_table[36000]{};
921 double cos_mirror_angle[4]{};
922 double sin_mirror_angle[4]{};
923 double g_fAngleAcc_V = 0.01;
924 bool is_add_frame_ =
false;
926 std::shared_ptr<PointCloud> cur_pc;
927 std::shared_ptr<PointCloud> pre_pc;
928 int packet_number_ = 0;
Calibration class storing entire configuration for the Lslidar
void GeneratePointcloud(const std::shared_ptr< apollo::drivers::lslidar::LslidarScan > &scan_msg, const std::shared_ptr< apollo::drivers::PointCloud > &out_msg)
void Order(std::shared_ptr< apollo::drivers::PointCloud > cloud)
void GeneratePointcloud(const std::shared_ptr< apollo::drivers::lslidar::LslidarScan > &scan_msg, const std::shared_ptr< apollo::drivers::PointCloud > &out_msg)
void Order(std::shared_ptr< apollo::drivers::PointCloud > cloud)
void Order(std::shared_ptr< apollo::drivers::PointCloud > cloud)
Lslidar401Parser(const Config &config)
void GeneratePointcloud(const std::shared_ptr< LslidarScan > &scan_msg, const std::shared_ptr< apollo::drivers::PointCloud > &out_msg)
Set up for data processing.
void Order(std::shared_ptr< PointCloud > cloud)
void GeneratePointcloud(const std::shared_ptr< LslidarScan > &scan_msg, const std::shared_ptr< PointCloud > &out_msg)
void Order(std::shared_ptr< PointCloud > cloud)
void GeneratePointcloud(const std::shared_ptr< LslidarScan > &scan_msg, const std::shared_ptr< PointCloud > &out_msg)
void Order(std::shared_ptr< PointCloud > cloud)
void GeneratePointcloud(const std::shared_ptr< LslidarScan > &scan_msg, const std::shared_ptr< PointCloud > &out_msg)
void Order(std::shared_ptr< apollo::drivers::PointCloud > cloud)
void GeneratePointcloud(const std::shared_ptr< LslidarScan > &scan_msg, const std::shared_ptr< apollo::drivers::PointCloud > &out_msg)
Set up for data processing.
void GeneratePointcloud(const std::shared_ptr< LslidarScan > &scan_msg, const std::shared_ptr< apollo::drivers::PointCloud > &out_msg)
Set up for data processing.
void Order(std::shared_ptr< apollo::drivers::PointCloud > cloud)
void GeneratePointcloud(const std::shared_ptr< LslidarScan > &scan_msg, const std::shared_ptr< apollo::drivers::PointCloud > &out_msg)
Set up for data processing.
void Order(std::shared_ptr< apollo::drivers::PointCloud > cloud)
void GeneratePointcloud(const std::shared_ptr< LslidarScan > &scan_msg, const std::shared_ptr< apollo::drivers::PointCloud > &out_msg)
Set up for data processing.
void Order(std::shared_ptr< apollo::drivers::PointCloud > cloud)
void Order(std::shared_ptr< apollo::drivers::PointCloud > cloud)
void decodePacket(const RawPacket_C32 *packet)
void GeneratePointcloud(const std::shared_ptr< apollo::drivers::lslidar::LslidarScan > &scan_msg, const std::shared_ptr< apollo::drivers::PointCloud > &out_msg)
bool checkPacketValidity(const RawPacket_C32 *packet)
void Order(std::shared_ptr< PointCloud > cloud)
void GeneratePointcloud(const std::shared_ptr< LslidarScan > &scan_msg, const std::shared_ptr< PointCloud > &out_msg)
int convertCoordinate(const struct Firing_LS128S2 &lidardata)
static LslidarParser * CreateParser(Config config)
Lslidar data conversion class
float cos_azimuth_table[ROTATION_MAX_UNITS]
virtual void GeneratePointcloud(const std::shared_ptr< LslidarScan > &scan_msg, const std::shared_ptr< apollo::drivers::PointCloud > &out_msg)=0
Set up for data processing.
bool need_two_pt_correction_
double cos_scan_altitude_caliration[LSC32_SCANS_PER_FIRING]
uint64_t current_packet_time
virtual void setup()
Set up for on-line operation.
virtual void Order(std::shared_ptr< apollo::drivers::PointCloud > cloud)=0
void ComputeCoords2(int Laser_ring, int Type, const float &raw_distance, LaserCorrection *corrections, const double rotation, PointXYZIT *point)
uint64_t previous_packet_time
bool is_scan_valid(int rotation, float distance)
void ComputeCoords(const float &raw_distance, LaserCorrection *corrections, const uint16_t rotation, PointXYZIT *point)
const double get_last_timestamp()
float sin_azimuth_table[ROTATION_MAX_UNITS]
double sin_scan_altitude_caliration[LSC32_SCANS_PER_FIRING]
struct apollo::drivers::lslidar::parser::raw_block raw_block_t
Raw Lslidar data block.
struct apollo::drivers::lslidar::parser::raw_packet raw_packet_t
uint16_t azimuth[SCANS_PER_PACKET]
double intensity[SCANS_PER_PACKET]
uint16_t firing_azimuth[BLOCKS_PER_PACKET]
double distance[SCANS_PER_PACKET]
correction values for a single laser
uint8_t data[BLOCK_DATA_SIZE]
RawBlock blocks[BLOCKS_PER_PACKET]
Point points[POINTS_PER_PACKET]
Point points[POINTS_PER_PACKET]
uint8_t data[BLOCK_DATA_SIZE]
combine rotation1 and rotation2 together to get 0-35999, divide by 100 to get degrees
uint16_t header
UPPER_BANK or LOWER_BANK
raw_block_t blocks[BLOCKS_PER_PACKET]
uint8_t gps_timestamp[10]
used for unpacking the first two data bytes in a block