Apollo 11.0
自动驾驶开放平台
nudge_info.cc
浏览该文件的文档.
1/******************************************************************************
2 * Copyright 2023 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
22
23#include <algorithm>
24
25namespace apollo {
26namespace planning {
27
28void NudgeInfo::set_enable(bool is_enable) {
29 is_enable_ = is_enable;
30}
31
33 return is_enable_;
34}
35
37 is_merge_block_obs_ = is_merge;
38}
40 return is_merge_block_obs_;
41}
42
43const std::unordered_map<std::string, NudgeObstacleInfo>& NudgeInfo::tracking_nudge_obs_info() const {
44 return tracking_nudge_obs_info_;
45}
46
47std::unordered_map<std::string, NudgeObstacleInfo>* NudgeInfo::mutable_tracking_nudge_obs_info() {
48 return &tracking_nudge_obs_info_;
49}
50
51const std::vector<SLPolygon>& NudgeInfo::block_sl_polygons() const {
52 return block_sl_polygons_;
53}
54std::vector<SLPolygon>* NudgeInfo::mutable_block_sl_polygons() {
55 return &block_sl_polygons_;
56}
57
58const std::set<std::string>& NudgeInfo::update_ids() const {
59 return update_ids_;
60}
61std::set<std::string>* NudgeInfo::mutable_update_ids() {
62 return &update_ids_;
63}
64
65const std::vector<std::vector<SLPoint>>& NudgeInfo::extra_nudge_key_points() const {
66 return extra_nudge_key_points_;
67}
68std::vector<std::vector<SLPoint>>* NudgeInfo::mutable_extra_nudge_key_points() {
69 return &extra_nudge_key_points_;
70}
71
72bool NudgeInfo::NeedCheckObsCollision(std::string obs_id) const {
73 if (obs_id.empty()) {
74 return false;
75 }
76
77 if (update_ids_.find(obs_id) != update_ids_.end()) {
78 return true;
79 }
80
81 return false;
82}
83
84bool NudgeInfo::IsObsIgnoreNudgeDecision(std::string obs_id, double obs_start_s, double check_dis) const {
85 if (obs_id.empty()) {
86 return true;
87 }
88
89 if (extra_nudge_key_points_.size() < 2 || extra_nudge_key_points_.at(0).size() < 2) {
90 return false;
91 }
92
93 if (update_ids_.find(obs_id) == update_ids_.end()
94 && obs_start_s - extra_nudge_key_points_.at(0).at(1).s() > check_dis) {
95 return true;
96 }
97
98 return false;
99}
100
101void NudgeInfo::GetFirstBlockSLPolygon(std::string obs_id, SLPolygon* obs_sl_polygon) const {
102 if (obs_id.empty()) {
103 return;
104 }
105 if (update_ids_.find(obs_id) != update_ids_.end() && block_sl_polygons_.size() > 0 && is_merge_block_obs_
106 && block_sl_polygons_.at(0).id().find(obs_id) != std::string::npos) {
107 *obs_sl_polygon = block_sl_polygons_.at(0);
108 }
109}
110
112 sort(block_sl_polygons_.begin(), block_sl_polygons_.end(), [](const SLPolygon& a, const SLPolygon& b) {
113 return a.MinS() < b.MinS();
114 });
115}
116
118 for (auto iter = tracking_nudge_obs_info_.begin(); iter != tracking_nudge_obs_info_.end(); iter++) {
119 std::stringstream debug_str;
120
121 debug_str << "NudgeInfo ---- id: " << iter->first << "; " << "tracking time: " << iter->second.tracking_time
122 << "; "
123 // << "nudge type: " << iter->second.nudge_type.str() << "; "
124 << "nudge probability: " << iter->second.nudge_probability << "; ";
125
126 debug_str << "polygon_points: ";
127
128 for (const auto& point : iter->second.origin_polygon.points()) {
129 debug_str << "(" << point.x() << ", " << point.y() << "), ";
130 }
131 AINFO << debug_str.str();
132 }
133}
134
135bool NudgeInfo::GetInterpolatedNudgeL(bool is_left_nudge, double s, double* nudge_l) const {
136 if (extra_nudge_key_points_.size() < 2 || extra_nudge_key_points_.at(0).size() < 2) {
137 return false;
138 }
139 size_t index = is_left_nudge ? 0 : 1;
140
141 if (s <= extra_nudge_key_points_[index].front().s()) {
142 *nudge_l = extra_nudge_key_points_[index].front().l();
143 return true;
144 }
145 if (s >= extra_nudge_key_points_[index].back().s()) {
146 *nudge_l = extra_nudge_key_points_[index].back().l();
147 return true;
148 }
149 auto iter = std::lower_bound(
150 extra_nudge_key_points_[index].begin(),
151 extra_nudge_key_points_[index].end(),
152 s,
153 [](const SLPoint& sl_point, const double s) { return sl_point.s() < s; });
154 auto last_iter = std::prev(iter);
155 *nudge_l = last_iter->l() + (s - last_iter->s()) * (iter->l() - last_iter->l()) / (iter->s() - last_iter->s());
156 return true;
157}
158
159} // namespace planning
160} // namespace apollo
std::vector< std::vector< SLPoint > > * mutable_extra_nudge_key_points()
Definition nudge_info.cc:68
const std::vector< SLPolygon > & block_sl_polygons() const
Definition nudge_info.cc:51
const std::unordered_map< std::string, NudgeObstacleInfo > & tracking_nudge_obs_info() const
Definition nudge_info.cc:43
bool GetInterpolatedNudgeL(bool is_left_nudge, double s, double *nudge_l) const
const std::set< std::string > & update_ids() const
Definition nudge_info.cc:58
std::unordered_map< std::string, NudgeObstacleInfo > * mutable_tracking_nudge_obs_info()
Definition nudge_info.cc:47
bool is_merge_block_obs() const
Definition nudge_info.cc:39
bool IsObsIgnoreNudgeDecision(std::string obs_id, double obs_start_s, double check_dis) const
Definition nudge_info.cc:84
void set_enable(bool is_enable)
Definition nudge_info.cc:28
std::set< std::string > * mutable_update_ids()
Definition nudge_info.cc:61
std::vector< SLPolygon > * mutable_block_sl_polygons()
Definition nudge_info.cc:54
const std::vector< std::vector< SLPoint > > & extra_nudge_key_points() const
Definition nudge_info.cc:65
void GetFirstBlockSLPolygon(std::string obs_id, SLPolygon *obs_sl_polygon) const
void set_is_merge_block_obs(bool is_merge)
Definition nudge_info.cc:36
bool NeedCheckObsCollision(std::string obs_id) const
Definition nudge_info.cc:72
Planning module main class.
#define AINFO
Definition log.h:42
class register implement
Definition arena_queue.h:37