30void StaticAlign::Reset() {
42bool StaticAlign::IsStaticPose(
const FramePose& pose) {
43 if (dynamic_centroid_.
count == 0) {
46 double move_dist_x = pose.tx - dynamic_centroid_.
center.
x;
47 double move_dist_y = pose.ty - dynamic_centroid_.
center.
y;
48 double move_dist_z = pose.tz - dynamic_centroid_.
center.
z;
50 std::sqrt(move_dist_x * move_dist_x + move_dist_y * move_dist_y +
51 move_dist_z * move_dist_z);
52 AINFO <<
"dist thresh: " <<
sp_conf_->static_align_dist_thresh
53 <<
", dist: " << move_dist;
54 if (move_dist <= sp_conf_->static_align_dist_thresh) {
60void StaticAlign::UpdateDynamicCentroid(
const FramePose& pose) {
61 int count = dynamic_centroid_.
count;
63 dynamic_centroid_.
start_time = pose.time_stamp;
65 dynamic_centroid_.
end_time = pose.time_stamp;
68 <<
", end: " << dynamic_centroid_.
end_time;
70 double x = dynamic_centroid_.
center.
x * count + pose.tx;
71 double y = dynamic_centroid_.
center.
y * count + pose.ty;
72 double z = dynamic_centroid_.
center.
z * count + pose.tz;
75 dynamic_centroid_.
count = count;
76 dynamic_centroid_.
center.
x = x / count;
77 dynamic_centroid_.
center.
y = y / count;
78 dynamic_centroid_.
center.
z = z / count;
81double StaticAlign::GetCentroidTimeDuring() {
88void StaticAlign::UpdateGoodPoseInfo(
const FramePose& pose) {
89 UpdateDynamicCentroid(pose);
92double StaticAlign::StaticAlignDynamicCentroid(
93 const std::vector<FramePose>& poses) {
95 AINFO <<
"start_index:" << start_index <<
",pose size:" << poses.size();
97 for (
int i = start_index + 1; i < static_cast<int>(poses.size()); ++i) {
99 AINFO <<
"not good pose";
103 if (!IsStaticPose(poses[i])) {
104 AINFO <<
"not static pose";
108 UpdateGoodPoseInfo(poses[i]);
112 double progress = GetCentroidTimeDuring() /
sp_conf_->static_align_duration;
113 if (progress > 1.0) {
119double StaticAlign::StaticAlignRansac(
const std::vector<FramePose>& poses) {
124double StaticAlign::GetStaticAlignProgress(
125 const std::vector<FramePose>& poses) {
126 double progress = 0.0;
127 switch (static_align_detect_method_) {
129 progress = StaticAlignDynamicCentroid(poses);
132 progress = StaticAlignRansac(poses);
142 AINFO <<
"[StaticAlign::process] begin";
143 size_t size = poses.size();
145 AINFO <<
"system has no pose, exit process";
150 progress_ = GetStaticAlignProgress(poses);
152 AINFO <<
"get_static_align_progress error, progress 0.0";
std::shared_ptr< JsonConf > sp_conf_
virtual void ClearGoodPoseInfo()
int TimeToIndex(const std::vector< FramePose > &poses, double time)
virtual bool IsGoodPose(const std::vector< FramePose > &poses, int pose_index)
std::shared_ptr< BadOrGoodPoseInfo > sp_good_pose_info_
std::shared_ptr< BadOrGoodPoseInfo > sp_bad_pose_info_
StaticAlign(std::shared_ptr< JsonConf > sp_conf)
ErrorCode Process(const std::vector< FramePose > &poses)
@ ERROR_VERIFY_NO_GNSSPOS
struct apollo::hdmap::Centroid3D Centroid3D