57 #ifndef __SICK_SCANSEGMENT_XD_ROS_MSGPACK_PUBLISHER_H
58 #define __SICK_SCANSEGMENT_XD_ROS_MSGPACK_PUBLISHER_H
72 PointXYZRAEI32f() :
x(0),
y(0),
z(0),
range(0),
azimuth(0),
elevation(0),
i(0),
layer(0),
echo(0),
lidar_timestamp_microsec(0),
reflectorbit(0),
infringed(0) {}
73 PointXYZRAEI32f(
float _x,
float _y,
float _z,
float _range,
float _azimuth,
float _elevation,
float _i,
int _layer,
int _echo, uint64_t _lidar_timestamp_microsec, uint8_t _reflector_bit)
74 :
x(_x),
y(_y),
z(_z),
range(_range),
azimuth(_azimuth),
elevation(_elevation),
i(_i),
layer(_layer),
echo(_echo),
lidar_timestamp_microsec(_lidar_timestamp_microsec),
reflectorbit(_reflector_bit),
infringed(0) {}
120 bool range_modified =
false;
130 return point_enabled;
132 void print(
void)
const;
134 static std::string
printValuesEnabled(
const std::map<std::string,bool>& mapped_values,
const std::string& delim =
",");
135 static std::string
printValuesEnabled(
const std::map<int8_t,bool>& mapped_values,
const std::string& delim =
",");
155 #if defined __ROS_VERSION && __ROS_VERSION > 1
212 virtual void GetFullframeAngleRanges(
float& fullframe_azimuth_min_deg,
float& fullframe_azimuth_max_deg,
float& fullframe_elevation_min_deg,
float& fullframe_elevation_max_deg)
const
238 for (
int echoIdx = 0; echoIdx < points.size() && echoIdx <
lidar_points.size(); echoIdx++)
240 size_t num_points = points[echoIdx].size();
251 for (
int n = 0; n < num_points; n++)
254 float elevation_deg = point.
elevation * 180.0f / (float)M_PI;
255 float azimuth_fdeg = point.
azimuth * 180.0f / (float)M_PI;
259 if (azimuth_fdeg > 180.0
f)
260 azimuth_fdeg -= 360.0f;
261 int elevation_mdeg = (int)(1000.0
f * elevation_deg);
262 int azimuth_ideg = (int)(azimuth_fdeg);
264 if (azimuth_fdeg - azimuth_ideg > 0.5
f)
266 if (azimuth_fdeg - azimuth_ideg < -0.5
f)
295 bool allSegmentsCovered(
float all_segments_azimuth_min_deg,
float all_segments_azimuth_max_deg,
float all_segments_elevation_min_deg,
float all_segments_elevation_max_deg)
297 float elevation_deg_min = 999, elevation_deg_max = -999;
298 for (std::map<
int, std::map<int, int>>::iterator segment_coverage_elevation_iter =
segment_coverage.begin(); segment_coverage_elevation_iter !=
segment_coverage.end(); segment_coverage_elevation_iter++)
300 int azimuth_deg_first = 999, azimuth_deg_last = -999;
301 float elevation_deg = 0.001f * (segment_coverage_elevation_iter->first);
302 elevation_deg_min = std::min<float>(elevation_deg, elevation_deg_min);
303 elevation_deg_max = std::max<float>(elevation_deg, elevation_deg_max);
304 std::map<int, int>& azimuth_histogram = segment_coverage_elevation_iter->second;
305 for (std::map<int, int>::iterator segment_coverage_azimuth_iter = azimuth_histogram.begin(); segment_coverage_azimuth_iter != azimuth_histogram.end(); segment_coverage_azimuth_iter++)
307 const int& azimuth_deg = segment_coverage_azimuth_iter->first;
308 const int& azimuth_cnt = segment_coverage_azimuth_iter->second;
309 if (azimuth_cnt > 0 && azimuth_deg >= (
int)all_segments_azimuth_min_deg && azimuth_deg <= (
int)all_segments_azimuth_max_deg)
311 azimuth_deg_first = std::min<int>(azimuth_deg_first, azimuth_deg);
312 azimuth_deg_last = std::max<int>(azimuth_deg_last, azimuth_deg);
315 bool azimuth_success = (azimuth_deg_last - azimuth_deg_first + 1 >= all_segments_azimuth_max_deg - all_segments_azimuth_min_deg);
317 for(
int azimuth_deg = azimuth_deg_first; azimuth_success && azimuth_deg <= azimuth_deg_last; azimuth_deg++)
319 if (azimuth_histogram[azimuth_deg] <= 0)
320 azimuth_success =
false;
325 if (!azimuth_success)
328 bool elevation_success = (elevation_deg_max - elevation_deg_min + 1 >= all_segments_elevation_max_deg - all_segments_elevation_min_deg);
333 if (!elevation_success)
350 std::vector<std::vector<sick_scansegment_xd::PointXYZRAEI32f>>
lidar_points;
368 void convertPointsToLaserscanMsg(uint32_t timestamp_sec, uint32_t timestamp_nsec,
const std::vector<std::vector<sick_scansegment_xd::PointXYZRAEI32f>>& lidar_points,
size_t total_point_count,
LaserScanMsgMap& laser_scan_msg_map,
const std::string& frame_id,
bool is_fullframe);
384 std::string
printCoverageTable(
const std::map<
int, std::map<int, int>>& elevation_azimuth_histograms);
407 #endif // __SICK_SCANSEGMENT_XD_ROS_MSGPACK_PUBLISHER_H