26 namespace localization {
28 namespace pyramid_map {
43 void Init(
unsigned int rows,
unsigned int cols,
bool has_intensity =
true,
44 bool has_intensity_var =
true,
bool has_altitude =
true,
45 bool has_altitude_var =
true,
bool has_ground_altitude =
true,
46 bool has_count =
true,
bool has_ground_count =
true,
47 unsigned int resolution_num = 1,
unsigned int ratio = 2);
50 void Reset(
unsigned int level);
53 void ResetCells(
unsigned int start_id,
unsigned int end_id,
54 unsigned int level = 0);
56 void ResetCell(
unsigned int id,
unsigned int level = 0);
66 bool GetAltitudeImg(
unsigned int level, cv::Mat* altitude_img)
const;
80 unsigned int level = 0)
const;
83 unsigned int level = 0)
const;
86 unsigned int level = 0)
const;
89 unsigned int level = 0)
const;
92 unsigned int level = 0)
const;
94 const unsigned int*
GetCountSafe(
unsigned int row,
unsigned int col,
95 unsigned int level = 0)
const;
98 unsigned int level = 0)
const;
102 float** altitude,
float** altitude_var,
103 float** ground_altitude,
unsigned int** count,
104 unsigned int** ground_count,
unsigned int row,
105 unsigned int col,
unsigned int level = 0);
124 unsigned int start_index,
unsigned int level = 0);
126 unsigned int start_index,
unsigned int level = 0);
128 unsigned int start_index,
unsigned int level = 0);
130 unsigned int start_index,
unsigned int level = 0);
132 unsigned int start_index,
133 unsigned int level = 0);
135 unsigned int start_index,
unsigned int level = 0);
137 unsigned int start_index,
unsigned int level = 0);
146 unsigned int type,
unsigned int level = 0);
154 unsigned int type,
unsigned int level = 0);
158 unsigned int level = 0);
161 unsigned int col,
unsigned int level = 0);
163 void SetAltitudeSafe(
float altitude,
unsigned int row,
unsigned int col,
164 unsigned int level = 0);
167 unsigned int col,
unsigned int level = 0);
170 unsigned int col,
unsigned int level = 0);
172 void SetCountSafe(
unsigned int count,
unsigned int row,
unsigned int col,
173 unsigned int level = 0);
176 unsigned int col,
unsigned int level = 0);
182 void SetValueSafe(
unsigned char intensity,
float altitude,
unsigned int row,
183 unsigned int col,
unsigned int level = 0);
186 void MergeCellSafe(
const float* intensity,
const float* intensity_var,
187 const float* altitude,
const float* altitude_var,
188 const float* ground_altitude,
const unsigned int* count,
189 const unsigned int* ground_count,
unsigned int row,
190 unsigned int col,
unsigned int level);
193 void AddSampleSafe(
float intensity,
float altitude,
unsigned int row,
194 unsigned int col,
unsigned int level);
198 unsigned int col,
unsigned int level = 0);
204 static void Reduce(std::shared_ptr<PyramidMapMatrix> cells,
206 unsigned int new_level = 0);
217 inline unsigned int GetRowsSafe(
unsigned int level = 0)
const;
220 inline unsigned int GetColsSafe(
unsigned int level = 0)
const;
223 inline unsigned int GetRows(
unsigned int level = 0)
const;
226 inline unsigned int GetCols(
unsigned int level = 0)
const;
237 inline void AddSampleBase(
float intensity,
float altitude,
unsigned int row,
238 unsigned int col,
unsigned int level);
243 inline void MergeCellBase(
const float* intensity,
const float* intensity_var,
244 const float* altitude,
const unsigned int* count,
245 unsigned int row,
unsigned int col,
251 inline void GetMapCellBase(
float** intensity,
float** intensity_var,
252 float** altitude,
unsigned int** count,
253 unsigned int row,
unsigned int col,
254 unsigned int level = 0);
257 inline const float*
GetIntensity(
unsigned int row,
unsigned int col,
258 unsigned int level = 0)
const;
260 inline const float*
GetIntensityVar(
unsigned int row,
unsigned int col,
261 unsigned int level = 0)
const;
263 inline const float*
GetAltitude(
unsigned int row,
unsigned int col,
264 unsigned int level = 0)
const;
266 inline const float*
GetAltitudeVar(
unsigned int row,
unsigned int col,
267 unsigned int level = 0)
const;
270 unsigned int level = 0)
const;
272 inline const unsigned int*
GetCount(
unsigned int row,
unsigned int col,
273 unsigned int level = 0)
const;
275 inline const unsigned int*
GetGroundCount(
unsigned int row,
unsigned int col,
276 unsigned int level = 0)
const;
291 unsigned int level = 0)
const;
292 inline const UIntMatrix*
GetCountMatrix(
unsigned int level = 0)
const;
297 bool CheckLegalityForGetData(
unsigned int row,
unsigned int col,
298 unsigned int level)
const;
300 bool CheckLegalityForSetData(
unsigned int level,
unsigned int start_id,
301 unsigned int size)
const;
302 bool CheckLegalityForSetDataRoi(
unsigned int level,
303 unsigned int source_matrix_rows,
304 unsigned int source_matrix_cols,
310 unsigned int resolution_num_ = 1;
312 unsigned int ratio_ = 2;
314 std::vector<unsigned int> rows_mr_;
316 std::vector<unsigned int> cols_mr_;
318 std::vector<unsigned int> ratio_multiplier_;
320 std::vector<FloatMatrix> intensity_matrixes_;
321 std::vector<FloatMatrix> intensity_var_matrixes_;
322 std::vector<FloatMatrix> altitude_matrixes_;
323 std::vector<FloatMatrix> altitude_var_matrixes_;
324 std::vector<FloatMatrix> ground_altitude_matrixes_;
325 std::vector<UIntMatrix> count_matrixes_;
326 std::vector<UIntMatrix> ground_count_matrixes_;
329 bool has_intensity_ =
false;
331 bool has_intensity_var_ =
false;
333 bool has_altitude_ =
false;
335 bool has_altitude_var_ =
false;
337 bool has_ground_altitude_ =
false;
339 bool has_count_ =
false;
341 bool has_ground_count_ =
false;
347 return has_intensity_var_;
353 return has_altitude_var_;
357 return has_ground_altitude_;
363 return has_ground_count_;
367 if (level >= resolution_num_) {
368 std::cerr <<
"PyramidMapMatrix: [GetRows] The level id is illegal." 373 return rows_mr_[level];
377 if (level >= resolution_num_) {
378 std::cerr <<
"PyramidMapMatrix: [GetCols] The level id is illegal." 383 return cols_mr_[level];
387 return rows_mr_[level];
391 return cols_mr_[level];
395 return resolution_num_;
403 unsigned int row,
unsigned int col,
404 unsigned int level) {
405 ++count_matrixes_[level][row][col];
411 v1 = intensity - intensity_matrixes_[level][row][col];
412 value = v1 /
static_cast<float>(count_matrixes_[level][row][col]);
413 intensity_matrixes_[level][row][col] +=
value;
415 v2 = intensity - intensity_matrixes_[level][row][col];
416 intensity_var_matrixes_[level][row][col] =
417 (
static_cast<float>(count_matrixes_[level][row][col] - 1) *
418 intensity_var_matrixes_[level][row][col] +
420 static_cast<float>(count_matrixes_[level][row][col]);
422 v1 = altitude - altitude_matrixes_[level][row][col];
423 value = v1 /
static_cast<float>(count_matrixes_[level][row][col]);
424 altitude_matrixes_[level][row][col] +=
value;
428 const float* intensity_var,
429 const float* altitude,
430 const unsigned int* count,
431 unsigned int row,
unsigned int col,
432 unsigned int level) {
433 unsigned int new_count = count_matrixes_[level][row][col] + *count;
434 float p0 =
static_cast<float>(count_matrixes_[level][row][col]) /
435 static_cast<float>(new_count);
436 float p1 =
static_cast<float>(*count) /
static_cast<float>(new_count);
438 float intensity_diff = 0.0f;
439 intensity_diff = intensity_matrixes_[level][row][col] - *intensity;
440 intensity_matrixes_[level][row][col] =
441 intensity_matrixes_[level][row][col] * p0 + *intensity * p1;
443 intensity_var_matrixes_[level][row][col] =
444 intensity_var_matrixes_[level][row][col] * p0 + *intensity_var * p1 +
445 intensity_diff * intensity_diff * p0 * p1;
447 altitude_matrixes_[level][row][col] =
448 altitude_matrixes_[level][row][col] * p0 + *altitude * p1;
450 count_matrixes_[level][row][col] = new_count;
454 float** intensity_var,
456 unsigned int** count,
457 unsigned int row,
unsigned int col,
458 unsigned int level) {
459 *intensity = &intensity_matrixes_[level][row][col];
460 *intensity_var = &intensity_var_matrixes_[level][row][col];
461 *altitude = &altitude_matrixes_[level][row][col];
462 *count = &count_matrixes_[level][row][col];
467 unsigned int level)
const {
468 return &intensity_matrixes_[level][row][col];
472 unsigned int row,
unsigned int col,
unsigned int level)
const {
473 return &intensity_var_matrixes_[level][row][col];
478 unsigned int level)
const {
479 return &altitude_matrixes_[level][row][col];
484 unsigned int level)
const {
485 return &altitude_var_matrixes_[level][row][col];
489 unsigned int row,
unsigned int col,
unsigned int level)
const {
490 return &ground_altitude_matrixes_[level][row][col];
494 unsigned int row,
unsigned int col,
unsigned int level)
const {
495 return &count_matrixes_[level][row][col];
499 unsigned int row,
unsigned int col,
unsigned int level)
const {
500 return &ground_count_matrixes_[level][row][col];
504 return &intensity_matrixes_[level];
508 unsigned int level) {
509 return &intensity_var_matrixes_[level];
513 return &altitude_matrixes_[level];
517 return &altitude_var_matrixes_[level];
521 unsigned int level) {
522 return &ground_altitude_matrixes_[level];
526 return &count_matrixes_[level];
530 return &ground_count_matrixes_[level];
534 unsigned int level)
const {
535 return &intensity_matrixes_[level];
539 unsigned int level)
const {
540 return &intensity_var_matrixes_[level];
544 unsigned int level)
const {
545 return &altitude_matrixes_[level];
549 unsigned int level)
const {
550 return &altitude_var_matrixes_[level];
554 unsigned int level)
const {
555 return &ground_altitude_matrixes_[level];
559 unsigned int level)
const {
560 return &count_matrixes_[level];
564 unsigned int level)
const {
565 return &ground_count_matrixes_[level];
AlignedMatrix< float > FloatMatrix
Definition: pyramid_map_matrix.h:30
void SetValueSafe(unsigned char intensity, float altitude, unsigned int row, unsigned int col, unsigned int level=0)
Set the several values by check.
void SetUintMatrixRoi(const UIntMatrix *source_matrix, const Rect2D< unsigned int > &source_roi, const Rect2D< unsigned int > &target_roi, unsigned int type, unsigned int level=0)
set unsigned int matrix with a ROI. type: count 0; ground cout 1;
void SetCountSafe(unsigned int count, unsigned int row, unsigned int col, unsigned int level=0)
Set a count value by check.
void SetAltitudeMatrix(const float *input, unsigned int size, unsigned int start_index, unsigned int level=0)
UIntMatrix * GetGroundCountMatrixSafe(unsigned int level=0)
virtual void Reset()
Reset map cells data.
const float * GetGroundAltitude(unsigned int row, unsigned int col, unsigned int level=0) const
Get an altitude ground value without check.
Definition: pyramid_map_matrix.h:488
unsigned int GetCols(unsigned int level=0) const
Get column number given the resolution.
Definition: pyramid_map_matrix.h:390
void ResetCell(unsigned int id, unsigned int level=0)
Reset a map cell in a specific resolution level.
virtual bool GetAltitudeImg(cv::Mat *altitude_img) const
get altitude image of node.
unsigned int GetRows(unsigned int level=0) const
Get row number given the resolution.
Definition: pyramid_map_matrix.h:386
void SetGroundCountMatrix(const unsigned int *input, unsigned int size, unsigned int start_index, unsigned int level=0)
PlanningContext is the runtime context in planning. It is persistent across multiple frames...
Definition: atomic_hash_map.h:25
bool HasAltitude() const
Definition: pyramid_map_matrix.h:350
const float * GetIntensitySafe(unsigned int row, unsigned int col, unsigned int level=0) const
Get an intensity value by check.
void ResetCells(unsigned int start_id, unsigned int end_id, unsigned int level=0)
Reset map cells data from start_id to end_id in a specific resolution level.
const float * GetAltitudeVarSafe(unsigned int row, unsigned int col, unsigned int level=0) const
Get an altitude variance value by check.
void SetGroundAltitudeSafe(float ground_altitude, unsigned int row, unsigned int col, unsigned int level=0)
Set an altitude ground value by check.
bool HasIntensityVar() const
Definition: pyramid_map_matrix.h:346
void MergeCellSafe(const float *intensity, const float *intensity_var, const float *altitude, const float *altitude_var, const float *ground_altitude, const unsigned int *count, const unsigned int *ground_count, unsigned int row, unsigned int col, unsigned int level)
Merge the data from another map cell by check.
void SetGroundCountSafe(unsigned int ground_count, unsigned int row, unsigned int col, unsigned int level=0)
Set a ground count value by check.
void SetIntensityVarSafe(float intensity_var, unsigned int row, unsigned int col, unsigned int level=0)
Set an intensity variance value by check.
FloatMatrix * GetIntensityVarMatrixSafe(unsigned int level=0)
bool HasAltitudeVar() const
Definition: pyramid_map_matrix.h:352
FloatMatrix * GetIntensityMatrix(unsigned int level=0)
Definition: pyramid_map_matrix.h:503
FloatMatrix * GetAltitudeVarMatrix(unsigned int level=0)
Definition: pyramid_map_matrix.h:516
const float * GetGroundAltitudeSafe(unsigned int row, unsigned int col, unsigned int level=0) const
Get an altitude ground value by check.
virtual void Init(const BaseMapConfig &config)
Initialize the map matrix.
unsigned int GetRowsSafe(unsigned int level=0) const
Get row number given the resolution by check.
Definition: pyramid_map_matrix.h:366
const float * GetAltitude(unsigned int row, unsigned int col, unsigned int level=0) const
Get an altitude value without check.
Definition: pyramid_map_matrix.h:476
void GetMapCellBase(float **intensity, float **intensity_var, float **altitude, unsigned int **count, unsigned int row, unsigned int col, unsigned int level=0)
Get cell values. just get count, intensity, intensity var and altitude.
Definition: pyramid_map_matrix.h:453
bool HasGroundCount() const
Definition: pyramid_map_matrix.h:362
static void Reduce(std::shared_ptr< PyramidMapMatrix > cells, const PyramidMapMatrix &new_cells, unsigned int level=0, unsigned int new_level=0)
Combine two PyramidMapMatrix instances (Reduce).
void MergeCellBase(const float *intensity, const float *intensity_var, const float *altitude, const unsigned int *count, unsigned int row, unsigned int col, unsigned int level)
Merge the data from another map cell. only merge count, intensity, intensity var and altitude...
Definition: pyramid_map_matrix.h:427
void SetGroundAltitudeMatrix(const float *input, unsigned int size, unsigned int start_index, unsigned int level=0)
Definition: pyramid_map_matrix.h:33
Definition: aligned_matrix.h:28
const unsigned int * GetCount(unsigned int row, unsigned int col, unsigned int level=0) const
Get a count value without check.
Definition: pyramid_map_matrix.h:493
const float * GetIntensityVar(unsigned int row, unsigned int col, unsigned int level=0) const
Get an intensity variance value by check.
Definition: pyramid_map_matrix.h:471
bool HasGroundAltitude() const
Definition: pyramid_map_matrix.h:356
void AddSampleSafe(float intensity, float altitude, unsigned int row, unsigned int col, unsigned int level)
Add sample to the map cell with check.
const float * GetIntensity(unsigned int row, unsigned int col, unsigned int level=0) const
Get an intensity value without check.
Definition: pyramid_map_matrix.h:465
void BottomUpBase()
Propagate the data from fine level to the coarse resolution by check. only update count...
The data structure of the map cells in a map node.
Definition: base_map_matrix.h:30
unsigned int GetColsSafe(unsigned int level=0) const
Get column number given the resolution by check.
Definition: pyramid_map_matrix.h:376
double ComputeMeanIntensity(unsigned int level=0)
Compute mean intensity.
const unsigned int * GetGroundCountSafe(unsigned int row, unsigned int col, unsigned int level=0) const
Get a ground count value by check.
FloatMatrix * GetGroundAltitudeMatrixSafe(unsigned int level=0)
AlignedMatrix< unsigned int > UIntMatrix
Definition: pyramid_map_matrix.h:31
unsigned int GetResolutionNum() const
Get number of resolution.
Definition: pyramid_map_matrix.h:394
void SetCountMatrix(const unsigned int *input, unsigned int size, unsigned int start_index, unsigned int level=0)
FloatMatrix * GetAltitudeVarMatrixSafe(unsigned int level=0)
virtual bool GetIntensityImg(cv::Mat *intensity_img) const
get intensity image of node.
void SetAltitudeSafe(float altitude, unsigned int row, unsigned int col, unsigned int level=0)
Set an altitude value by check.
void SetIntensitySafe(float intensity, unsigned int row, unsigned int col, unsigned int level=0)
Set an intensity value by check.
void SetAltitudeVarSafe(float altitude_var, unsigned int row, unsigned int col, unsigned int level=0)
Set an altitude variance value by check.
const float * GetIntensityVarSafe(unsigned int row, unsigned int col, unsigned int level=0) const
Get an intensity variance value by check.
void SetIntensityMatrix(const float *input, unsigned int size, unsigned int start_index, unsigned int level=0)
void SetAltitudeVarMatrix(const float *input, unsigned int size, unsigned int start_index, unsigned int level=0)
FloatMatrix * GetAltitudeMatrixSafe(unsigned int level=0)
unsigned int GetResolutionRatio() const
Get the resolution ratio.
Definition: pyramid_map_matrix.h:398
FloatMatrix * GetIntensityMatrixSafe(unsigned int level=0)
void Clear()
Release all memory in PyramidMapMatrix.
PyramidMapMatrix & operator=(const PyramidMapMatrix &map_matrix)
UIntMatrix * GetGroundCountMatrix(unsigned int level=0)
Definition: pyramid_map_matrix.h:529
void AddSampleBase(float intensity, float altitude, unsigned int row, unsigned int col, unsigned int level)
Add sample to the map cell. only update count, intensity, intensity var and altitude.
Definition: pyramid_map_matrix.h:402
const float * GetAltitudeSafe(unsigned int row, unsigned int col, unsigned int level=0) const
Get an altitude value by check.
UIntMatrix * GetCountMatrix(unsigned int level=0)
Definition: pyramid_map_matrix.h:525
void SetIntensityVarMatrix(const float *input, unsigned int size, unsigned int start_index, unsigned int level=0)
void AddGroundSample(float ground_altitude, unsigned int row, unsigned int col, unsigned int level=0)
Add ground sample to the map cell.
void BottomUpSafe()
Propagate the data from fine level to the coarse resolution by check.
apollo::cyber::base::std value
void SetFloatMatrixRoi(const FloatMatrix *source_matrix, const Rect2D< unsigned int > &source_roi, const Rect2D< unsigned int > &target_roi, unsigned int type, unsigned int level=0)
set float matrix with a ROI. type: intensity 0; intensity_var 1; altitude 2; altitude_var 3; ground_a...
const unsigned int * GetGroundCount(unsigned int row, unsigned int col, unsigned int level=0) const
Get a ground count value without check.
Definition: pyramid_map_matrix.h:498
The options of the reflectance map.
Definition: base_map_config.h:42
FloatMatrix * GetGroundAltitudeMatrix(unsigned int level=0)
Definition: pyramid_map_matrix.h:520
FloatMatrix * GetAltitudeMatrix(unsigned int level=0)
Definition: pyramid_map_matrix.h:512
FloatMatrix * GetIntensityVarMatrix(unsigned int level=0)
Definition: pyramid_map_matrix.h:507
const unsigned int * GetCountSafe(unsigned int row, unsigned int col, unsigned int level=0) const
Get a count value by check.
void GetMapCellSafe(float **intensity, float **intensity_var, float **altitude, float **altitude_var, float **ground_altitude, unsigned int **count, unsigned int **ground_count, unsigned int row, unsigned int col, unsigned int level=0)
Get cell values by check.
UIntMatrix * GetCountMatrixSafe(unsigned int level=0)
const float * GetAltitudeVar(unsigned int row, unsigned int col, unsigned int level=0) const
Get an altitude variance value without check.
Definition: pyramid_map_matrix.h:482
bool HasIntensity() const
Definition: pyramid_map_matrix.h:344
bool HasCount() const
Definition: pyramid_map_matrix.h:360