146 const std::shared_ptr<apollo::drivers::lslidar::LslidarScan> &scan) {
152 if (scan->firing_pkts().empty()) {
157 ADEBUG <<
"Publishing a full Lslidar scan.";
159 std::unique_lock<std::mutex> lock(
mutex_);
160 packet->set_data(
bytes, FIRING_DATA_PACKET_SIZE);
161 scan->mutable_header()->set_timestamp_sec(
gps_time);
162 ADEBUG <<
"**************************************************************"
169 scan->mutable_header()->set_timestamp_sec(
gps_time);
174 std::shared_ptr<apollo::drivers::lslidar::LslidarScan> scan) {
185 int PKT_DATA_LENGTH = 1212;
186 void *data_ptr = malloc(PKT_DATA_LENGTH);
188 reinterpret_cast<uint8_t *
>(
191 packet->set_data(data_ptr, PKT_DATA_LENGTH);
193 AINFO <<
"scan->firing_pkts_size(): " << scan->firing_pkts_size();
203 int rc =
input_->GetPacket(packet);
207 time_t t = time(NULL);
213 uint8_t *data =
reinterpret_cast<uint8_t *
>(
214 const_cast<char *
>(packet->
data().c_str()));
216 if (0xff == data[1200]) {
219 = (data[1201] * pow(2, 32)
220 + data[1202] * pow(2, 24)
221 + data[1203] * pow(2, 16)
222 + data[1204] * pow(2, 8)
223 + data[1205] * pow(2, 0));
225 = (
static_cast<uint16_t
>(data[1206])
226 +
static_cast<uint16_t
>(data[1207])
228 +
static_cast<uint16_t
>(data[1208])
230 +
static_cast<uint16_t
>(data[1209])
234 =
static_cast<uint16_t
>(data[1200])
237 =
static_cast<uint16_t
>(data[1201]) - 1;
239 =
static_cast<uint16_t
>(data[1202]);
241 =
static_cast<uint16_t
>(data[1203]);
243 =
static_cast<uint16_t
>(data[1204]);
248 =
static_cast<uint16_t
>(data[1205])
251 = (
static_cast<uint16_t
>(data[1206])
252 +
static_cast<uint16_t
>(
255 +
static_cast<uint16_t
>(
258 +
static_cast<uint16_t
>(
268 =
static_cast<uint16_t
>(data[1205]);
270 = (
static_cast<uint16_t
>(data[1206])
271 +
static_cast<uint16_t
>(
274 +
static_cast<uint16_t
>(
277 +
static_cast<uint16_t
>(
285 uint8_t *data =
reinterpret_cast<uint8_t *
>(
286 const_cast<char *
>(packet->
data().c_str()));
288 = (
static_cast<uint16_t
>(data[1200])
289 +
static_cast<uint16_t
>(data[1201])
291 +
static_cast<uint16_t
>(data[1202])
293 +
static_cast<uint16_t
>(data[1203])
309 uint8_t *data =
reinterpret_cast<uint8_t *
>(
310 const_cast<char *
>(packet->
data().c_str()));
311 int azi1 = 256 *
static_cast<uint16_t
>(data[3])
312 +
static_cast<uint16_t
>(data[2]);
313 int azi2 = 256 *
static_cast<uint16_t
>(data[1103])
314 +
static_cast<uint16_t
>(data[1102]);
316 if (((azi1 > 35000 && azi2 < 1000)
328 bool is_found_frame_header =
false;
330 && !is_found_frame_header) {
334 int rc =
input_->GetPacket(packet);
335 AINFO <<
"[debug ] line: " << __LINE__
336 <<
" file: " << __FILE__;
339 time_t t = time(NULL);
344 uint8_t *data =
reinterpret_cast<uint8_t *
>(
345 const_cast<char *
>(packet->
data().c_str()));
347 ==
static_cast<uint16_t
>(data[1194])) {
349 = (
static_cast<uint16_t
>(data[1195]) * 0
350 + (
static_cast<uint16_t
>(data[1196])
352 + (
static_cast<uint16_t
>(data[1197])
354 + (
static_cast<uint16_t
>(data[1198])
356 +
static_cast<uint16_t
>(data[1199])
359 = (
static_cast<uint16_t
>(data[1200]) << 24)
360 + (
static_cast<uint16_t
>(data[1201]) << 16)
361 + (
static_cast<uint16_t
>(data[1202]) << 8)
362 + (
static_cast<uint16_t
>(data[1203]));
365 struct tm cur_time {};
366 memset(&cur_time, 0,
sizeof(cur_time));
367 cur_time.tm_sec =
static_cast<uint16_t
>(data[1199]);
368 cur_time.tm_min =
static_cast<uint16_t
>(data[1198]);
370 =
static_cast<uint16_t
>(data[1197]);
372 =
static_cast<uint16_t
>(data[1196]);
374 =
static_cast<uint16_t
>(data[1195]) - 1;
375 cur_time.tm_year =
static_cast<uint16_t
>(data[1194])
378 =
static_cast<uint64_t
>(timegm(&cur_time));
380 + (
static_cast<uint16_t
>(data[1202]) << 8)
381 + (
static_cast<uint16_t
>(data[1201]) << 16)
382 + (
static_cast<uint16_t
>(data[1200])
393 uint8_t *data =
reinterpret_cast<uint8_t *
>(
394 const_cast<char *
>(packet->
data().c_str()));
395 int return_mode =
static_cast<uint16_t
>(data[1205]);
397 if (return_mode == 1) {
398 for (
size_t point_idx = 0;
399 point_idx < LS_POINTS_PER_PACKET_SINGLE_ECHO;
401 if ((
static_cast<uint16_t
>(data[point_idx]) == 0xff)
402 && (
static_cast<uint16_t
>(data[point_idx + 1]) == 0xaa)
403 && (
static_cast<uint16_t
>(data[point_idx + 2]) == 0xbb)
404 && (
static_cast<uint16_t
>(data[point_idx + 3]) == 0xcc)
405 && (
static_cast<uint16_t
>(data[point_idx + 4])
408 is_found_frame_header =
true;
414 for (
size_t point_idx = 0;
415 point_idx < LS_POINTS_PER_PACKET_DOUBLE_ECHO;
417 if ((
static_cast<uint16_t
>(data[point_idx]) == 0xff)
418 && (
static_cast<uint16_t
>(data[point_idx + 1]) == 0xaa)
419 && (
static_cast<uint16_t
>(data[point_idx + 2]) == 0xbb)
420 && (
static_cast<uint16_t
>(data[point_idx + 3]) == 0xcc)
421 && (
static_cast<uint16_t
>(data[point_idx + 4])
424 is_found_frame_header =
true;
425 AERROR <<
"\none circle! scan->firing_pkts_size(): "
426 << scan->firing_pkts_size();
437 bool is_found_frame_header =
false;
439 && !is_found_frame_header) {
443 int rc =
input_->GetPacket(packet);
444 AINFO <<
"[debug ] line: " << __LINE__
445 <<
" file: " << __FILE__;
452 time_t t = time(NULL);
459 uint8_t *data =
reinterpret_cast<uint8_t *
>(
460 const_cast<char *
>(packet->
data().c_str()));
462 =
static_cast<uint16_t
>(data[1197]);
464 =
static_cast<uint16_t
>(data[1198]);
466 =
static_cast<uint16_t
>(data[1199]);
471 = (
static_cast<uint16_t
>(data[1203])
472 +
static_cast<uint16_t
>(data[1202])
474 +
static_cast<uint16_t
>(data[1201])
476 +
static_cast<uint16_t
>(data[1200])
481 = (
static_cast<uint16_t
>(data[1203])
482 +
static_cast<uint16_t
>(data[1202])
484 +
static_cast<uint16_t
>(data[1201])
486 +
static_cast<uint16_t
>(data[1200])
498 uint8_t *data =
reinterpret_cast<uint8_t *
>(
499 const_cast<char *
>(packet->
data().c_str()));
501 for (
size_t point_idx = 0; point_idx < POINTS_PER_PACKET;
503 if ((
static_cast<uint16_t
>(data[point_idx]) == 0xff)
504 && (
static_cast<uint16_t
>(data[point_idx + 1]) == 0xaa)
505 && (
static_cast<uint16_t
>(data[point_idx + 2]) == 0xbb)
506 && (
static_cast<uint16_t
>(data[point_idx + 3]) == 0xcc)) {
508 is_found_frame_header =
true;
509 AERROR <<
"\none circle! scan->firing_pkts_size(): "
510 << scan->firing_pkts_size();
522 std::shared_ptr<apollo::drivers::lslidar::LslidarScan> scans
523 = std::make_shared<apollo::drivers::lslidar::LslidarScan>();
524 std::shared_ptr<LslidarPacket> packet
525 = std::make_shared<LslidarPacket>();
535 uint8_t *data =
reinterpret_cast<uint8_t *
>(
536 const_cast<char *
>(packet->data().c_str()));
538 std::unique_lock<std::mutex> lock(
mutex_);
539 memcpy(
bytes, data, FIRING_DATA_PACKET_SIZE);
542 time_t t = time(NULL);
546 if (data[0] == 0xA5 && data[1] == 0xFF && data[2] == 0x00
547 && data[3] == 0x5A) {
553 =
static_cast<uint16_t
>(data[36] + 100);
554 current_time.tm_mon =
static_cast<uint16_t
>(data[37] - 1);
561 =
static_cast<uint16_t
>(data[52] + 100);
562 current_time.tm_mon =
static_cast<uint16_t
>(data[53] - 1);
564 if (data[44] == 0x00) {
566 }
else if (data[44] == 0x01) {
571 =
static_cast<uint16_t
>(data[36] + 100);
572 current_time.tm_mon =
static_cast<uint16_t
>(data[37] - 1);
576 =
static_cast<uint16_t
>(data[52] + 100);
577 current_time.tm_mon =
static_cast<uint16_t
>(data[53] - 1);
579 if (data[44] == 0x00) {
581 }
else if (data[44] == 0x01) {
589 =
static_cast<uint16_t
>(data[52] + 100);
590 current_time.tm_mon =
static_cast<uint16_t
>(data[53] - 1);