Apollo 11.0
自动驾驶开放平台
mlf_direction_filter.h
浏览该文件的文档.
1/******************************************************************************
2 * Copyright 2024 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#pragma once
17
18#include <string>
19#include <vector>
20#include <iostream>
21#include <algorithm>
22#include <cmath>
23#include <map>
24#include <utility>
25
30
31namespace apollo {
32namespace perception {
33namespace lidar {
34
36 public:
37 MlfDirectionFilter() = default;
38 virtual ~MlfDirectionFilter() = default;
39
40 bool Init(const MlfFilterInitOptions& options = MlfFilterInitOptions())
41 override;
42
43 std::string Name() const override {
44 return "MlfDirectionFilter";
45 }
46 inline double Degree2Angle(double degree) {
47 return degree * 180.0 / M_PI;
48 }
49 inline double Degree2Radian(double angle) {
50 return angle * M_PI / 180.0;
51 }
52
53 void UpdateWithObject(const MlfFilterOptions& options,
54 const MlfTrackDataConstPtr& track_data,
55 TrackedObjectPtr new_object) override;
56 void UpdateWithoutObject(const MlfFilterOptions& options, double timestamp,
57 MlfTrackDataPtr track_data) override;
58
59 protected:
61
63 const TrackedObjectConstPtr& latest_object,
64 TrackedObjectPtr new_object);
65
67 const MlfTrackDataConstPtr& track_data, TrackedObjectPtr new_object,
68 double* direction_measurement_variance,
69 double* angular_measurement_variance,
70 double* angular);
71
73 const TrackedObjectPtr& new_object, double* confidence);
74
76 const MlfTrackDataConstPtr& track_data, TrackedObjectPtr new_object);
77
78 double VecDiffAngle(const Eigen::Vector3d& vec0, const Eigen::Vector3d& vec1);
79
80 double Vec2Angle(const Eigen::Vector3d& vec);
81
82 double LegalizeAngle(double angle);
83
84 void GetDirectionState(TrackedObjectPtr& new_object);
85
86 private:
87 // kalman filter parameters
88 double init_direction_variance_ = 100.0;
89 double predict_noise_per_sqrsec_ = 100.0;
90 double variance_bound_ = 25.0;
91 double max_angular_thresh_ = 50.0;
92 double converged_confidence_minimum_ = 0.6;
93 double angular_scale_ = 0.8;
94 double angular_confidence_thresh_ = 0.7;
95 size_t angular_window_size_ = 5;
96}; // class MlfDirectionFilter
97
98} // namespace lidar
99} // namespace perception
100} // namespace apollo
void ComputeMeasurementConfidence(const TrackedObjectPtr &new_object, double *confidence)
void ComputeConvergenceConfidence(const MlfTrackDataConstPtr &track_data, TrackedObjectPtr new_object)
void GetDirectionState(TrackedObjectPtr &new_object)
std::string Name() const override
Get class name
void ComputeVarianceAndAngular(const MlfTrackDataConstPtr &track_data, TrackedObjectPtr new_object, double *direction_measurement_variance, double *angular_measurement_variance, double *angular)
void UpdateWithoutObject(const MlfFilterOptions &options, double timestamp, MlfTrackDataPtr track_data) override
Interface for updating filter without object
void UpdateWithObject(const MlfFilterOptions &options, const MlfTrackDataConstPtr &track_data, TrackedObjectPtr new_object) override
Interface for updating filter with object
bool Init(const MlfFilterInitOptions &options=MlfFilterInitOptions()) override
Init mlf fitler
void KalmanFilterUpdateDirection(const MlfTrackDataConstPtr &track_data, const TrackedObjectConstPtr &latest_object, TrackedObjectPtr new_object)
void InitializeTrackState(TrackedObjectPtr new_object)
double VecDiffAngle(const Eigen::Vector3d &vec0, const Eigen::Vector3d &vec1)
std::shared_ptr< const MlfTrackData > MlfTrackDataConstPtr
std::shared_ptr< const TrackedObject > TrackedObjectConstPtr
std::shared_ptr< MlfTrackData > MlfTrackDataPtr
std::shared_ptr< TrackedObject > TrackedObjectPtr
class register implement
Definition arena_queue.h:37