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.default_ego_vehicle_rss_dynamics = getEgoRssDynamics();
22 : 5 : constellation.constellation_type = world::ConstellationType::SameDirection;
23 : 5 : constellation.object_rss_dynamics = getObjectRssDynamics();
24 : 5 : constellation.ego_vehicle_rss_dynamics = getEgoRssDynamics();
25 : 5 : leadingObject = createObject(36., 0.);
26 : 5 : leadingObject.object_id = 0;
27 : :
28 : : {
29 : 5 : world::OccupiedRegion occupiedRegion;
30 : 5 : occupiedRegion.lon_range.minimum = ParametricValue(0.8);
31 : 5 : occupiedRegion.lon_range.maximum = ParametricValue(1.0);
32 : 5 : occupiedRegion.segment_id = 1.;
33 : 5 : occupiedRegion.lat_range.minimum = ParametricValue(0.2);
34 : 5 : occupiedRegion.lat_range.maximum = ParametricValue(0.4);
35 : :
36 [ + - ]: 5 : leadingObject.occupied_regions.push_back(occupiedRegion);
37 : : }
38 : :
39 : 5 : followingObject = createObject(36., 0.);
40 : 5 : followingObject.object_id = 1;
41 : : {
42 : 5 : world::OccupiedRegion occupiedRegion;
43 : 5 : occupiedRegion.lon_range.minimum = ParametricValue(0.1);
44 : 5 : occupiedRegion.lon_range.maximum = ParametricValue(0.2);
45 : 5 : occupiedRegion.segment_id = 1.;
46 : 5 : occupiedRegion.lat_range.minimum = ParametricValue(0.6);
47 : 5 : occupiedRegion.lat_range.maximum = ParametricValue(0.8);
48 [ + - ]: 5 : followingObject.occupied_regions.push_back(occupiedRegion);
49 : : }
50 : 5 : }
51 : :
52 : 5 : virtual void TearDown()
53 : : {
54 : 5 : followingObject.occupied_regions.clear();
55 : 5 : leadingObject.occupied_regions.clear();
56 : 5 : constellation.ego_vehicle_road.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.lane_segments.push_back(laneSegment);
72 : 6 : return roadSegment;
73 : 0 : }
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.lane_segments.push_back(laneSegment);
87 : 8 : return roadSegment;
88 : 0 : }
89 : :
90 : : world::Object followingObject;
91 : : world::Object leadingObject;
92 : : world::WorldModel worldModel;
93 : : world::Constellation constellation;
94 : : RssSituationExtraction constellationExtraction;
95 : : };
96 : :
97 : 4 : TEST_F(RssSituationExtractionSameDirectionTests, noLongitudinalDifference)
98 : : {
99 : 1 : core::RssSituationSnapshot situationSnapshot;
100 : :
101 [ + - ]: 1 : constellation.ego_vehicle = objectAsEgo(leadingObject);
102 [ + - ]: 1 : constellation.object = followingObject;
103 : :
104 [ + - + - ]: 1 : constellation.ego_vehicle_road.push_back(longitudinalNoDifferenceRoadSegment());
105 [ + - ]: 1 : worldModel.constellations.push_back(constellation);
106 : 1 : worldModel.time_index = 1;
107 : :
108 [ + - - + : 1 : ASSERT_TRUE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
- - - - -
- - - +
- ]
109 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.time_index, worldModel.time_index);
- - - - -
- + - ]
110 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.constellations.size(), 1u);
- - - - -
- + - ]
111 : :
112 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.constellations[0].relative_position.longitudinal_distance, Distance(6));
- - - - -
- + - ]
113 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.constellations[0].ego_state.structured_object_state.velocity.speed_lon_min, Speed(10));
- - - - -
- + - ]
114 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.constellations[0].ego_state.structured_object_state.velocity.speed_lon_max, Speed(10));
- - - - -
- + - ]
115 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.constellations[0].ego_state.dynamics.alpha_lon.accel_max,
- - - - -
- ]
116 [ + - ]: 1 : constellation.ego_vehicle_rss_dynamics.alpha_lon.accel_max);
117 : :
118 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.constellations[0].relative_position.lateral_position,
- - - - -
- ]
119 [ + - ]: 1 : core::LateralRelativePosition::AtLeft);
120 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.constellations[0].relative_position.lateral_distance, Distance(1));
- - - - -
- + - ]
121 [ + - ]: 1 : }
122 : :
123 : 4 : TEST_F(RssSituationExtractionSameDirectionTests, longitudinalDifferenceEgoLeading)
124 : : {
125 : 1 : core::RssSituationSnapshot situationSnapshot;
126 : :
127 [ + - ]: 1 : constellation.ego_vehicle = objectAsEgo(leadingObject);
128 [ + - ]: 1 : constellation.object = followingObject;
129 : 1 : constellation.object.object_type = world::ObjectType::ArtificialObject;
130 [ + - + - ]: 1 : constellation.ego_vehicle_road.push_back(longitudinalDifferenceRoadSegment());
131 [ + - ]: 1 : worldModel.constellations.push_back(constellation);
132 : 1 : worldModel.time_index = 1;
133 : :
134 [ + - - + : 1 : ASSERT_TRUE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
- - - - -
- - - +
- ]
135 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.time_index, worldModel.time_index);
- - - - -
- + - ]
136 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.constellations.size(), 1u);
- - - - -
- + - ]
137 : :
138 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.constellations[0].relative_position.longitudinal_distance, Distance(2));
- - - - -
- + - ]
139 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.constellations[0].ego_state.structured_object_state.velocity.speed_lon_min, Speed(10));
- - - - -
- + - ]
140 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.constellations[0].ego_state.structured_object_state.velocity.speed_lon_max, Speed(10));
- - - - -
- + - ]
141 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.constellations[0].ego_state.dynamics.alpha_lon.accel_max,
- - - - -
- ]
142 [ + - ]: 1 : constellation.ego_vehicle_rss_dynamics.alpha_lon.accel_max);
143 : :
144 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.constellations[0].relative_position.lateral_position,
- - - - -
- ]
145 [ + - ]: 1 : core::LateralRelativePosition::AtLeft);
146 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.constellations[0].relative_position.lateral_distance, Distance(1));
- - - - -
- + - ]
147 [ + - ]: 1 : }
148 : :
149 : 4 : TEST_F(RssSituationExtractionSameDirectionTests, longitudinalDifferenceEgoFollowing)
150 : : {
151 : 1 : core::RssSituationSnapshot situationSnapshot;
152 : :
153 [ + - ]: 1 : constellation.ego_vehicle = objectAsEgo(followingObject);
154 [ + - ]: 1 : constellation.object = leadingObject;
155 [ + - + - ]: 1 : constellation.ego_vehicle_road.push_back(longitudinalDifferenceRoadSegment());
156 [ + - ]: 1 : worldModel.constellations.push_back(constellation);
157 : 1 : worldModel.time_index = 1;
158 : :
159 [ + - - + : 1 : ASSERT_TRUE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
- - - - -
- - - +
- ]
160 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.time_index, worldModel.time_index);
- - - - -
- + - ]
161 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.constellations.size(), 1u);
- - - - -
- + - ]
162 : :
163 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.constellations[0].relative_position.longitudinal_distance, Distance(2));
- - - - -
- + - ]
164 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.constellations[0].ego_state.structured_object_state.velocity.speed_lon_min, Speed(10));
- - - - -
- + - ]
165 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.constellations[0].ego_state.structured_object_state.velocity.speed_lon_max, Speed(10));
- - - - -
- + - ]
166 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.constellations[0].ego_state.dynamics.alpha_lon.accel_max,
- - - - -
- ]
167 [ + - ]: 1 : constellation.object_rss_dynamics.alpha_lon.accel_max);
168 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.constellations[0].ego_state.dynamics.alpha_lon.brake_min,
- - - - -
- ]
169 [ + - ]: 1 : constellation.object_rss_dynamics.alpha_lon.brake_min);
170 : :
171 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.constellations[0].relative_position.lateral_position,
- - - - -
- ]
172 [ + - ]: 1 : core::LateralRelativePosition::AtRight);
173 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.constellations[0].relative_position.lateral_distance, Distance(1));
- - - - -
- + - ]
174 [ + - ]: 1 : }
175 : :
176 : 4 : TEST_F(RssSituationExtractionSameDirectionTests, mergeWorstCase)
177 : : {
178 : 1 : core::RssSituationSnapshot situationSnapshot;
179 : :
180 [ + - ]: 1 : constellation.ego_vehicle = objectAsEgo(followingObject);
181 [ + - ]: 1 : constellation.object = leadingObject;
182 : :
183 [ + - + - ]: 1 : constellation.ego_vehicle_road.push_back(longitudinalDifferenceRoadSegment());
184 [ + - ]: 1 : worldModel.constellations.push_back(constellation);
185 : 1 : constellation.ego_vehicle_road.clear();
186 [ + - + - ]: 1 : constellation.ego_vehicle_road.push_back(longitudinalNoDifferenceRoadSegment());
187 [ + - ]: 1 : worldModel.constellations.push_back(constellation);
188 : 1 : worldModel.time_index = 1;
189 : :
190 [ + - - + : 1 : ASSERT_TRUE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
- - - - -
- - - +
- ]
191 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.time_index, worldModel.time_index);
- - - - -
- + - ]
192 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.constellations.size(), 1u);
- - - - -
- + - ]
193 : :
194 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.constellations[0].relative_position.longitudinal_position,
- - - - -
- ]
195 [ + - ]: 1 : core::LongitudinalRelativePosition::AtBack);
196 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.constellations[0].relative_position.longitudinal_distance, Distance(2));
- - - - -
- + - ]
197 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.constellations[0].ego_state.structured_object_state.velocity.speed_lon_min, Speed(10));
- - - - -
- + - ]
198 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.constellations[0].ego_state.structured_object_state.velocity.speed_lon_max, Speed(10));
- - - - -
- + - ]
199 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.constellations[0].ego_state.dynamics.alpha_lon.accel_max,
- - - - -
- ]
200 [ + - ]: 1 : constellation.object_rss_dynamics.alpha_lon.accel_max);
201 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.constellations[0].ego_state.dynamics.alpha_lon.brake_min,
- - - - -
- ]
202 [ + - ]: 1 : constellation.object_rss_dynamics.alpha_lon.brake_min);
203 : :
204 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.constellations[0].relative_position.lateral_position,
- - - - -
- ]
205 [ + - ]: 1 : core::LateralRelativePosition::AtRight);
206 [ + - - + : 1 : ASSERT_EQ(situationSnapshot.constellations[0].relative_position.lateral_distance, Distance(1));
- - - - -
- + - ]
207 : :
208 : : // adapt velocities
209 [ + - ]: 1 : auto originalObject = worldModel.constellations[1].ego_vehicle;
210 : :
211 : 1 : worldModel.constellations[1].ego_vehicle.velocity.speed_lat_min = Speed(2.0);
212 : 1 : worldModel.constellations[1].ego_vehicle.velocity.speed_lat_max = Speed(2.2);
213 : 1 : worldModel.time_index++;
214 [ + - - + : 1 : EXPECT_TRUE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
- - - - -
- - - ]
215 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.time_index, worldModel.time_index);
- - - - -
- ]
216 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.constellations.size(), 1u);
- - - - -
- ]
217 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.constellations[0].ego_state.structured_object_state.velocity.speed_lat_min, Speed(0.));
- - - - -
- ]
218 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.constellations[0].ego_state.structured_object_state.velocity.speed_lat_max, Speed(2.2));
- - - - -
- ]
219 [ + - ]: 1 : worldModel.constellations[1].ego_vehicle = originalObject;
220 : :
221 : 1 : worldModel.constellations[1].ego_vehicle.velocity.speed_lon_min = Speed(10.1);
222 : 1 : worldModel.constellations[1].ego_vehicle.velocity.speed_lon_max = Speed(10.2);
223 : 1 : worldModel.time_index++;
224 [ + - - + : 1 : EXPECT_TRUE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
- - - - -
- - - ]
225 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.time_index, worldModel.time_index);
- - - - -
- ]
226 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.constellations.size(), 1u);
- - - - -
- ]
227 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.constellations[0].ego_state.structured_object_state.velocity.speed_lon_min, Speed(10.));
- - - - -
- ]
228 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.constellations[0].ego_state.structured_object_state.velocity.speed_lon_max, Speed(10.2));
- - - - -
- ]
229 [ + - ]: 1 : worldModel.constellations[1].ego_vehicle = originalObject;
230 : :
231 [ + - ]: 1 : originalObject = worldModel.constellations[1].object;
232 : 1 : worldModel.constellations[1].object.velocity.speed_lat_min = Speed(2.0);
233 : 1 : worldModel.constellations[1].object.velocity.speed_lat_max = Speed(2.2);
234 : 1 : worldModel.time_index++;
235 [ + - - + : 1 : EXPECT_TRUE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
- - - - -
- - - ]
236 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.time_index, worldModel.time_index);
- - - - -
- ]
237 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.constellations.size(), 1u);
- - - - -
- ]
238 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.constellations[0].other_state.structured_object_state.velocity.speed_lat_min, Speed(0.));
- - - - -
- ]
239 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.constellations[0].other_state.structured_object_state.velocity.speed_lat_max, Speed(2.2));
- - - - -
- ]
240 [ + - ]: 1 : worldModel.constellations[1].object = originalObject;
241 : :
242 : 1 : worldModel.constellations[1].object.velocity.speed_lon_min = Speed(10.1);
243 : 1 : worldModel.constellations[1].object.velocity.speed_lon_max = Speed(10.2);
244 : 1 : worldModel.time_index++;
245 [ + - - + : 1 : EXPECT_TRUE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
- - - - -
- - - ]
246 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.time_index, worldModel.time_index);
- - - - -
- ]
247 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.constellations.size(), 1u);
- - - - -
- ]
248 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.constellations[0].other_state.structured_object_state.velocity.speed_lon_min,
- - - - -
- ]
249 : 1 : Speed(10.0));
250 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.constellations[0].other_state.structured_object_state.velocity.speed_lon_max,
- - - - -
- ]
251 : 1 : Speed(10.2));
252 [ + - ]: 1 : worldModel.constellations[1].object = originalObject;
253 : :
254 : : // adapt lane correctness
255 : 1 : worldModel.constellations[1].ego_vehicle_road.front().lane_segments.front().driving_direction
256 : 1 : = world::LaneDrivingDirection::Negative;
257 : 1 : worldModel.time_index++;
258 [ + - - + : 1 : EXPECT_TRUE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
- - - - -
- - - ]
259 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.time_index, worldModel.time_index);
- - - - -
- ]
260 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.constellations.size(), 1u);
- - - - -
- ]
261 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.constellations[0].ego_state.structured_object_state.is_in_correct_lane, false);
- - - - -
- ]
262 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.constellations[0].other_state.structured_object_state.is_in_correct_lane, true);
- - - - -
- ]
263 : 1 : worldModel.constellations[1].ego_vehicle_road.front().lane_segments.front().driving_direction
264 : 1 : = world::LaneDrivingDirection::Positive;
265 : :
266 : : // influence relative position
267 [ + - ]: 1 : auto const originalEgoOccupiedRegion = worldModel.constellations[1].ego_vehicle.occupied_regions;
268 [ + - ]: 1 : auto const originalObjectOccupiedRegion = worldModel.constellations[1].object.occupied_regions;
269 : 1 : worldModel.constellations[1].ego_vehicle.occupied_regions.front().lat_range.minimum = ParametricValue(0.);
270 : 1 : worldModel.constellations[1].ego_vehicle.occupied_regions.front().lon_range.maximum = ParametricValue(1.);
271 : 1 : worldModel.time_index++;
272 [ + - - + : 1 : EXPECT_TRUE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
- - - - -
- - - ]
273 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.time_index, worldModel.time_index);
- - - - -
- ]
274 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.constellations.size(), 1u);
- - - - -
- ]
275 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.constellations[0].relative_position.lateral_position,
- - - - -
- ]
276 : 1 : core::LateralRelativePosition::Overlap);
277 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.constellations[0].relative_position.lateral_distance, Distance(0.));
- - - - -
- ]
278 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.constellations[0].relative_position.longitudinal_position,
- - - - -
- ]
279 : 1 : core::LongitudinalRelativePosition::Overlap);
280 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.constellations[0].relative_position.longitudinal_distance, Distance(0.));
- - - - -
- ]
281 [ + - ]: 1 : worldModel.constellations[1].ego_vehicle.occupied_regions = originalEgoOccupiedRegion;
282 : :
283 : 1 : worldModel.constellations[0].ego_vehicle.occupied_regions.front().lat_range.minimum = ParametricValue(0.);
284 : 1 : worldModel.constellations[0].ego_vehicle.occupied_regions.front().lon_range.maximum = ParametricValue(1.);
285 : 1 : worldModel.time_index++;
286 [ + - - + : 1 : EXPECT_TRUE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
- - - - -
- - - ]
287 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.time_index, worldModel.time_index);
- - - - -
- ]
288 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.constellations.size(), 1u);
- - - - -
- ]
289 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.constellations[0].relative_position.lateral_position,
- - - - -
- ]
290 : 1 : core::LateralRelativePosition::Overlap);
291 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.constellations[0].relative_position.lateral_distance, Distance(0.));
- - - - -
- ]
292 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.constellations[0].relative_position.longitudinal_position,
- - - - -
- ]
293 : 1 : core::LongitudinalRelativePosition::Overlap);
294 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.constellations[0].relative_position.longitudinal_distance, Distance(0.));
- - - - -
- ]
295 [ + - ]: 1 : worldModel.constellations[0].ego_vehicle.occupied_regions = originalEgoOccupiedRegion;
296 : :
297 : 1 : worldModel.constellations[1].ego_vehicle.occupied_regions.front()
298 : 1 : = worldModel.constellations[0].object.occupied_regions.front();
299 : 1 : worldModel.constellations[1].object.occupied_regions.front()
300 : 1 : = worldModel.constellations[0].ego_vehicle.occupied_regions.front();
301 : 1 : worldModel.time_index++;
302 [ + - - + : 1 : EXPECT_TRUE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
- - - - -
- - - ]
303 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.time_index, worldModel.time_index);
- - - - -
- ]
304 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.constellations.size(), 1u);
- - - - -
- ]
305 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.constellations[0].relative_position.lateral_position,
- - - - -
- ]
306 : 1 : core::LateralRelativePosition::Overlap);
307 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.constellations[0].relative_position.lateral_distance, Distance(0.));
- - - - -
- ]
308 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.constellations[0].relative_position.longitudinal_position,
- - - - -
- ]
309 : 1 : core::LongitudinalRelativePosition::Overlap);
310 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.constellations[0].relative_position.longitudinal_distance, Distance(0.));
- - - - -
- ]
311 [ + - ]: 1 : worldModel.constellations[1].ego_vehicle.occupied_regions = originalEgoOccupiedRegion;
312 [ + - ]: 1 : worldModel.constellations[1].object.occupied_regions = originalObjectOccupiedRegion;
313 : :
314 : 1 : worldModel.constellations[0].ego_vehicle.occupied_regions.front()
315 : 1 : = worldModel.constellations[1].object.occupied_regions.front();
316 : 1 : worldModel.constellations[0].object.occupied_regions.front()
317 : 1 : = worldModel.constellations[1].ego_vehicle.occupied_regions.front();
318 : 1 : worldModel.time_index++;
319 [ + - - + : 1 : EXPECT_TRUE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
- - - - -
- - - ]
320 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.time_index, worldModel.time_index);
- - - - -
- ]
321 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.constellations.size(), 1u);
- - - - -
- ]
322 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.constellations[0].relative_position.lateral_position,
- - - - -
- ]
323 : 1 : core::LateralRelativePosition::Overlap);
324 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.constellations[0].relative_position.lateral_distance, Distance(0.));
- - - - -
- ]
325 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.constellations[0].relative_position.longitudinal_position,
- - - - -
- ]
326 : 1 : core::LongitudinalRelativePosition::Overlap);
327 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.constellations[0].relative_position.longitudinal_distance, Distance(0.));
- - - - -
- ]
328 [ + - ]: 1 : worldModel.constellations[0].ego_vehicle.occupied_regions = originalEgoOccupiedRegion;
329 [ + - ]: 1 : worldModel.constellations[0].object.occupied_regions = originalObjectOccupiedRegion;
330 : :
331 : 1 : worldModel.constellations[1].ego_vehicle.occupied_regions.front().lat_range.minimum = ParametricValue(0.3);
332 : 1 : worldModel.constellations[1].ego_vehicle.occupied_regions.front().lon_range.maximum = ParametricValue(0.9);
333 : 1 : worldModel.time_index++;
334 [ + - - + : 1 : EXPECT_TRUE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
- - - - -
- - - ]
335 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.time_index, worldModel.time_index);
- - - - -
- ]
336 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.constellations.size(), 1u);
- - - - -
- ]
337 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.constellations[0].relative_position.lateral_position,
- - - - -
- ]
338 : 1 : core::LateralRelativePosition::OverlapRight);
339 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.constellations[0].relative_position.longitudinal_position,
- - - - -
- ]
340 : 1 : core::LongitudinalRelativePosition::OverlapBack);
341 [ + - ]: 1 : worldModel.constellations[1].ego_vehicle.occupied_regions = originalEgoOccupiedRegion;
342 : :
343 : 1 : worldModel.constellations[0].ego_vehicle.occupied_regions.front().lat_range.minimum = ParametricValue(0.3);
344 : 1 : worldModel.constellations[0].ego_vehicle.occupied_regions.front().lon_range.maximum = ParametricValue(0.9);
345 : 1 : worldModel.time_index++;
346 [ + - - + : 1 : EXPECT_TRUE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
- - - - -
- - - ]
347 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.time_index, worldModel.time_index);
- - - - -
- ]
348 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.constellations.size(), 1u);
- - - - -
- ]
349 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.constellations[0].relative_position.lateral_position,
- - - - -
- ]
350 : 1 : core::LateralRelativePosition::OverlapRight);
351 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.constellations[0].relative_position.longitudinal_position,
- - - - -
- ]
352 : 1 : core::LongitudinalRelativePosition::OverlapBack);
353 [ + - ]: 1 : worldModel.constellations[0].ego_vehicle.occupied_regions = originalEgoOccupiedRegion;
354 : :
355 [ + - ]: 1 : worldModel.constellations[0].ego_vehicle.occupied_regions = originalObjectOccupiedRegion;
356 [ + - ]: 1 : worldModel.constellations[1].ego_vehicle.occupied_regions = originalObjectOccupiedRegion;
357 [ + - ]: 1 : worldModel.constellations[0].object.occupied_regions = originalEgoOccupiedRegion;
358 [ + - ]: 1 : worldModel.constellations[1].object.occupied_regions = originalEgoOccupiedRegion;
359 : 1 : worldModel.constellations[1].object.occupied_regions.front().lat_range.minimum = ParametricValue(0.3);
360 : 1 : worldModel.constellations[1].object.occupied_regions.front().lon_range.maximum = ParametricValue(0.9);
361 : 1 : worldModel.time_index++;
362 [ + - - + : 1 : EXPECT_TRUE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
- - - - -
- - - ]
363 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.time_index, worldModel.time_index);
- - - - -
- ]
364 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.constellations.size(), 1u);
- - - - -
- ]
365 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.constellations[0].relative_position.lateral_position,
- - - - -
- ]
366 : 1 : core::LateralRelativePosition::OverlapLeft);
367 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.constellations[0].relative_position.longitudinal_position,
- - - - -
- ]
368 : 1 : core::LongitudinalRelativePosition::OverlapFront);
369 [ + - ]: 1 : worldModel.constellations[1].object.occupied_regions = originalEgoOccupiedRegion;
370 : :
371 : 1 : worldModel.constellations[0].object.occupied_regions.front().lat_range.minimum = ParametricValue(0.3);
372 : 1 : worldModel.constellations[0].object.occupied_regions.front().lon_range.maximum = ParametricValue(0.9);
373 : 1 : worldModel.time_index++;
374 [ + - - + : 1 : EXPECT_TRUE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
- - - - -
- - - ]
375 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.time_index, worldModel.time_index);
- - - - -
- ]
376 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.constellations.size(), 1u);
- - - - -
- ]
377 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.constellations[0].relative_position.lateral_position,
- - - - -
- ]
378 : 1 : core::LateralRelativePosition::OverlapLeft);
379 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.constellations[0].relative_position.longitudinal_position,
- - - - -
- ]
380 : 1 : core::LongitudinalRelativePosition::OverlapFront);
381 [ + - ]: 1 : worldModel.constellations[0].object.occupied_regions = originalEgoOccupiedRegion;
382 [ + - ]: 1 : }
383 : :
384 : 4 : TEST_F(RssSituationExtractionSameDirectionTests, mergeFails)
385 : : {
386 : 1 : core::RssSituationSnapshot situationSnapshot;
387 : :
388 [ + - ]: 1 : constellation.ego_vehicle = objectAsEgo(followingObject);
389 [ + - ]: 1 : constellation.object = leadingObject;
390 : :
391 [ + - + - ]: 1 : constellation.ego_vehicle_road.push_back(longitudinalDifferenceRoadSegment());
392 [ + - ]: 1 : worldModel.constellations.push_back(constellation);
393 : 1 : constellation.ego_vehicle_road.clear();
394 [ + - + - ]: 1 : constellation.ego_vehicle_road.push_back(longitudinalNoDifferenceRoadSegment());
395 [ + - ]: 1 : worldModel.constellations.push_back(constellation);
396 : 1 : worldModel.time_index = 1;
397 : :
398 : : // validate setup
399 [ + - - + : 1 : EXPECT_TRUE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
- - - - -
- - - ]
400 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.time_index, worldModel.time_index);
- - - - -
- ]
401 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.constellations.size(), 1u);
- - - - -
- ]
402 : :
403 : : // adapt dynamics
404 : 1 : auto originalRssDynamics = worldModel.constellations[1].object_rss_dynamics;
405 : 1 : worldModel.constellations[1].object_rss_dynamics.alpha_lat.accel_max = Acceleration(3.33);
406 : 1 : worldModel.time_index++;
407 [ + - - + : 1 : EXPECT_FALSE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
- - - - -
- - - ]
408 : 1 : worldModel.constellations[1].object_rss_dynamics = originalRssDynamics;
409 : :
410 : 1 : worldModel.constellations[1].object_rss_dynamics.alpha_lat.brake_min = Acceleration(-3.33);
411 : 1 : worldModel.time_index++;
412 [ + - - + : 1 : EXPECT_FALSE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
- - - - -
- - - ]
413 : 1 : worldModel.constellations[1].object_rss_dynamics = originalRssDynamics;
414 : :
415 : 1 : worldModel.constellations[1].object_rss_dynamics.alpha_lon.accel_max = Acceleration(3.33);
416 : 1 : worldModel.time_index++;
417 [ + - - + : 1 : EXPECT_FALSE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
- - - - -
- - - ]
418 : 1 : worldModel.constellations[1].object_rss_dynamics = originalRssDynamics;
419 : :
420 : 1 : worldModel.constellations[1].object_rss_dynamics.alpha_lon.brake_max
421 [ + - ]: 1 : = worldModel.constellations[1].object_rss_dynamics.alpha_lon.brake_max + Acceleration(-1.);
422 : 1 : worldModel.time_index++;
423 [ + - - + : 1 : EXPECT_FALSE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
- - - - -
- - - ]
424 : 1 : worldModel.constellations[1].object_rss_dynamics = originalRssDynamics;
425 : :
426 : 1 : worldModel.constellations[1].object_rss_dynamics.alpha_lon.brake_min
427 [ + - ]: 1 : = worldModel.constellations[1].object_rss_dynamics.alpha_lon.brake_min - Acceleration(-1.);
428 : 1 : worldModel.time_index++;
429 [ + - - + : 1 : EXPECT_FALSE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
- - - - -
- - - ]
430 : 1 : worldModel.constellations[1].object_rss_dynamics = originalRssDynamics;
431 : :
432 : 1 : worldModel.constellations[1].object_rss_dynamics.alpha_lon.brake_min_correct
433 [ + - ]: 1 : = worldModel.constellations[1].object_rss_dynamics.alpha_lon.brake_min_correct + Acceleration(-.5);
434 : 1 : worldModel.time_index++;
435 [ + - - + : 1 : EXPECT_FALSE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
- - - - -
- - - ]
436 : 1 : worldModel.constellations[1].object_rss_dynamics = originalRssDynamics;
437 : :
438 : 1 : worldModel.constellations[1].object_rss_dynamics.lateral_fluctuation_margin = Distance(1.);
439 : 1 : worldModel.time_index++;
440 [ + - - + : 1 : EXPECT_FALSE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
- - - - -
- - - ]
441 : 1 : worldModel.constellations[1].object_rss_dynamics = originalRssDynamics;
442 : :
443 : 1 : worldModel.constellations[1].object_rss_dynamics.response_time = Duration(5.);
444 : 1 : worldModel.time_index++;
445 [ + - - + : 1 : EXPECT_FALSE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
- - - - -
- - - ]
446 : 1 : worldModel.constellations[1].object_rss_dynamics = originalRssDynamics;
447 : :
448 : : // validate resetting of error setup in the above test code
449 [ + - ]: 1 : worldModel.constellations.resize(1);
450 : 1 : worldModel.time_index++;
451 [ + - - + : 1 : EXPECT_TRUE(constellationExtraction.extractSituation(worldModel, situationSnapshot));
- - - - -
- - - ]
452 [ + - - + : 1 : EXPECT_EQ(situationSnapshot.constellations.size(), 1u);
- - - - -
- ]
453 : 1 : }
454 : :
455 : : } // namespace core
456 : : } // namespace rss
457 : : } // namespace ad
|