multicamera project initialization parameters.
35 {
36 if (options.camera_names.empty()) {
37 AERROR <<
"no cameras to be projected";
38 return false;
39 }
40 algorithm::SensorManager* sensor_manager =
41 algorithm::SensorManager::Instance();
42 if (!sensor_manager->Init()) {
43 AERROR <<
"sensor_manager init failed";
44 }
45
46 for (size_t i = 0; i < options.camera_names.size(); ++i) {
47 const std::string& cur_camera_name = options.camera_names.at(i);
48 AINFO <<
"init camera " << cur_camera_name;
49
50 if (!sensor_manager->IsSensorExist(cur_camera_name)) {
51 AERROR <<
"sensor " << cur_camera_name <<
" do not exist";
52 return false;
53 }
54 camera_models_[cur_camera_name] =
55 std::dynamic_pointer_cast<base::BrownCameraDistortionModel>(
56 sensor_manager->GetDistortCameraModel(cur_camera_name));
57 if (!(camera_models_[cur_camera_name])) {
58 AERROR <<
"get null camera_model, camera_name: " << cur_camera_name;
59 return false;
60 }
61 camera_names_.push_back(cur_camera_name);
62 }
63
64 std::sort(camera_names_.begin(), camera_names_.end(),
65 [&](const std::string& lhs, const std::string& rhs) {
66 const auto lhs_cam_intrinsics =
67 camera_models_[lhs]->get_intrinsic_params();
68 const auto rhs_cam_intrinsics =
69 camera_models_[rhs]->get_intrinsic_params();
70 auto lhs_focal_length =
71 0.5 * (lhs_cam_intrinsics(0, 0) + lhs_cam_intrinsics(1, 1));
72 auto rhs_focal_length =
73 0.5 * (rhs_cam_intrinsics(0, 0) + rhs_cam_intrinsics(1, 1));
74 return lhs_focal_length > rhs_focal_length;
75 });
76 AINFO <<
"camera_names sorted by descending focal lengths: "
77 << std::accumulate(camera_names_.begin(), camera_names_.end(),
78 std::string(""),
79 [](std::string& sum, const std::string& s) {
80 return sum + s + " ";
81 });
82
83 return true;
84}