33 if (conf_.has_convert_thread_nums()) {
37 driver_ptr_ = std::make_shared<HesaiLidarSdk<LidarPointXYZIRT>>();
40 param.input_param.source_type
42 param.input_param.pcap_path = conf_.
pcap_path();
45 param.input_param.device_ip_address = conf_.
device_ip();
46 param.input_param.host_ip_address = conf_.
host_ip();
47 param.input_param.ptc_port = conf_.
ptc_port();
48 param.input_param.udp_port = conf_.
udp_port();
49 param.input_param.multicast_ip_address =
"";
50 param.input_param.read_pcap =
true;
52 param.decoder_param.pcap_play_synchronization =
false;
54 param.decoder_param.enable_parser_thread =
true;
56 param.decoder_param.transform_param.x = 0;
57 param.decoder_param.transform_param.y = 0;
58 param.decoder_param.transform_param.z = 0;
59 param.decoder_param.transform_param.pitch = 0;
60 param.decoder_param.transform_param.yaw = 0;
61 param.decoder_param.transform_param.roll = 0;
65 driver_ptr_->RegRecvCallback(std::bind(
69 == LidarConfigBase_SourceType_RAW_PACKET) {
70 param.decoder_param.enable_udp_thread =
false;
74 == LidarConfigBase_SourceType_ONLINE_LIDAR) {
75 driver_ptr_->RegRecvCallback(std::bind(
78 std::placeholders::_1,
79 std::placeholders::_2));
82 if (!driver_ptr_->Init(param)) {
92 const std::shared_ptr<HesaiUdpFrame>& scan_message) {
95 for (
int i = 0, packet_size = scan_message->packets_size(); i < packet_size;
97 driver_ptr_->lidar_ptr_->origin_packets_buffer_.emplace_back(
98 reinterpret_cast<const uint8_t*
>(
99 scan_message->packets(i).data().c_str()),
100 scan_message->packets(i).data().length());
105 const LidarDecodedFrame<hesai::lidar::LidarPointXYZIRT>& msg) {
108 cloud_message->set_is_dense(
false);
109 cloud_message->mutable_header()->set_timestamp_sec(
112 double timestamp_diff = 0.0;
113 int point_size = msg.points_num;
115 if (point_size > 0) {
116 const double pcl_timestamp = msg.points[point_size - 1].timestamp;
117 cloud_message->set_measurement_time(pcl_timestamp);
118 timestamp_diff = pcl_timestamp - msg.points[0].timestamp;
120 cloud_message->set_measurement_time(0.0);
123 for (
int i = 0; i < point_size; ++i) {
124 cloud_message->add_point();
127#pragma omp parallel for schedule(static) num_threads(convert_threads_num_)
128 for (
int i = 0; i < point_size; ++i) {
129 cloud_message->mutable_point(i)->set_x(msg.points[i].x);
130 cloud_message->mutable_point(i)->set_y(msg.points[i].y);
131 cloud_message->mutable_point(i)->set_z(msg.points[i].z);
132 cloud_message->mutable_point(i)->set_timestamp(
134 msg.points[i].timestamp));
135 cloud_message->mutable_point(i)->set_intensity(msg.points[i].intensity);
138 AINFO << boost::format(
"point cnt = %d; timestamp_diff = %.9f s")
139 % point_size % timestamp_diff;
144 const hesai::lidar::UdpFrame_t& hesai_raw_msg,
146 std::shared_ptr<HesaiUdpFrame> udp_frame
147 = std::make_shared<HesaiUdpFrame>();
149 for (
int i = 0; i < hesai_raw_msg.size(); ++i) {
150 auto packet = udp_frame->add_packets();
151 packet->set_timestamp_sec(timestamp);
152 packet->set_size(hesai_raw_msg[i].packet_len);
153 packet->mutable_data()->assign(
154 reinterpret_cast<const char*
>(hesai_raw_msg[i].buffer),
155 reinterpret_cast<const char*
>(hesai_raw_msg[i].buffer)
156 + hesai_raw_msg[i].packet_len);