91 bool routing_from_file =
false);
115 std::string *sim_world_with_planning_data);
152 const std::string &msg);
155 const std::shared_ptr<apollo::relative_map::NavigationInfo> &);
158 const std::shared_ptr<apollo::external_command::LaneFollowCommand> &);
161 const std::shared_ptr<apollo::external_command::ValetParkingCommand> &);
164 const std::shared_ptr<apollo::external_command::ActionCommand> &);
166 void PublishTask(
const std::shared_ptr<apollo::task_manager::Task> &);
184 template <
typename DataType>
185 void UpdateSimulationWorld(
const DataType &data);
187 void UpdateMonitorMessages();
189 Object &CreateWorldObjectIfAbsent(
191 void CreateWorldObjectFromSensorMeasurement(
196 void SetObstaclePolygon(
199 void SetObstacleSensorMeasurements(
204 void UpdatePlanningTrajectory(
207 bool LocateMarker(
const apollo::planning::ObjectDecisionType &decision,
209 void FindNudgeRegion(
const apollo::planning::ObjectDecisionType &decision,
211 void UpdateDecision(
const apollo::planning::DecisionResult &decision_res,
213 void UpdateMainStopDecision(
214 const apollo::planning::MainDecision &main_decision,
215 double update_timestamp_sec,
Object *world_main_stop);
217 template <
typename MainDecision>
218 void UpdateMainChangeLaneDecision(
const MainDecision &decision,
219 Object *world_main_decision) {
220 if (decision.has_change_lane_type() &&
222 decision.change_lane_type() ==
224 auto *change_lane_decision = world_main_decision->add_decision();
225 change_lane_decision->set_change_lane_type(decision.change_lane_type());
228 change_lane_decision->set_position_x(adc.position_x());
229 change_lane_decision->set_position_y(adc.position_y());
230 change_lane_decision->set_heading(adc.heading());
234 void CreatePredictionTrajectory(
236 Object *world_object);
243 void PopulateMapInfo(
double radius);
249 template <
typename MessageT>
251 bool logging =
true) {
252 if (reader->
Empty()) {
254 AINFO_EVERY(100) <<
"Has not received any data from "
261 UpdateSimulationWorld(*msg);
268 template <
typename MessageT>
269 void DumpMessageFromReader(cyber::Reader<MessageT> *reader) {
270 if (reader->Empty()) {
271 AWARN <<
"Has not received any data from " << reader->GetChannelName()
272 <<
". Cannot dump message!";
279 void ReadPlanningCommandFromFile(
const std::string &planning_command_file);
281 template <
typename MessageT>
282 void UpdateLatency(
const std::string &module_name,
283 cyber::Reader<MessageT> *reader) {
284 if (reader->Empty()) {
288 const auto header = reader->GetLatestObserved()->header();
289 const double publish_time_sec = header.timestamp_sec();
290 const double sensor_time_sec =
292 std::max({header.lidar_timestamp(), header.camera_timestamp(),
293 header.radar_timestamp()}))
297 latency.set_timestamp_sec(publish_time_sec);
298 latency.set_total_time_ms((publish_time_sec - sensor_time_sec) * 1.0e3);
299 (*world_.mutable_latency())[module_name] = latency;
316 void UpdateLatencies();
318 template <
typename Po
ints>
319 void DownsampleSpeedPointsByInterval(
const Points &points,
320 size_t downsampleInterval,
321 Points *downsampled_points) {
322 if (points.empty()) {
326 for (
int i = 0; i + 1 < points.size(); i += downsampleInterval) {
327 *downsampled_points->Add() = points[i];
331 *downsampled_points->Add() = *points.rbegin();
334 std::unique_ptr<cyber::Node> node_;
338 SimulationWorld world_;
341 mutable boost::shared_mutex route_paths_mutex_;
342 std::vector<RoutePath> route_paths_;
345 const MapService *map_service_;
348 std::unordered_map<std::string, Object> obj_map_;
351 std::mutex monitor_msgs_mutex_;
352 std::list<std::shared_ptr<common::monitor::MonitorMessage>> monitor_msgs_;
359 bool to_clear_ =
false;
365 std::atomic<bool> ready_to_push_;
368 double current_real_dist_ = 0.0;
369 double current_rss_safe_dist_ = 0.0;
372 apollo::canbus::Chassis_GearPosition gear_location_;
375 std::shared_ptr<cyber::Reader<apollo::canbus::Chassis>> chassis_reader_;
376 std::shared_ptr<cyber::Reader<apollo::localization::Gps>> gps_reader_;
377 std::shared_ptr<cyber::Reader<apollo::localization::LocalizationEstimate>>
378 localization_reader_;
379 std::shared_ptr<cyber::Reader<apollo::perception::PerceptionObstacles>>
380 perception_obstacle_reader_;
381 std::shared_ptr<cyber::Reader<apollo::perception::TrafficLightDetection>>
382 perception_traffic_light_reader_;
383 std::shared_ptr<cyber::Reader<apollo::prediction::PredictionObstacles>>
384 prediction_obstacle_reader_;
385 std::shared_ptr<cyber::Reader<apollo::planning::ADCTrajectory>>
387 std::shared_ptr<cyber::Reader<apollo::control::ControlCommand>>
388 control_command_reader_;
389 std::shared_ptr<cyber::Reader<apollo::relative_map::NavigationInfo>>
391 std::shared_ptr<cyber::Reader<apollo::relative_map::MapMsg>>
392 relative_map_reader_;
393 std::shared_ptr<cyber::Reader<apollo::audio::AudioEvent>> audio_event_reader_;
394 std::shared_ptr<cyber::Reader<apollo::common::DriveEvent>>
396 std::shared_ptr<cyber::Reader<apollo::common::monitor::MonitorMessage>>
398 std::shared_ptr<cyber::Reader<apollo::planning::PlanningCommand>>
399 planning_command_reader_;
400 std::shared_ptr<cyber::Reader<apollo::storytelling::Stories>>
401 storytelling_reader_;
402 std::shared_ptr<cyber::Reader<apollo::audio::AudioDetection>>
403 audio_detection_reader_;
404 std::shared_ptr<cyber::Reader<apollo::task_manager::Task>> task_reader_;
407 std::shared_ptr<cyber::Writer<apollo::relative_map::NavigationInfo>>
411 lane_follow_command_client_;
414 valet_parking_command_client_;
417 action_command_client_;
418 std::shared_ptr<cyber::Writer<apollo::routing::RoutingResponse>>
419 routing_response_writer_;
420 std::shared_ptr<cyber::Writer<apollo::task_manager::Task>> task_writer_;
422 FRIEND_TEST(SimulationWorldServiceTest, UpdateMonitorSuccess);
423 FRIEND_TEST(SimulationWorldServiceTest, UpdateMonitorRemove);
424 FRIEND_TEST(SimulationWorldServiceTest, UpdateMonitorTruncate);
425 FRIEND_TEST(SimulationWorldServiceTest, UpdateChassisInfo);
426 FRIEND_TEST(SimulationWorldServiceTest, UpdateLatency);
427 FRIEND_TEST(SimulationWorldServiceTest, UpdateLocalization);
428 FRIEND_TEST(SimulationWorldServiceTest, UpdatePerceptionObstacles);
429 FRIEND_TEST(SimulationWorldServiceTest, UpdatePlanningTrajectory);
430 FRIEND_TEST(SimulationWorldServiceTest, UpdateDecision);
431 FRIEND_TEST(SimulationWorldServiceTest, UpdatePrediction);
432 FRIEND_TEST(SimulationWorldServiceTest, UpdateRouting);
433 FRIEND_TEST(SimulationWorldServiceTest, UpdateGps);
434 FRIEND_TEST(SimulationWorldServiceTest, UpdateControlCommandWithSimpleLonLat);
435 FRIEND_TEST(SimulationWorldServiceTest, UpdateControlCommandWithSimpleMpc);
436 FRIEND_TEST(SimulationWorldServiceTest, DownsampleSpeedPointsByInterval);