#include <omnidirectional_model.h>
◆ OmnidirectionalCameraDistortionModel()
apollo::perception::base::OmnidirectionalCameraDistortionModel::OmnidirectionalCameraDistortionModel |
( |
| ) |
|
|
default |
◆ ~OmnidirectionalCameraDistortionModel()
apollo::perception::base::OmnidirectionalCameraDistortionModel::~OmnidirectionalCameraDistortionModel |
( |
| ) |
|
|
default |
◆ get_camera_model()
std::shared_ptr< BaseCameraModel > apollo::perception::base::OmnidirectionalCameraDistortionModel::get_camera_model |
( |
| ) |
|
|
overridevirtual |
◆ name()
std::string apollo::perception::base::OmnidirectionalCameraDistortionModel::name |
( |
| ) |
const |
|
inlineoverridevirtual |
◆ Project()
Eigen::Vector2f apollo::perception::base::OmnidirectionalCameraDistortionModel::Project |
( |
const Eigen::Vector3f & |
point3d | ) |
|
|
overridevirtual |
实现了 apollo::perception::base::BaseCameraDistortionModel.
在文件 omnidirectional_model.cc 第 29 行定义.
30 {
31 if (std::isgreater(point3d[2], 0.f)) {
32 AERROR <<
"The input point (" << point3d
33 << ") should be in front of the camera";
34 }
35
36
37
38
39
40 double x[3] = {point3d(1), point3d(0), -point3d(2)};
41 const double norm = sqrt(x[0] * x[0] + x[1] * x[1]);
42
43 Eigen::Vector2f projection;
44 if (norm < std::numeric_limits<double>::epsilon()) {
47 return projection;
48 }
49
50 const double theta = atan(x[2] / norm);
52
53 const float u = static_cast<float>(x[0] / norm * rho);
54 const float v = static_cast<float>(x[1] / norm * rho);
57 return projection;
58}
◆ set_params()
bool apollo::perception::base::OmnidirectionalCameraDistortionModel::set_params |
( |
size_t |
width, |
|
|
size_t |
height, |
|
|
const Eigen::VectorXf & |
params |
|
) |
| |
|
overridevirtual |
实现了 apollo::perception::base::BaseCameraDistortionModel.
在文件 omnidirectional_model.cc 第 70 行定义.
71 {
72 if (params.size() < 9) {
73 AINFO <<
"Missing cam2world and world2cam model.";
74 return false;
75 }
76
77 uint32_t cam2world_order = uint32_t(params(8));
78 AINFO <<
"cam2world order: " << cam2world_order <<
", size: " << params.size()
79 << std::endl;
80
81 if (params.size() < 9 + cam2world_order + 1) {
82 AINFO <<
"Incomplete cam2world model or missing world2cam model.";
83 return false;
84 }
85
86 uint32_t world2cam_order = uint32_t(params(9 + cam2world_order));
87 AINFO <<
"world2cam order: " << world2cam_order <<
", size: " << params.size()
88 << std::endl;
89
90 if (params.size() < 9 + cam2world_order + 1 + world2cam_order) {
91 AINFO <<
"Incomplete world2cam model.";
92 return false;
93 }
94
97
100
104
110
111 for (size_t i = 0; i < cam2world_order; ++i) {
112 cam2world_[
static_cast<uint32_t
>(i)] =
static_cast<double>(params(9 + i));
113 }
114
115 for (size_t i = 0; i < world2cam_order; ++i) {
117 static_cast<double>(params(10 + cam2world_order + i));
118 }
119
120 return true;
121}
uint32_t height
Height of point cloud
uint32_t width
Width of point cloud
◆ affine_
float apollo::perception::base::OmnidirectionalCameraDistortionModel::affine_[3] |
|
protected |
◆ cam2world_
Polynomial apollo::perception::base::OmnidirectionalCameraDistortionModel::cam2world_ |
|
protected |
◆ center_
float apollo::perception::base::OmnidirectionalCameraDistortionModel::center_[2] |
|
protected |
◆ intrinsic_params_
Eigen::Matrix3f apollo::perception::base::OmnidirectionalCameraDistortionModel::intrinsic_params_ |
|
protected |
◆ world2cam_
Polynomial apollo::perception::base::OmnidirectionalCameraDistortionModel::world2cam_ |
|
protected |
该类的文档由以下文件生成: