50 {
52
53
54 std::map<std::int32_t, apollo::hdmap::LaneBoundaryType_Type>
62
63 obstacles.mutable_header()->CopyFrom(mobileye.
header());
64
65
68
69 obstacles.mutable_lane_marker()->mutable_left_lane_marker()->set_lane_type(
70 lane_conversion_map[mob_left_lane_type]);
71 obstacles.mutable_lane_marker()->mutable_right_lane_marker()->set_lane_type(
72 lane_conversion_map[mob_right_lane_type]);
73
74 obstacles.mutable_lane_marker()->mutable_left_lane_marker()->set_quality(
76 obstacles.mutable_lane_marker()->mutable_left_lane_marker()->set_model_degree(
78
79
80 obstacles.mutable_lane_marker()->mutable_left_lane_marker()->set_c0_position(
82 obstacles.mutable_lane_marker()
83 ->mutable_left_lane_marker()
85 obstacles.mutable_lane_marker()->mutable_left_lane_marker()->set_c2_curvature(
87 obstacles.mutable_lane_marker()
88 ->mutable_left_lane_marker()
90 obstacles.mutable_lane_marker()->mutable_left_lane_marker()->set_view_range(
92
93 obstacles.mutable_lane_marker()->mutable_right_lane_marker()->set_quality(
95 obstacles.mutable_lane_marker()
96 ->mutable_right_lane_marker()
98 obstacles.mutable_lane_marker()->mutable_right_lane_marker()->set_c0_position(
100 obstacles.mutable_lane_marker()
101 ->mutable_right_lane_marker()
103 obstacles.mutable_lane_marker()
104 ->mutable_right_lane_marker()
106 obstacles.mutable_lane_marker()
107 ->mutable_right_lane_marker()
109 obstacles.mutable_lane_marker()->mutable_right_lane_marker()->set_view_range(
111
115
118
121 double adc_velocity =
Speed(adc_vx, adc_vy);
122
123 for (
int index = 0; index < mobileye.
details_738().num_obstacles() &&
124 index < mobileye.details_739_size();
125 ++index) {
126 auto* mob = obstacles.add_perception_obstacle();
127 const auto& data_739 = mobileye.
details_739(index);
128 int mob_id = data_739.
obstacle_id() + FLAGS_mobileye_id_offset;
129 double mob_x = data_739.obstacle_pos_x();
130 double mob_y = -data_739.obstacle_pos_y();
131 double mob_vel_x = data_739.obstacle_rel_vel_x();
132 int mob_type = data_739.obstacle_type();
133
134 double mob_l = 0.0;
135 double mob_w = 0.0;
136 if (mobileye.details_73a_size() <= index) {
139 } else {
141 FLAGS_max_mobileye_obstacle_length) {
143 } else {
145 }
146
148 FLAGS_max_mobileye_obstacle_width) {
150 } else {
152 }
153 }
154
155 mob_x += FLAGS_mobileye_pos_adjust;
156 mob_x += mob_l / 2.0;
157
159
160
161 double converted_x = 0.0;
162 double converted_y = 0.0;
163 double converted_speed = 0.0;
164 double converted_vx = 0.0;
165 double converted_vy = 0.0;
166
167 double path_c1 = 0.0;
168 double path_c2 = 0.0;
169 double path_c3 = 0.0;
170
175 path_c3 =
177 } else {
180 path_c3 =
182 }
183
184 if (!FLAGS_use_navigation_mode) {
185 converted_x = adc_x + xy_point.x();
186 converted_y = adc_y + xy_point.y();
188 converted_speed = adc_velocity + mob_vel_x;
189 converted_vx = converted_speed * std::cos(mob->theta());
190 converted_vy = converted_speed * std::sin(mob->theta());
191 } else {
193 FLAGS_mobileye_pos_adjust;
195 converted_vx = mob_vel_x + chassis.
speed_mps();
196 converted_vy = 0.0;
197
198 if (mobileye.details_73b_size() <= index) {
199 mob->set_theta(0.0);
200 } else {
201 if (!FLAGS_overwrite_mobileye_theta) {
203 M_PI);
204 } else {
205 double nearest_lane_heading =
206 converted_vx > 0
207 ? std::atan2(3 * path_c3 * converted_x * converted_x +
208 2 * path_c2 * converted_x + path_c1,
209 1)
210 :
std::atan2(3 * path_c3 * converted_x * converted_x +
211 2 * path_c2 * converted_x + path_c1,
212 1) +
213 M_PI;
214 AINFO <<
"nearest lane heading is" << nearest_lane_heading;
215 mob->set_theta(nearest_lane_heading);
216 }
217 }
218 }
219
220 mob->set_id(mob_id);
221 mob->mutable_position()->set_x(converted_x);
222 mob->mutable_position()->set_y(converted_y);
223
224 switch (mob_type) {
225 case 0:
226 case 1: {
227 mob->set_type(PerceptionObstacle::VEHICLE);
228 break;
229 }
230 case 2:
231 case 4: {
232 mob->set_type(PerceptionObstacle::BICYCLE);
233 break;
234 }
235 case 3: {
236 mob->set_type(PerceptionObstacle::PEDESTRIAN);
237 break;
238 }
239 default: {
240 mob->set_type(PerceptionObstacle::UNKNOWN);
241 break;
242 }
243 }
244
245 mob->mutable_velocity()->set_x(converted_vx);
246 mob->mutable_velocity()->set_y(converted_vy);
247 mob->set_length(mob_l);
248 mob->set_width(mob_w);
249 mob->set_height(FLAGS_default_height);
250
251 mob->clear_polygon_point();
252
253
255 mob->position().z(), mob->length(), mob->width(),
256 mob->height(), mob->theta());
257
258 mob->set_confidence(0.5);
259 }
260
261 return obstacles;
262}
apollo::common::Point3D Point
void FillPerceptionPolygon(PerceptionObstacle *const perception_obstacle, const double mid_x, const double mid_y, const double mid_z, const double length, const double width, const double height, const double heading)
double GetDefaultObjectLength(const int object_type)
double GetAngleFromQuaternion(const Quaternion quaternion)
Point SLtoXY(const Point &point, const double theta)
double GetNearestLaneHeading(const PointENU &point_enu)
double GetDefaultObjectWidth(const int object_type)
double Speed(const Point &point)
optional double obstacle_pos_y
optional double obstacle_pos_x
optional int32 obstacle_id
optional double obstacle_length
optional double obstacle_width
optional double obstacle_angle
optional double curvature
optional double curvature_derivative
optional int32 model_degree
optional double heading_angle
optional double view_range
optional int32 model_degree
optional double curvature
optional double curvature_derivative
optional double view_range
optional double heading_angle
repeated Details_73a details_73a
optional Details_738 details_738
optional apollo::common::Header header
repeated Details_739 details_739
repeated Details_73b details_73b
optional apollo::localization::Pose pose
optional apollo::common::Point3D linear_velocity
optional apollo::common::Quaternion orientation
optional apollo::common::PointENU position
optional double c3_curvature_derivative
optional double c2_curvature
optional double c1_heading_angle
optional LaneMarker right_lane_marker
optional LaneMarker left_lane_marker
optional LaneMarkers lane_marker