Apollo 11.0
自动驾驶开放平台
history.cc
浏览该文件的文档.
1/*****************************************************************************
2 * Copyright 2019 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 <utility>
24
25#include "cyber/common/log.h"
27
28namespace apollo {
29namespace planning {
30
32// HistoryObjectDecision
33
34void HistoryObjectDecision::Init(const ObjectDecision& object_decisions) {
35 id_ = object_decisions.id();
36 object_decision_.clear();
37 for (int i = 0; i < object_decisions.object_decision_size(); i++) {
38 object_decision_.push_back(object_decisions.object_decision(i));
39 }
40}
41
43 const std::string& id,
44 const std::vector<ObjectDecisionType>& object_decision) {
45 id_ = id;
46 object_decision_.clear();
47 for (const auto decision_type : object_decision) {
48 object_decision_.push_back(decision_type);
49 }
50}
51
52std::vector<const ObjectDecisionType*>
54 std::vector<const ObjectDecisionType*> result;
55 for (size_t i = 0; i < object_decision_.size(); i++) {
56 result.push_back(&(object_decision_[i]));
57 }
58
59 return result;
60}
61
63// HistoryFrame
64
65void HistoryFrame::Init(const ADCTrajectory& adc_trajactory) {
66 adc_trajactory_.CopyFrom(adc_trajactory);
67
68 seq_num_ = adc_trajactory.header().sequence_num();
69 const auto& object_decisions = adc_trajactory.decision().object_decision();
70 for (int i = 0; i < object_decisions.decision_size(); i++) {
71 const std::string id = object_decisions.decision(i).id();
72 HistoryObjectDecision object_decision;
73 object_decision.Init(object_decisions.decision(i));
74 object_decisions_map_[id] = object_decision;
75
76 object_decisions_.push_back(object_decision);
77 }
78}
79
80std::vector<const HistoryObjectDecision*> HistoryFrame::GetObjectDecisions()
81 const {
82 std::vector<const HistoryObjectDecision*> result;
83 for (size_t i = 0; i < object_decisions_.size(); i++) {
84 result.push_back(&(object_decisions_[i]));
85 }
86
87 return result;
88}
89
90std::vector<const HistoryObjectDecision*> HistoryFrame::GetStopObjectDecisions()
91 const {
92 std::vector<const HistoryObjectDecision*> result;
93 for (size_t i = 0; i < object_decisions_.size(); i++) {
94 auto obj_decision = object_decisions_[i].GetObjectDecision();
95 for (const ObjectDecisionType* decision_type : obj_decision) {
96 if (decision_type->has_stop()) {
97 std::vector<ObjectDecisionType> object_decision;
98 object_decision.push_back(*decision_type);
99
101 decision->Init(object_decisions_[i].id(), object_decision);
102 result.push_back(decision);
103 }
104 }
105 }
106
107 // sort
108 std::sort(
109 result.begin(), result.end(),
110 [](const HistoryObjectDecision* lhs, const HistoryObjectDecision* rhs) {
111 return lhs->id() < rhs->id();
112 });
113
114 return result;
115}
116
118 const std::string& id) const {
119 if (object_decisions_map_.find(id) == object_decisions_map_.end()) {
120 return nullptr;
121 }
122 return &(object_decisions_map_.at(id));
123}
124
126// HistoryObjectStatus
127
128void HistoryObjectStatus::Init(const std::string& id,
129 const ObjectStatus& object_status) {
130 id_ = id;
131 object_status_ = object_status;
132}
133
135// HistoryStatus
136
137void HistoryStatus::SetObjectStatus(const std::string& id,
138 const ObjectStatus& object_status) {
139 object_id_to_status_[id] = object_status;
140}
141
142bool HistoryStatus::GetObjectStatus(const std::string& id,
143 ObjectStatus* const object_status) {
144 if (object_id_to_status_.count(id) == 0) {
145 return false;
146 }
147
148 *object_status = object_id_to_status_[id];
149 return true;
150}
151
153// History
154
156 if (history_frames_.empty()) {
157 return nullptr;
158 } else {
159 return &(history_frames_.back());
160 }
161}
162void History::Clear() { history_frames_.clear(); }
163
164int History::Add(const ADCTrajectory& adc_trajectory_pb) {
165 if (history_frames_.size() >=
166 static_cast<size_t>(FLAGS_history_max_record_num)) {
167 history_frames_.pop_front();
168 }
169
170 HistoryFrame history_frame;
171 history_frame.Init(adc_trajectory_pb);
172 history_frames_.emplace_back(std::move(history_frame));
173
174 return 0;
175}
176
177size_t History::Size() const { return history_frames_.size(); }
178
179} // namespace planning
180} // namespace apollo
void Init(const ADCTrajectory &adc_trajactory)
Definition history.cc:65
std::vector< const HistoryObjectDecision * > GetStopObjectDecisions() const
Definition history.cc:90
std::vector< const HistoryObjectDecision * > GetObjectDecisions() const
Definition history.cc:80
const HistoryObjectDecision * GetObjectDecisionsById(const std::string &id) const
Definition history.cc:117
const std::string & id() const
Definition history.h:43
std::vector< const ObjectDecisionType * > GetObjectDecision() const
Definition history.cc:53
void Init(const ObjectDecision &object_decisions)
Definition history.cc:34
const std::string & id() const
Definition history.h:78
void Init(const std::string &id, const ObjectStatus &object_status)
Definition history.cc:128
void SetObjectStatus(const std::string &id, const ObjectStatus &object_status)
Definition history.cc:137
bool GetObjectStatus(const std::string &id, ObjectStatus *const object_status)
Definition history.cc:142
size_t Size() const
Definition history.cc:177
int Add(const ADCTrajectory &adc_trajectory_pb)
Definition history.cc:164
const HistoryFrame * GetLastFrame() const
Definition history.cc:155
Planning module main class.
class register implement
Definition arena_queue.h:37
optional uint32 sequence_num
Definition header.proto:16
optional apollo::common::Header header
optional apollo::planning::DecisionResult decision