29void CameraLocationRefinementComponent::InitCalibrationService(
30 const CameraLocationRefinement& location_refinement_param) {
32 algorithm::SensorManager::Instance()->GetUndistortCameraModel(
33 location_refinement_param.camera_name());
34 ACHECK(model) <<
"Can't find " << location_refinement_param.camera_name()
35 <<
" in data/conf/sensor_meta.pb.txt";
36 auto pinhole =
static_cast<base::PinholeCameraModel*
>(model.get());
37 name_intrinsic_map_.insert(std::pair<std::string, Eigen::Matrix3f>(
38 location_refinement_param.camera_name(),
39 pinhole->get_intrinsic_params()));
41 auto calibration_service_param =
42 location_refinement_param.calibration_service_param();
43 CalibrationServiceInitOptions calibration_service_init_options;
44 calibration_service_init_options.calibrator_working_sensor_name =
45 location_refinement_param.camera_name();
46 calibration_service_init_options.name_intrinsic_map = name_intrinsic_map_;
47 calibration_service_init_options.calibrator_method =
48 calibration_service_param.calibrator_method();
49 calibration_service_init_options.image_height =
50 static_cast<int>(model->get_height());
51 calibration_service_init_options.image_width =
52 static_cast<int>(model->get_width());
53 calibration_service_.reset(
54 BaseCalibrationServiceRegisterer::GetInstanceByName(
55 calibration_service_param.plugin_param().name()));
56 ACHECK(calibration_service_ !=
nullptr);
57 ACHECK(calibration_service_->Init(calibration_service_init_options))
58 <<
"Failed to init: " << calibration_service_param.plugin_param().name();
59 AINFO <<
"calibration_service: " << calibration_service_->Name();
62void CameraLocationRefinementComponent::InitPostprocessor(
63 const CameraLocationRefinement& location_refinement_param) {
64 InitCalibrationService(location_refinement_param);
66 PostprocessorInitOptions postprocessor_init_options;
68 location_refinement_param.postprocessor_param().plugin_param();
69 postprocessor_init_options.config_path = plugin_param.config_path();
70 postprocessor_init_options.config_file = plugin_param.config_file();
71 postprocessor_init_options.calibration_service = calibration_service_;
73 BasePostprocessorRegisterer::GetInstanceByName(plugin_param.name()));
74 ACHECK(postprocessor_ !=
nullptr);
75 ACHECK(postprocessor_->Init(postprocessor_init_options))
76 <<
"Failed to init: " << plugin_param.name();
79void CameraLocationRefinementComponent::SetCameraHeightAndPitch(
80 const std::map<std::string, float>& name_camera_ground_height_map,
81 const std::map<std::string, float>& name_camera_pitch_angle_diff_map,
82 const float& pitch_angle_calibrator_working_sensor) {
83 if (calibration_service_ ==
nullptr) {
84 AERROR <<
"Calibraion service is not available";
87 calibration_service_->SetCameraHeightAndPitch(
88 name_camera_ground_height_map, name_camera_pitch_angle_diff_map,
89 pitch_angle_calibrator_working_sensor);
95 AERROR <<
"Load camera detection 3d component config failed!";
99 InitPostprocessor(location_refinement_param);
110 const std::shared_ptr<onboard::CameraFrame>& msg) {
114 calibration_service_ !=
nullptr;
116 std::shared_ptr<onboard::CameraFrame> out_message(
new (std::nothrow)
118 out_message->frame_id = msg->frame_id;
119 out_message->timestamp = msg->timestamp;
120 out_message->data_provider = msg->data_provider;
121 out_message->detected_objects = msg->detected_objects;
122 out_message->feature_blob = msg->feature_blob;
123 out_message->camera_k_matrix = msg->camera_k_matrix;
124 out_message->camera2world_pose = msg->camera2world_pose;
128 PERF_BLOCK(
"location_refinement_postprocessor")
129 if (!postprocessor_->Process(obstacle_postprocessor_options,
130 out_message.get())) {
131 AERROR <<
"Failed to post process obstacles.";
136 writer_->Write(out_message);
bool GetProtoConfig(T *config) const
std::shared_ptr< Node > node_
bool Proc(const std::shared_ptr< onboard::CameraFrame > &msg) override
Process of camera location refinement component.
bool Init() override
Init for camera location refinement component.
std::shared_ptr< BaseCameraModel > BaseCameraModelPtr
#define PERF_FUNCTION(...)
optional RefinementChannel channel
bool do_refinement_with_calibration_service
optional string output_obstacles_channel_name