Branch data Line data Source code
1 : : // ----------------- BEGIN LICENSE BLOCK ---------------------------------
2 : : //
3 : : // Copyright (C) 2018-2021 Intel Corporation
4 : : //
5 : : // SPDX-License-Identifier: LGPL-2.1-only
6 : : //
7 : : // ----------------- END LICENSE BLOCK -----------------------------------
8 : :
9 : : #include "TestSupport.hpp"
10 : : #include "ad/rss/core/RssSituationExtraction.hpp"
11 : :
12 : : namespace ad {
13 : : namespace rss {
14 : : namespace core {
15 : :
16 : : class RssSituationExtractionSameDirectionTests : public testing::Test
17 : : {
18 : : protected:
19 : 5 : virtual void SetUp()
20 : : {
21 : 5 : worldModel.defaultEgoVehicleRssDynamics = getEgoRssDynamics();
22 : 5 : scene.situationType = situation::SituationType::SameDirection;
23 : 5 : scene.objectRssDynamics = getObjectRssDynamics();
24 : 5 : scene.egoVehicleRssDynamics = getEgoRssDynamics();
25 : 5 : leadingObject = createObject(36., 0.);
26 : 5 : leadingObject.objectId = 0;
27 : :
28 : : {
29 : 5 : world::OccupiedRegion occupiedRegion;
30 : 5 : occupiedRegion.lonRange.minimum = ParametricValue(0.8);
31 : 5 : occupiedRegion.lonRange.maximum = ParametricValue(1.0);
32 : 5 : occupiedRegion.segmentId = 1.;
33 : 5 : occupiedRegion.latRange.minimum = ParametricValue(0.2);
34 : 5 : occupiedRegion.latRange.maximum = ParametricValue(0.4);
35 : :
36 [ + - ]: 5 : leadingObject.occupiedRegions.push_back(occupiedRegion);
37 : : }
38 : :
39 : 5 : followingObject = createObject(36., 0.);
40 : 5 : followingObject.objectId = 1;
41 : : {
42 : 5 : world::OccupiedRegion occupiedRegion;
43 : 5 : occupiedRegion.lonRange.minimum = ParametricValue(0.1);
44 : 5 : occupiedRegion.lonRange.maximum = ParametricValue(0.2);
45 : 5 : occupiedRegion.segmentId = 1.;
46 : 5 : occupiedRegion.latRange.minimum = ParametricValue(0.6);
47 : 5 : occupiedRegion.latRange.maximum = ParametricValue(0.8);
48 [ + - ]: 5 : followingObject.occupiedRegions.push_back(occupiedRegion);
49 : : }
50 : 5 : }
51 : :
52 : 5 : virtual void TearDown()
53 : : {
54 : 5 : followingObject.occupiedRegions.clear();
55 : 5 : leadingObject.occupiedRegions.clear();
56 : 5 : scene.egoVehicleRoad.clear();
57 : 5 : }
58 : :
59 : 3 : world::RoadSegment longitudinalNoDifferenceRoadSegment()
60 : : {
61 : 3 : world::RoadSegment roadSegment;
62 : 3 : world::LaneSegment laneSegment;
63 : :
64 : 3 : laneSegment.id = 1;
65 : 3 : laneSegment.length.minimum = Distance(10);
66 : 3 : laneSegment.length.maximum = Distance(10);
67 : :
68 : 3 : laneSegment.width.minimum = Distance(5);
69 : 3 : laneSegment.width.maximum = Distance(5);
70 : :
71 [ + - ]: 3 : roadSegment.push_back(laneSegment);
72 : 6 : return roadSegment;
73 : : }
74 : :
75 : 4 : world::RoadSegment longitudinalDifferenceRoadSegment()
76 : : {
77 : 4 : world::RoadSegment roadSegment;
78 : 4 : world::LaneSegment laneSegment;
79 : :
80 : 4 : laneSegment.id = 1;
81 : 4 : laneSegment.length.minimum = Distance(5);
82 : 4 : laneSegment.length.maximum = Distance(10);
83 : :
84 : 4 : laneSegment.width.minimum = Distance(5);
85 : 4 : laneSegment.width.maximum = Distance(5);
86 [ + - ]: 4 : roadSegment.push_back(laneSegment);
87 : 8 : return roadSegment;
88 : : }
89 : :
90 : : world::Object followingObject;
91 : : world::Object leadingObject;
92 : : world::WorldModel worldModel;
93 : : world::Scene scene;
94 : : RssSituationExtraction situationExtraction;
95 : : };
96 : :
97 : 2 : TEST_F(RssSituationExtractionSameDirectionTests, noLongitudinalDifference)
98 : : {
99 : 1 : situation::SituationSnapshot situationSnapshot;
100 : :
101 [ + - ]: 1 : scene.egoVehicle = objectAsEgo(leadingObject);
102 [ + - ]: 1 : scene.object = followingObject;
103 : :
104 [ + - + - ]: 1 : scene.egoVehicleRoad.push_back(longitudinalNoDifferenceRoadSegment());
105 [ + - ]: 1 : worldModel.scenes.push_back(scene);
106 : 1 : worldModel.timeIndex = 1;
107 : :
108 [ + - - + : 1 : ASSERT_TRUE(situationExtraction.extractSituations(worldModel, situationSnapshot));
- - - - -
- - - ]
109 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.timeIndex, worldModel.timeIndex);
- - - - -
- ]
110 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.situations.size(), 1u);
- - - - -
- ]
111 : :
112 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.situations[0].relativePosition.longitudinalDistance, Distance(6));
- - - - -
- ]
113 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.situations[0].egoVehicleState.velocity.speedLon.minimum, Speed(10));
- - - - -
- ]
114 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.situations[0].egoVehicleState.velocity.speedLon.maximum, Speed(10));
- - - - -
- ]
115 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.situations[0].egoVehicleState.dynamics.alphaLon.accelMax,
- - - - -
- ]
116 : : scene.egoVehicleRssDynamics.alphaLon.accelMax);
117 : :
118 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.situations[0].relativePosition.lateralPosition,
- - - - -
- ]
119 : : situation::LateralRelativePosition::AtLeft);
120 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.situations[0].relativePosition.lateralDistance, Distance(1));
- - - - -
- ]
121 : : }
122 : :
123 : 2 : TEST_F(RssSituationExtractionSameDirectionTests, longitudinalDifferenceEgoLeading)
124 : : {
125 : 1 : situation::SituationSnapshot situationSnapshot;
126 : :
127 [ + - ]: 1 : scene.egoVehicle = objectAsEgo(leadingObject);
128 [ + - ]: 1 : scene.object = followingObject;
129 : 1 : scene.object.objectType = world::ObjectType::ArtificialObject;
130 [ + - + - ]: 1 : scene.egoVehicleRoad.push_back(longitudinalDifferenceRoadSegment());
131 [ + - ]: 1 : worldModel.scenes.push_back(scene);
132 : 1 : worldModel.timeIndex = 1;
133 : :
134 [ + - - + : 1 : ASSERT_TRUE(situationExtraction.extractSituations(worldModel, situationSnapshot));
- - - - -
- - - ]
135 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.timeIndex, worldModel.timeIndex);
- - - - -
- ]
136 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.situations.size(), 1u);
- - - - -
- ]
137 : :
138 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.situations[0].relativePosition.longitudinalDistance, Distance(2));
- - - - -
- ]
139 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.situations[0].egoVehicleState.velocity.speedLon.minimum, Speed(10));
- - - - -
- ]
140 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.situations[0].egoVehicleState.velocity.speedLon.maximum, Speed(10));
- - - - -
- ]
141 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.situations[0].egoVehicleState.dynamics.alphaLon.accelMax,
- - - - -
- ]
142 : : scene.egoVehicleRssDynamics.alphaLon.accelMax);
143 : :
144 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.situations[0].relativePosition.lateralPosition,
- - - - -
- ]
145 : : situation::LateralRelativePosition::AtLeft);
146 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.situations[0].relativePosition.lateralDistance, Distance(1));
- - - - -
- ]
147 : : }
148 : :
149 : 2 : TEST_F(RssSituationExtractionSameDirectionTests, longitudinalDifferenceEgoFollowing)
150 : : {
151 : 1 : situation::SituationSnapshot situationSnapshot;
152 : :
153 [ + - ]: 1 : scene.egoVehicle = objectAsEgo(followingObject);
154 [ + - ]: 1 : scene.object = leadingObject;
155 [ + - + - ]: 1 : scene.egoVehicleRoad.push_back(longitudinalDifferenceRoadSegment());
156 [ + - ]: 1 : worldModel.scenes.push_back(scene);
157 : 1 : worldModel.timeIndex = 1;
158 : :
159 [ + - - + : 1 : ASSERT_TRUE(situationExtraction.extractSituations(worldModel, situationSnapshot));
- - - - -
- - - ]
160 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.timeIndex, worldModel.timeIndex);
- - - - -
- ]
161 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.situations.size(), 1u);
- - - - -
- ]
162 : :
163 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.situations[0].relativePosition.longitudinalDistance, Distance(2));
- - - - -
- ]
164 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.situations[0].egoVehicleState.velocity.speedLon.minimum, Speed(10));
- - - - -
- ]
165 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.situations[0].egoVehicleState.velocity.speedLon.maximum, Speed(10));
- - - - -
- ]
166 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.situations[0].egoVehicleState.dynamics.alphaLon.accelMax,
- - - - -
- ]
167 : : scene.objectRssDynamics.alphaLon.accelMax);
168 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.situations[0].egoVehicleState.dynamics.alphaLon.brakeMin,
- - - - -
- ]
169 : : scene.objectRssDynamics.alphaLon.brakeMin);
170 : :
171 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.situations[0].relativePosition.lateralPosition,
- - - - -
- ]
172 : : situation::LateralRelativePosition::AtRight);
173 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.situations[0].relativePosition.lateralDistance, Distance(1));
- - - - -
- ]
174 : : }
175 : :
176 : 2 : TEST_F(RssSituationExtractionSameDirectionTests, mergeWorstCase)
177 : : {
178 : 1 : situation::SituationSnapshot situationSnapshot;
179 : :
180 [ + - ]: 1 : scene.egoVehicle = objectAsEgo(followingObject);
181 [ + - ]: 1 : scene.object = leadingObject;
182 : :
183 [ + - + - ]: 1 : scene.egoVehicleRoad.push_back(longitudinalDifferenceRoadSegment());
184 [ + - ]: 1 : worldModel.scenes.push_back(scene);
185 : 1 : scene.egoVehicleRoad.clear();
186 [ + - + - ]: 1 : scene.egoVehicleRoad.push_back(longitudinalNoDifferenceRoadSegment());
187 [ + - ]: 1 : worldModel.scenes.push_back(scene);
188 : 1 : worldModel.timeIndex = 1;
189 : :
190 [ + - - + : 1 : ASSERT_TRUE(situationExtraction.extractSituations(worldModel, situationSnapshot));
- - - - -
- - - ]
191 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.timeIndex, worldModel.timeIndex);
- - - - -
- ]
192 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.situations.size(), 1u);
- - - - -
- ]
193 : :
194 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.situations[0].relativePosition.longitudinalPosition,
- - - - -
- ]
195 : : situation::LongitudinalRelativePosition::AtBack);
196 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.situations[0].relativePosition.longitudinalDistance, Distance(2));
- - - - -
- ]
197 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.situations[0].egoVehicleState.velocity.speedLon.minimum, Speed(10));
- - - - -
- ]
198 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.situations[0].egoVehicleState.velocity.speedLon.maximum, Speed(10));
- - - - -
- ]
199 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.situations[0].egoVehicleState.dynamics.alphaLon.accelMax,
- - - - -
- ]
200 : : scene.objectRssDynamics.alphaLon.accelMax);
201 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.situations[0].egoVehicleState.dynamics.alphaLon.brakeMin,
- - - - -
- ]
202 : : scene.objectRssDynamics.alphaLon.brakeMin);
203 : :
204 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.situations[0].relativePosition.lateralPosition,
- - - - -
- ]
205 : : situation::LateralRelativePosition::AtRight);
206 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.situations[0].relativePosition.lateralDistance, Distance(1));
- - - - -
- ]
207 : :
208 : : // adapt velocities
209 [ + - ]: 2 : auto originalObject = worldModel.scenes[1].egoVehicle;
210 : :
211 : 1 : worldModel.scenes[1].egoVehicle.velocity.speedLatMin = Speed(2.0);
212 : 1 : worldModel.scenes[1].egoVehicle.velocity.speedLatMax = Speed(2.2);
213 : 1 : worldModel.timeIndex++;
214 [ + - - + : 1 : EXPECT_TRUE(situationExtraction.extractSituations(worldModel, situationSnapshot));
- - - - -
- - - ]
215 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.timeIndex, worldModel.timeIndex);
- - - - -
- ]
216 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.situations.size(), 1u);
- - - - -
- ]
217 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.situations[0].egoVehicleState.velocity.speedLat.minimum, Speed(0.));
- - - - -
- ]
218 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.situations[0].egoVehicleState.velocity.speedLat.maximum, Speed(2.2));
- - - - -
- ]
219 [ + - ]: 1 : worldModel.scenes[1].egoVehicle = originalObject;
220 : :
221 : 1 : worldModel.scenes[1].egoVehicle.velocity.speedLonMin = Speed(10.1);
222 : 1 : worldModel.scenes[1].egoVehicle.velocity.speedLonMax = Speed(10.2);
223 : 1 : worldModel.timeIndex++;
224 [ + - - + : 1 : EXPECT_TRUE(situationExtraction.extractSituations(worldModel, situationSnapshot));
- - - - -
- - - ]
225 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.timeIndex, worldModel.timeIndex);
- - - - -
- ]
226 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.situations.size(), 1u);
- - - - -
- ]
227 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.situations[0].egoVehicleState.velocity.speedLon.minimum, Speed(10.));
- - - - -
- ]
228 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.situations[0].egoVehicleState.velocity.speedLon.maximum, Speed(10.2));
- - - - -
- ]
229 [ + - ]: 1 : worldModel.scenes[1].egoVehicle = originalObject;
230 : :
231 [ + - ]: 1 : originalObject = worldModel.scenes[1].object;
232 : 1 : worldModel.scenes[1].object.velocity.speedLatMin = Speed(2.0);
233 : 1 : worldModel.scenes[1].object.velocity.speedLatMax = Speed(2.2);
234 : 1 : worldModel.timeIndex++;
235 [ + - - + : 1 : EXPECT_TRUE(situationExtraction.extractSituations(worldModel, situationSnapshot));
- - - - -
- - - ]
236 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.timeIndex, worldModel.timeIndex);
- - - - -
- ]
237 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.situations.size(), 1u);
- - - - -
- ]
238 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.situations[0].otherVehicleState.velocity.speedLat.minimum, Speed(0.));
- - - - -
- ]
239 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.situations[0].otherVehicleState.velocity.speedLat.maximum, Speed(2.2));
- - - - -
- ]
240 [ + - ]: 1 : worldModel.scenes[1].object = originalObject;
241 : :
242 : 1 : worldModel.scenes[1].object.velocity.speedLonMin = Speed(10.1);
243 : 1 : worldModel.scenes[1].object.velocity.speedLonMax = Speed(10.2);
244 : 1 : worldModel.timeIndex++;
245 [ + - - + : 1 : EXPECT_TRUE(situationExtraction.extractSituations(worldModel, situationSnapshot));
- - - - -
- - - ]
246 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.timeIndex, worldModel.timeIndex);
- - - - -
- ]
247 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.situations.size(), 1u);
- - - - -
- ]
248 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.situations[0].otherVehicleState.velocity.speedLon.minimum, Speed(10.0));
- - - - -
- ]
249 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.situations[0].otherVehicleState.velocity.speedLon.maximum, Speed(10.2));
- - - - -
- ]
250 [ + - ]: 1 : worldModel.scenes[1].object = originalObject;
251 : :
252 : : // adapt lane correctness
253 : 1 : worldModel.scenes[1].egoVehicleRoad.front().front().drivingDirection = world::LaneDrivingDirection::Negative;
254 : 1 : worldModel.timeIndex++;
255 [ + - - + : 1 : EXPECT_TRUE(situationExtraction.extractSituations(worldModel, situationSnapshot));
- - - - -
- - - ]
256 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.timeIndex, worldModel.timeIndex);
- - - - -
- ]
257 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.situations.size(), 1u);
- - - - -
- ]
258 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.situations[0].egoVehicleState.isInCorrectLane, false);
- - - - -
- ]
259 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.situations[0].otherVehicleState.isInCorrectLane, true);
- - - - -
- ]
260 : 1 : worldModel.scenes[1].egoVehicleRoad.front().front().drivingDirection = world::LaneDrivingDirection::Positive;
261 : :
262 : : // influence relative position
263 [ + - ]: 2 : auto const originalEgoOccupiedRegion = worldModel.scenes[1].egoVehicle.occupiedRegions;
264 [ + - ]: 2 : auto const originalObjectOccupiedRegion = worldModel.scenes[1].object.occupiedRegions;
265 : 1 : worldModel.scenes[1].egoVehicle.occupiedRegions.front().latRange.minimum = ParametricValue(0.);
266 : 1 : worldModel.scenes[1].egoVehicle.occupiedRegions.front().lonRange.maximum = ParametricValue(1.);
267 : 1 : worldModel.timeIndex++;
268 [ + - - + : 1 : EXPECT_TRUE(situationExtraction.extractSituations(worldModel, situationSnapshot));
- - - - -
- - - ]
269 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.timeIndex, worldModel.timeIndex);
- - - - -
- ]
270 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.situations.size(), 1u);
- - - - -
- ]
271 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.situations[0].relativePosition.lateralPosition,
- - - - -
- ]
272 : : situation::LateralRelativePosition::Overlap);
273 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.situations[0].relativePosition.lateralDistance, Distance(0.));
- - - - -
- ]
274 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.situations[0].relativePosition.longitudinalPosition,
- - - - -
- ]
275 : : situation::LongitudinalRelativePosition::Overlap);
276 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.situations[0].relativePosition.longitudinalDistance, Distance(0.));
- - - - -
- ]
277 [ + - ]: 1 : worldModel.scenes[1].egoVehicle.occupiedRegions = originalEgoOccupiedRegion;
278 : :
279 : 1 : worldModel.scenes[0].egoVehicle.occupiedRegions.front().latRange.minimum = ParametricValue(0.);
280 : 1 : worldModel.scenes[0].egoVehicle.occupiedRegions.front().lonRange.maximum = ParametricValue(1.);
281 : 1 : worldModel.timeIndex++;
282 [ + - - + : 1 : EXPECT_TRUE(situationExtraction.extractSituations(worldModel, situationSnapshot));
- - - - -
- - - ]
283 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.timeIndex, worldModel.timeIndex);
- - - - -
- ]
284 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.situations.size(), 1u);
- - - - -
- ]
285 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.situations[0].relativePosition.lateralPosition,
- - - - -
- ]
286 : : situation::LateralRelativePosition::Overlap);
287 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.situations[0].relativePosition.lateralDistance, Distance(0.));
- - - - -
- ]
288 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.situations[0].relativePosition.longitudinalPosition,
- - - - -
- ]
289 : : situation::LongitudinalRelativePosition::Overlap);
290 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.situations[0].relativePosition.longitudinalDistance, Distance(0.));
- - - - -
- ]
291 [ + - ]: 1 : worldModel.scenes[0].egoVehicle.occupiedRegions = originalEgoOccupiedRegion;
292 : :
293 : 1 : worldModel.scenes[1].egoVehicle.occupiedRegions.front() = worldModel.scenes[0].object.occupiedRegions.front();
294 : 1 : worldModel.scenes[1].object.occupiedRegions.front() = worldModel.scenes[0].egoVehicle.occupiedRegions.front();
295 : 1 : worldModel.timeIndex++;
296 [ + - - + : 1 : EXPECT_TRUE(situationExtraction.extractSituations(worldModel, situationSnapshot));
- - - - -
- - - ]
297 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.timeIndex, worldModel.timeIndex);
- - - - -
- ]
298 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.situations.size(), 1u);
- - - - -
- ]
299 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.situations[0].relativePosition.lateralPosition,
- - - - -
- ]
300 : : situation::LateralRelativePosition::Overlap);
301 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.situations[0].relativePosition.lateralDistance, Distance(0.));
- - - - -
- ]
302 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.situations[0].relativePosition.longitudinalPosition,
- - - - -
- ]
303 : : situation::LongitudinalRelativePosition::Overlap);
304 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.situations[0].relativePosition.longitudinalDistance, Distance(0.));
- - - - -
- ]
305 [ + - ]: 1 : worldModel.scenes[1].egoVehicle.occupiedRegions = originalEgoOccupiedRegion;
306 [ + - ]: 1 : worldModel.scenes[1].object.occupiedRegions = originalObjectOccupiedRegion;
307 : :
308 : 1 : worldModel.scenes[0].egoVehicle.occupiedRegions.front() = worldModel.scenes[1].object.occupiedRegions.front();
309 : 1 : worldModel.scenes[0].object.occupiedRegions.front() = worldModel.scenes[1].egoVehicle.occupiedRegions.front();
310 : 1 : worldModel.timeIndex++;
311 [ + - - + : 1 : EXPECT_TRUE(situationExtraction.extractSituations(worldModel, situationSnapshot));
- - - - -
- - - ]
312 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.timeIndex, worldModel.timeIndex);
- - - - -
- ]
313 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.situations.size(), 1u);
- - - - -
- ]
314 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.situations[0].relativePosition.lateralPosition,
- - - - -
- ]
315 : : situation::LateralRelativePosition::Overlap);
316 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.situations[0].relativePosition.lateralDistance, Distance(0.));
- - - - -
- ]
317 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.situations[0].relativePosition.longitudinalPosition,
- - - - -
- ]
318 : : situation::LongitudinalRelativePosition::Overlap);
319 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.situations[0].relativePosition.longitudinalDistance, Distance(0.));
- - - - -
- ]
320 [ + - ]: 1 : worldModel.scenes[0].egoVehicle.occupiedRegions = originalEgoOccupiedRegion;
321 [ + - ]: 1 : worldModel.scenes[0].object.occupiedRegions = originalObjectOccupiedRegion;
322 : :
323 : 1 : worldModel.scenes[1].egoVehicle.occupiedRegions.front().latRange.minimum = ParametricValue(0.3);
324 : 1 : worldModel.scenes[1].egoVehicle.occupiedRegions.front().lonRange.maximum = ParametricValue(0.9);
325 : 1 : worldModel.timeIndex++;
326 [ + - - + : 1 : EXPECT_TRUE(situationExtraction.extractSituations(worldModel, situationSnapshot));
- - - - -
- - - ]
327 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.timeIndex, worldModel.timeIndex);
- - - - -
- ]
328 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.situations.size(), 1u);
- - - - -
- ]
329 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.situations[0].relativePosition.lateralPosition,
- - - - -
- ]
330 : : situation::LateralRelativePosition::OverlapRight);
331 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.situations[0].relativePosition.longitudinalPosition,
- - - - -
- ]
332 : : situation::LongitudinalRelativePosition::OverlapBack);
333 [ + - ]: 1 : worldModel.scenes[1].egoVehicle.occupiedRegions = originalEgoOccupiedRegion;
334 : :
335 : 1 : worldModel.scenes[0].egoVehicle.occupiedRegions.front().latRange.minimum = ParametricValue(0.3);
336 : 1 : worldModel.scenes[0].egoVehicle.occupiedRegions.front().lonRange.maximum = ParametricValue(0.9);
337 : 1 : worldModel.timeIndex++;
338 [ + - - + : 1 : EXPECT_TRUE(situationExtraction.extractSituations(worldModel, situationSnapshot));
- - - - -
- - - ]
339 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.timeIndex, worldModel.timeIndex);
- - - - -
- ]
340 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.situations.size(), 1u);
- - - - -
- ]
341 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.situations[0].relativePosition.lateralPosition,
- - - - -
- ]
342 : : situation::LateralRelativePosition::OverlapRight);
343 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.situations[0].relativePosition.longitudinalPosition,
- - - - -
- ]
344 : : situation::LongitudinalRelativePosition::OverlapBack);
345 [ + - ]: 1 : worldModel.scenes[0].egoVehicle.occupiedRegions = originalEgoOccupiedRegion;
346 : :
347 [ + - ]: 1 : worldModel.scenes[0].egoVehicle.occupiedRegions = originalObjectOccupiedRegion;
348 [ + - ]: 1 : worldModel.scenes[1].egoVehicle.occupiedRegions = originalObjectOccupiedRegion;
349 [ + - ]: 1 : worldModel.scenes[0].object.occupiedRegions = originalEgoOccupiedRegion;
350 [ + - ]: 1 : worldModel.scenes[1].object.occupiedRegions = originalEgoOccupiedRegion;
351 : 1 : worldModel.scenes[1].object.occupiedRegions.front().latRange.minimum = ParametricValue(0.3);
352 : 1 : worldModel.scenes[1].object.occupiedRegions.front().lonRange.maximum = ParametricValue(0.9);
353 : 1 : worldModel.timeIndex++;
354 [ + - - + : 1 : EXPECT_TRUE(situationExtraction.extractSituations(worldModel, situationSnapshot));
- - - - -
- - - ]
355 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.timeIndex, worldModel.timeIndex);
- - - - -
- ]
356 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.situations.size(), 1u);
- - - - -
- ]
357 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.situations[0].relativePosition.lateralPosition,
- - - - -
- ]
358 : : situation::LateralRelativePosition::OverlapLeft);
359 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.situations[0].relativePosition.longitudinalPosition,
- - - - -
- ]
360 : : situation::LongitudinalRelativePosition::OverlapFront);
361 [ + - ]: 1 : worldModel.scenes[1].object.occupiedRegions = originalEgoOccupiedRegion;
362 : :
363 : 1 : worldModel.scenes[0].object.occupiedRegions.front().latRange.minimum = ParametricValue(0.3);
364 : 1 : worldModel.scenes[0].object.occupiedRegions.front().lonRange.maximum = ParametricValue(0.9);
365 : 1 : worldModel.timeIndex++;
366 [ + - - + : 1 : EXPECT_TRUE(situationExtraction.extractSituations(worldModel, situationSnapshot));
- - - - -
- - - ]
367 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.timeIndex, worldModel.timeIndex);
- - - - -
- ]
368 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.situations.size(), 1u);
- - - - -
- ]
369 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.situations[0].relativePosition.lateralPosition,
- - - - -
- ]
370 : : situation::LateralRelativePosition::OverlapLeft);
371 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.situations[0].relativePosition.longitudinalPosition,
- - - - -
- ]
372 : : situation::LongitudinalRelativePosition::OverlapFront);
373 [ + - ]: 1 : worldModel.scenes[0].object.occupiedRegions = originalEgoOccupiedRegion;
374 : : }
375 : :
376 : 2 : TEST_F(RssSituationExtractionSameDirectionTests, mergeFails)
377 : : {
378 : 2 : situation::SituationSnapshot situationSnapshot;
379 : :
380 [ + - ]: 1 : scene.egoVehicle = objectAsEgo(followingObject);
381 [ + - ]: 1 : scene.object = leadingObject;
382 : :
383 [ + - + - ]: 1 : scene.egoVehicleRoad.push_back(longitudinalDifferenceRoadSegment());
384 [ + - ]: 1 : worldModel.scenes.push_back(scene);
385 : 1 : scene.egoVehicleRoad.clear();
386 [ + - + - ]: 1 : scene.egoVehicleRoad.push_back(longitudinalNoDifferenceRoadSegment());
387 [ + - ]: 1 : worldModel.scenes.push_back(scene);
388 : 1 : worldModel.timeIndex = 1;
389 : :
390 : : // validate setup
391 [ + - - + : 1 : EXPECT_TRUE(situationExtraction.extractSituations(worldModel, situationSnapshot));
- - - - -
- - - ]
392 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.timeIndex, worldModel.timeIndex);
- - - - -
- ]
393 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.situations.size(), 1u);
- - - - -
- ]
394 : :
395 : : // adapt dynamics
396 : 1 : auto originalRssDynamics = worldModel.scenes[1].objectRssDynamics;
397 : 1 : worldModel.scenes[1].objectRssDynamics.alphaLat.accelMax = Acceleration(3.33);
398 : 1 : worldModel.timeIndex++;
399 [ + - - + : 1 : EXPECT_FALSE(situationExtraction.extractSituations(worldModel, situationSnapshot));
- - - - -
- - - ]
400 : 1 : worldModel.scenes[1].objectRssDynamics = originalRssDynamics;
401 : :
402 : 1 : worldModel.scenes[1].objectRssDynamics.alphaLat.brakeMin = Acceleration(-3.33);
403 : 1 : worldModel.timeIndex++;
404 [ + - - + : 1 : EXPECT_FALSE(situationExtraction.extractSituations(worldModel, situationSnapshot));
- - - - -
- - - ]
405 : 1 : worldModel.scenes[1].objectRssDynamics = originalRssDynamics;
406 : :
407 : 1 : worldModel.scenes[1].objectRssDynamics.alphaLon.accelMax = Acceleration(3.33);
408 : 1 : worldModel.timeIndex++;
409 [ + - - + : 1 : EXPECT_FALSE(situationExtraction.extractSituations(worldModel, situationSnapshot));
- - - - -
- - - ]
410 : 1 : worldModel.scenes[1].objectRssDynamics = originalRssDynamics;
411 : :
412 : 1 : worldModel.scenes[1].objectRssDynamics.alphaLon.brakeMax
413 [ + - ]: 1 : = worldModel.scenes[1].objectRssDynamics.alphaLon.brakeMax + Acceleration(-1.);
414 : 1 : worldModel.timeIndex++;
415 [ + - - + : 1 : EXPECT_FALSE(situationExtraction.extractSituations(worldModel, situationSnapshot));
- - - - -
- - - ]
416 : 1 : worldModel.scenes[1].objectRssDynamics = originalRssDynamics;
417 : :
418 : 1 : worldModel.scenes[1].objectRssDynamics.alphaLon.brakeMin
419 [ + - ]: 1 : = worldModel.scenes[1].objectRssDynamics.alphaLon.brakeMin - Acceleration(-1.);
420 : 1 : worldModel.timeIndex++;
421 [ + - - + : 1 : EXPECT_FALSE(situationExtraction.extractSituations(worldModel, situationSnapshot));
- - - - -
- - - ]
422 : 1 : worldModel.scenes[1].objectRssDynamics = originalRssDynamics;
423 : :
424 : 1 : worldModel.scenes[1].objectRssDynamics.alphaLon.brakeMinCorrect
425 [ + - ]: 1 : = worldModel.scenes[1].objectRssDynamics.alphaLon.brakeMinCorrect + Acceleration(-.5);
426 : 1 : worldModel.timeIndex++;
427 [ + - - + : 1 : EXPECT_FALSE(situationExtraction.extractSituations(worldModel, situationSnapshot));
- - - - -
- - - ]
428 : 1 : worldModel.scenes[1].objectRssDynamics = originalRssDynamics;
429 : :
430 : 1 : worldModel.scenes[1].objectRssDynamics.lateralFluctuationMargin = Distance(1.);
431 : 1 : worldModel.timeIndex++;
432 [ + - - + : 1 : EXPECT_FALSE(situationExtraction.extractSituations(worldModel, situationSnapshot));
- - - - -
- - - ]
433 : 1 : worldModel.scenes[1].objectRssDynamics = originalRssDynamics;
434 : :
435 : 1 : worldModel.scenes[1].objectRssDynamics.responseTime = Duration(5.);
436 : 1 : worldModel.timeIndex++;
437 [ + - - + : 1 : EXPECT_FALSE(situationExtraction.extractSituations(worldModel, situationSnapshot));
- - - - -
- - - ]
438 : 1 : worldModel.scenes[1].objectRssDynamics = originalRssDynamics;
439 : :
440 : : // validate resetting of error setup in the above test code
441 [ + - ]: 1 : worldModel.scenes.resize(1);
442 : 1 : worldModel.timeIndex++;
443 [ + - - + : 1 : EXPECT_TRUE(situationExtraction.extractSituations(worldModel, situationSnapshot));
- - - - -
- - - ]
444 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.situations.size(), 1u);
- - - - -
- ]
445 : 1 : }
446 : :
447 : : } // namespace core
448 : : } // namespace rss
449 : : } // namespace ad
|