Apollo 11.0
自动驾驶开放平台
apollo::perception::lidar::FeatureGenerator类 参考

#include <feature_generator.h>

apollo::perception::lidar::FeatureGenerator 的协作图:

Public 成员函数

 FeatureGenerator ()
 Construct a new Feature Generator object
 
virtual ~FeatureGenerator ()
 Destroy the Feature Generator object
 
bool Init (const cnnseg::FeatureParam &feature_param, base::Blob< float > *out_blob)
 Init the Feature Generator
 
void Generate (const base::PointFCloudPtr &pc_ptr, const std::vector< int > &point2grid)
 Generate features for cnnseg
 
std::string Name () const
 Name of Feature Generator
 

友元

class FeatureGeneratorTest
 

详细描述

在文件 feature_generator.h 第 33 行定义.

构造及析构函数说明

◆ FeatureGenerator()

apollo::perception::lidar::FeatureGenerator::FeatureGenerator ( )
inline

Construct a new Feature Generator object

在文件 feature_generator.h 第 39 行定义.

39 {
40#if USE_GPU == 1
41 pc_gpu_size_ = kMaxPointCloudGPUSize;
42 BASE_GPU_CHECK(cudaMalloc(reinterpret_cast<void**>(&pc_gpu_),
43 pc_gpu_size_ * sizeof(base::PointF)));
44 BASE_GPU_CHECK(cudaMalloc(reinterpret_cast<void**>(&point2grid_gpu_),
45 pc_gpu_size_ * sizeof(int)));
46#endif
47 }
Point< float > PointF
Definition point.h:56

◆ ~FeatureGenerator()

virtual apollo::perception::lidar::FeatureGenerator::~FeatureGenerator ( )
inlinevirtual

Destroy the Feature Generator object

在文件 feature_generator.h 第 53 行定义.

53 {
54#if USE_GPU == 1
55 ReleaseGPUMemory();
56#endif
57 }

成员函数说明

◆ Generate()

void apollo::perception::lidar::FeatureGenerator::Generate ( const base::PointFCloudPtr &  pc_ptr,
const std::vector< int > &  point2grid 
)
inline

Generate features for cnnseg

参数
pc_ptrinput point cloud
point2gridpoint to grid mapping

在文件 feature_generator.h 第 76 行定义.

77 {
78#if USE_GPU == 1
79 GenerateGPU(pc_ptr, point2grid);
80#else
81 GenerateCPU(pc_ptr, point2grid);
82#endif
83 }

◆ Init()

bool apollo::perception::lidar::FeatureGenerator::Init ( const cnnseg::FeatureParam &  feature_param,
base::Blob< float > *  out_blob 
)

Init the Feature Generator

参数
feature_paramparams
out_bloboutput blobs
返回
true
false

在文件 feature_generator.cc 第 27 行定义.

28 {
29 // set output feature blob
30 out_blob_ = out_blob;
31
32 // set feature parameters
33 range_ = feature_param.point_cloud_range();
34 width_ = feature_param.width();
35 height_ = feature_param.height();
36 min_height_ = feature_param.min_height();
37 max_height_ = feature_param.max_height();
38 CHECK_EQ(width_, height_)
39 << "Current implementation version requires input_width == input_height.";
40 use_intensity_feature_ = feature_param.use_intensity_feature();
41 use_constant_feature_ = feature_param.use_constant_feature();
42
43 // set log lookup table
44 log_table_.resize(kMaxLogNum);
45 for (size_t i = 0; i < log_table_.size(); ++i) {
46 log_table_[i] = std::log(static_cast<float>(1 + i));
47 }
48
49 // set output feature blob data
50 float* out_blob_data = nullptr;
51#if USE_GPU == 1
52 log_blob_.reset(
53 new base::Blob<float>(1, 1, 1, static_cast<int>(log_table_.size())));
54 float* log_table = log_blob_->mutable_gpu_data();
55 cudaMemcpy(log_table, log_table_.data(), log_table_.size() * sizeof(float),
56 cudaMemcpyHostToDevice);
57 out_blob_data = out_blob_->mutable_gpu_data();
58#else
59 out_blob_data = out_blob_->mutable_cpu_data();
60#endif
61
62 // set raw feature data
63 int channel_index = 0;
64 max_height_data_ = out_blob_data + out_blob_->offset(0, channel_index++);
65 mean_height_data_ = out_blob_data + out_blob_->offset(0, channel_index++);
66 count_data_ = out_blob_data + out_blob_->offset(0, channel_index++);
67 if (use_constant_feature_) {
68 direction_data_ = out_blob_data + out_blob_->offset(0, channel_index++);
69 }
70 if (use_intensity_feature_) {
71 top_intensity_data_ = out_blob_data + out_blob_->offset(0, channel_index++);
72 mean_intensity_data_ =
73 out_blob_data + out_blob_->offset(0, channel_index++);
74 }
75 if (use_constant_feature_) {
76 distance_data_ = out_blob_data + out_blob_->offset(0, channel_index++);
77 }
78 nonempty_data_ = out_blob_data + out_blob_->offset(0, channel_index++);
79 CHECK_EQ(out_blob_->offset(0, channel_index), out_blob_->count());
80
81 // compute direction and distance features
82 if (use_constant_feature_) {
83 int map_size = height_ * width_;
84 std::vector<float> direction_data(map_size);
85 std::vector<float> distance_data(map_size);
86 for (int row = 0; row < height_; ++row) {
87 for (int col = 0; col < width_; ++col) {
88 int idx = row * width_ + col;
89 // * row <-> x, column <-> y
90 float center_x = Pixel2Pc(row, static_cast<float>(height_), range_);
91 float center_y = Pixel2Pc(col, static_cast<float>(width_), range_);
92 direction_data[idx] =
93 static_cast<float>(std::atan2(center_y, center_x) / (2.0 * kPI));
94 distance_data[idx] =
95 static_cast<float>(std::hypot(center_x, center_y) / 60.0 - 0.5);
96 }
97 }
98
99// memory copy direction and distance features
100#if USE_GPU == 1
101 cudaMemcpy(direction_data_, direction_data.data(),
102 direction_data.size() * sizeof(float), cudaMemcpyHostToDevice);
103 cudaMemcpy(distance_data_, distance_data.data(),
104 distance_data.size() * sizeof(float), cudaMemcpyHostToDevice);
105#else
106 memcpy(direction_data_, direction_data.data(),
107 direction_data.size() * sizeof(float));
108 memcpy(distance_data_, distance_data.data(),
109 distance_data.size() * sizeof(float));
110#endif
111 }
112 return true;
113}
int offset(const int n, const int c=0, const int h=0, const int w=0) const
Definition blob.h:231
float Pixel2Pc(int in_pixel, float in_size, float out_range)
Definition util.h:52
const double kPI
Definition util.h:31

◆ Name()

std::string apollo::perception::lidar::FeatureGenerator::Name ( ) const
inline

Name of Feature Generator

返回
std::string

在文件 feature_generator.h 第 90 行定义.

90{ return "FeatureGenerator"; }

友元及相关函数文档

◆ FeatureGeneratorTest

friend class FeatureGeneratorTest
friend

在文件 feature_generator.h 第 148 行定义.


该类的文档由以下文件生成: