Apollo  6.0
Open source self driving car software
localization_lidar.h
Go to the documentation of this file.
1 /******************************************************************************
2  * Copyright 2018 The Apollo Authors. All Rights Reserved.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *****************************************************************************/
16 
17 #pragma once
18 
19 #include <string>
20 #include <vector>
21 
22 #include "cyber/common/log.h"
23 #include "localization_msf/lidar_locator.h"
31 
32 namespace apollo {
33 namespace localization {
34 namespace msf {
35 
36 struct LidarFrame {
38  double measurement_time; // unix time
39  std::vector<double> pt_xs;
40  std::vector<double> pt_ys;
41  std::vector<double> pt_zs;
42  std::vector<unsigned char> intensities;
43 };
44 
45 struct MapNodeData {
46  MapNodeData(const int w, const int h)
47  : width(w),
48  height(h),
49  intensities(new float[width * height]),
50  intensities_var(new float[width * height]),
51  altitudes(new float[width * height]),
52  count(new unsigned int[width * height]) {}
54  delete[] intensities;
55  intensities = nullptr;
56  delete[] intensities_var;
57  intensities_var = nullptr;
58  delete[] altitudes;
59  altitudes = nullptr;
60  delete[] count;
61  count = nullptr;
62  }
63  int width;
64  int height;
65  float* intensities;
67  float* altitudes;
68  unsigned int* count;
69 };
70 
72  public:
84 
85  public:
90 
91  bool Init(const std::string& map_path, const unsigned int search_range_x,
92  const unsigned int search_range_y, const int zone_id,
93  const unsigned int resolution_id = 0);
94 
95  void SetVelodyneExtrinsic(const Eigen::Affine3d& pose);
96 
97  void SetVehicleHeight(double height);
98 
99  void SetValidThreshold(float valid_threashold);
100 
101  void SetImageAlignMode(int mode);
102 
103  void SetLocalizationMode(int mode);
104 
105  void SetDeltaYawLimit(double limit);
106 
107  void SetDeltaPitchRollLimit(double limit);
108 
109  int Update(const unsigned int frame_idx, const Eigen::Affine3d& pose,
110  const Eigen::Vector3d velocity, const LidarFrame& lidar_frame,
111  bool use_avx = false);
112 
113  void GetResult(Eigen::Affine3d* location, Eigen::Matrix3d* covariance,
114  double* location_score);
115 
116  void GetLocalizationDistribution(Eigen::MatrixXd* distribution);
117 
118  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
119 
120  protected:
121  void ComposeMapNode(const Eigen::Vector3d& trans);
122 
123  void RefineAltitudeFromMap(Eigen::Affine3d* pose);
124 
125  protected:
126  LidarLocator* lidar_locator_;
127  int search_range_x_ = 0;
128  int search_range_y_ = 0;
129  int node_size_x_ = 0;
130  int node_size_y_ = 0;
131  double resolution_ = 0.125;
133 
135  PyramidMap map_;
138  unsigned int resolution_id_ = 0;
139  int zone_id_ = 50;
140  bool is_map_loaded_ = false;
141 
142  double vehicle_lidar_height_ = 1.7;
143  double pre_vehicle_ground_height_ = 0.0;
144  bool is_pre_ground_height_valid_ = false;
146 };
147 
148 } // namespace msf
149 } // namespace localization
150 } // namespace apollo
apollo::localization::msf::pyramid_map::PyramidMapConfig PyramidMapConfig
Definition: localization_lidar.h:81
MapNodeData * lidar_map_node_
Definition: localization_lidar.h:132
PlanningContext is the runtime context in planning. It is persistent across multiple frames...
Definition: atomic_hash_map.h:25
apollo::localization::msf::pyramid_map::PyramidMapNodePool PyramidMapNodePool
Definition: localization_lidar.h:77
double measurement_time
Definition: localization_lidar.h:38
apollo::localization::msf::pyramid_map::FloatMatrix FloatMatrix
Definition: localization_lidar.h:82
PyramidMapNodePool map_node_pool_
Definition: localization_lidar.h:136
Eigen::Vector2d Vector2d
Definition: base_map_fwd.h:36
apollo::localization::msf::pyramid_map::PyramidMap PyramidMap
Definition: localization_lidar.h:73
unsigned int * count
Definition: localization_lidar.h:68
Eigen::Vector3d Vector3d
Definition: frame_transform.h:27
Definition: localization_lidar.h:71
float * intensities
Definition: localization_lidar.h:65
int height
Definition: localization_lidar.h:64
LidarFrame()
Definition: localization_lidar.h:37
apollo::localization::msf::pyramid_map::PyramidMapNode PyramidMapNode
Definition: localization_lidar.h:75
MapNodeData(const int w, const int h)
Definition: localization_lidar.h:46
The class of LocalizationIntegParam.
bool Init(const char *binary_name)
Definition: localization_lidar.h:45
LidarLocator * lidar_locator_
Definition: localization_lidar.h:126
PyramidMap map_
Definition: localization_lidar.h:135
std::vector< unsigned char > intensities
Definition: localization_lidar.h:42
~MapNodeData()
Definition: localization_lidar.h:53
std::vector< double > pt_xs
Definition: localization_lidar.h:39
std::vector< double > pt_zs
Definition: localization_lidar.h:41
Eigen::Vector2d map_left_top_corner_
Definition: localization_lidar.h:137
int width
Definition: localization_lidar.h:63
float * intensities_var
Definition: localization_lidar.h:66
Eigen::Affine3d velodyne_extrinsic_
Definition: localization_lidar.h:145
apollo::localization::msf::pyramid_map::PyramidMapMatrix PyramidMapMatrix
Definition: localization_lidar.h:79
Definition: base_map_node_index.h:33
Eigen::Affine3d Affine3d
Definition: base_map_fwd.h:34
std::vector< double > pt_ys
Definition: localization_lidar.h:40
Definition: localization_lidar.h:36
Eigen::Matrix3d Matrix3d
Definition: base_map_fwd.h:33
apollo::localization::msf::pyramid_map::UIntMatrix UIntMatrix
Definition: localization_lidar.h:83
float * altitudes
Definition: localization_lidar.h:67
PyramidMapConfig config_
Definition: localization_lidar.h:134
apollo::localization::msf::pyramid_map::MapNodeIndex MapNodeIndex
Definition: localization_lidar.h:74