Skip to content

Commit b0370d1

Browse files
committed
storytelling: add CloseToStopSign
1 parent 2637566 commit b0370d1

File tree

3 files changed

+50
-0
lines changed

3 files changed

+50
-0
lines changed

modules/storytelling/proto/story.proto

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@ message CloseToSignal {
2424
optional double distance = 2 [default = nan];
2525
}
2626

27+
message CloseToStopSign {
28+
optional string id = 1;
29+
optional double distance = 2 [default = nan];
30+
}
31+
2732
// Usage guide for action modules:
2833
// 1. Call `stories.has_XXX()` to check if a story you are interested is in
2934
// charge.
@@ -34,4 +39,6 @@ message Stories {
3439
optional CloseToCrosswalk close_to_crosswalk = 2;
3540
optional CloseToJunction close_to_junction = 3;
3641
optional CloseToSignal close_to_signal = 4;
42+
optional CloseToStopSign close_to_stop_sign = 5;
3743
}
44+

modules/storytelling/story_tellers/close_to_junction_teller.cc

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ using apollo::hdmap::CrosswalkInfoConstPtr;
3333
using apollo::hdmap::JunctionInfoConstPtr;
3434
using apollo::hdmap::PNCJunctionInfoConstPtr;
3535
using apollo::hdmap::SignalInfoConstPtr;
36+
using apollo::hdmap::StopSignInfoConstPtr;
3637

3738
using apollo::planning::ADCTrajectory;
3839

@@ -101,6 +102,23 @@ bool GetSignal(const PathPoint& point, std::string* signal_id) {
101102
return false;
102103
}
103104

105+
bool GetStopSign(const PathPoint& point, std::string* stop_sign_id) {
106+
common::PointENU hdmap_point;
107+
hdmap_point.set_x(point.x());
108+
hdmap_point.set_y(point.y());
109+
std::vector<StopSignInfoConstPtr> stop_signs;
110+
if (HDMapUtil::BaseMap().GetStopSigns(hdmap_point,
111+
FLAGS_search_radius,
112+
&stop_signs) == 0) {
113+
if (stop_signs.size() > 0) {
114+
*stop_sign_id = stop_signs.front()->id().id();
115+
return true;
116+
}
117+
}
118+
return false;
119+
}
120+
121+
104122
} // namespace
105123

106124
/**
@@ -166,6 +184,15 @@ void CloseToJunctionTeller::GetOverlaps(const ADCTrajectory& adc_trajectory) {
166184
signal_distance_ = path_point.s() - s_start;
167185
}
168186
}
187+
188+
// stop_sign
189+
if (stop_sign_id_.empty() || stop_sign_distance_ < 0) {
190+
std::string stop_sign_id;
191+
if (GetStopSign(path_point, &stop_sign_id)) {
192+
stop_sign_id_ = stop_sign_id;
193+
stop_sign_distance_ = path_point.s() - s_start;
194+
}
195+
}
169196
}
170197
}
171198

@@ -225,6 +252,20 @@ void CloseToJunctionTeller::Update(Stories* stories) {
225252
AINFO << "Exit CloseToSignal story";
226253
stories->clear_close_to_signal();
227254
}
255+
256+
// CloseToStopSign
257+
if (!stop_sign_id_.empty() && stop_sign_distance_ >= 0) {
258+
if (!stories->has_close_to_stop_sign()) {
259+
AINFO << "Enter CloseToStopSign story";
260+
}
261+
auto* story = stories->mutable_close_to_stop_sign();
262+
story->set_id(stop_sign_id_);
263+
story->set_distance(stop_sign_distance_);
264+
} else if (stories->has_close_to_stop_sign()) {
265+
AINFO << "Exit CloseToStopSign story";
266+
stories->clear_close_to_stop_sign();
267+
}
268+
228269
}
229270

230271
} // namespace storytelling

modules/storytelling/story_tellers/close_to_junction_teller.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ class CloseToJunctionTeller : public BaseTeller {
4040
double crosswalk_distance_;
4141
std::string signal_id_;
4242
double signal_distance_;
43+
std::string stop_sign_id_;
44+
double stop_sign_distance_;
4345
};
4446

4547
} // namespace storytelling

0 commit comments

Comments
 (0)