BEV map

博客提及了HDMapNet、VectorMapNet和MapTR,这些可能与深度学习相关技术有关,在信息技术领域有一定应用价值。

HDMapNet

VectorMapNet

MapTR

#include "master.h" #include <log_custom.h> #include <cstddef> #include <cstdint> #include <map> #include <string> #include <base/params_manager/params_manager.h> #include <perception_and_ld_map_fusion/data_fusion/geometry_match_info.h> #include "fmt/core.h" #include "lib/sd_navigation/SDMapElementExtract.h" #include "message/env_model/routing_map/routing_map.h" #include "message/env_model/occ/occ.h" #include "message/sensor/camera/bev_lane/bev_lane.h" #include "cyber/event/trace.h" #include "cyber/time/time.h" #include "modules/perception/env/src/lib/base/localmap_conf.h" #include "modules/simulator/deterministic_scheduler/deterministic_scheduler.h" using byd::simulator::deterministic_scheduler::SchedulerUnitManager; using byd::simulator::deterministic_scheduler::TaskType; using namespace cem::fusion; using namespace cem::fusion::extendLane; namespace cem { namespace fusion { std::shared_ptr<cem::fusion::Master> MasterPtr = nullptr; std::shared_ptr<MasterInterface> GetMasterInstance() { if (!MasterPtr) { MasterPtr = std::shared_ptr<Master>(new Master("modules/perception/env", "local_map")); } return MasterPtr; } Master::Master(const std::string &confdir, const std::string &name) { conf_abs_path_ = confdir + std::string("/"); VLOG(1) << "conf_abs_path_ = " << conf_abs_path_; Init(); } void Master::Init() { LoadConfig(); InitMember(); } void Master::LoadConfig() { ParamsManager::Instance()->ReadJsonParams(conf_abs_path_ + "conf/TrafficRoadFusion/E2_Conf_TrafficRoadFusion.json", conf_abs_path_ + "conf/TrafficRoadFusion/E2_Conf_MeasurementEvaluation.json"); } void Master::InitMember() { routing_map_.reset(new RoutingMap()); pre_processor_.reset(new PreProcessor()); post_processor_.reset(new PostProcessor()); messenger_.reset(new Messenger()); stopline_mapping_.reset(new StoplineMapping); traffic_light_mapping_.reset(new TrafficLightMapping); bev_map_processor_.reset(new BevMapPreProcessor()); fusion_manager_.reset(new FusionManager()); fusion_manager_->Init(); map_fusion_.reset(new MapFusion); lane_guidance_.reset(new LaneGuidance); lane_guidance_city_.reset(new LaneGuidanceCity); env_info_processor_.reset(new navigation::EnvInfoProcessor()); traffic_flow_mapping_.reset(new TrafficFlowMapping); toggle_to_bev_info_.push(MapType::BEV_MAP); cross_road_construction_.reset(new CrossRoadConstruction); cross_road_construction_->Init(); extend_lane_.reset(new ExtendLane); debug_infos_.reset(new DebugInfos); sd_navigation_base_ = std::make_shared<navigation::SdNavigationBase>(); sd_navigation_highway_ = std::make_shared<navigation::SdNavigationHighway>(); sd_navigation_city_ = std::make_shared<navigation::SdNavigationCity>(); if (FLAGS_init_map_source == "ld" || FLAGS_init_map_source == "LD") { toggle_to_bev_info_.push(MapType::HD_MAP); } else { toggle_to_bev_info_.push(MapType::BEV_MAP); } } #define MapLessFlag void Master::Proc() { env_status_ = std::make_shared<byd::msg::orin::routing_map::EnvStatus>(); //get previous cross_road status and cross road distance pre_processor_->is_cross_road_status = cross_road_construction_->IsCrossRoad(); pre_processor_->cross_road_distance = cross_road_construction_->CrossRoadDis(); pre_processor_->Process(); //get previous cross_road status pre_processor_->is_cross_road_status = cross_road_construction_->IsCrossRoad(); RoutingMapPtr routing_map_raw{nullptr}; SensorDataManager::Instance()->GetLatestSensorFrame(routing_map_raw); auto raw_bev_map_ptr = INTERNAL_PARAMS.raw_bev_data.GetRawBevMapPtr(); ///高速和城区的切换 bool IS_ON_HIGHWAY_FLAG = false; { IS_ON_HIGHWAY_FLAG = GetIsOnHighwayFlag(routing_map_raw); if (IS_ON_HIGHWAY_FLAG) { sd_navigation_base_ = sd_navigation_highway_; } else { sd_navigation_base_ = sd_navigation_city_; } } env_status_->set_is_on_freeway(IS_ON_HIGHWAY_FLAG == true); DetectBevMap bev_map = pre_processor_->GetGlobalBevMapPtr(); ///停止线处理 stopline_mapping_->Process(); const auto &bev_stopline_objs = stopline_mapping_->GetStopLines(); ///导航推荐 std::vector<std::pair<uint64_t, std::pair<int, int>>> guide_lane_result = {}; std::vector<uint64_t> sd_guide_lane_ids_ref = {}; sd_navigation_base_->Proc(routing_map_raw, raw_bev_map_ptr, bev_map.bev_map_ptr, guide_lane_result, sd_guide_lane_ids_ref); auto junctions_ptr = INTERNAL_PARAMS.navigation_info_data.GetJunctionInfoCityPtr(); if ((!IS_ON_HIGHWAY_FLAG) && (routing_map_raw != nullptr)) { auto trajectory = sd_navigation_city_->GetNextRightPoints(routing_map_raw); pre_processor_->SetRightTurnTrajectory(routing_map_raw->header.timestamp, trajectory); } ///env_info env_info_processor_->SetIsOnHighway(IS_ON_HIGHWAY_FLAG); env_info_processor_->Process(bev_stopline_objs); const EnvInfo *env_info = env_info_processor_->GetEnvInfo(); if (bev_map.bev_map_ptr != nullptr) { bev_map.bev_map_ptr->env_info = *env_info; } bev_map_processor_->Process(bev_map, sd_guide_lane_ids_ref); fusion_manager_->Process(); const auto routing_map = pre_processor_->routing_map_pre_processor_.GetRoutingMap(); if (routing_map != nullptr) { routing_map->env_info = *env_info; } extend_lane_->Process(bev_map); bev_ld_map_geometry_match_info_.CalculateMapGeometryMatchInfo(fusion_manager_->GetBevMapInfo(), fusion_manager_->GetLdMapInfo()); // cross road part cross_road_construction_->SetGeometryMatchInfo(&bev_ld_map_geometry_match_info_); cross_road_construction_->Process(bev_map.bev_map_ptr, bev_map.Twb, raw_bev_map_ptr, junctions_ptr); // Post-processing of the bev map and intergration the guide lane, virtual // lane, traffic light status, etc. lane_guidance_city_->Process(routing_map_raw, bev_map, bev_stopline_objs, guide_lane_result); traffic_light_mapping_->Process(routing_map_raw, routing_map, lane_guidance_city_->GetMapInfo(), sd_navigation_city_); GeometryMatchResult match_detail; auto map_convert_type = MapToggleMode(match_detail); messenger_->PulishDiagno(); messenger_->PulishTrafficLightE2E(traffic_light_mapping_->GetTrafficLightsE2E()); bool used_ld_map = toggle_to_bev_info_.back() == MapType::HD_MAP; uint32_t map_counter = 0; // std::string map_type_str = used_ld_map ? "ld" : "bev"; map_counter = used_ld_map ? (routing_map ? routing_map->header.cycle_counter : 2) : (lane_guidance_city_->GetMapInfo() ? lane_guidance_city_->GetMapInfo()->header.cycle_counter : 1); const auto &map_convert_params = ParamsManager::Instance()->GetMapConvertParams(); if (IS_ON_HIGHWAY_FLAG) { used_ld_map = false; env_status_->clear_hd_map_suppression_reason(); env_status_->clear_perception_map_suppression_reason(); if (env_info->is_switched_to_LD_ && match_detail.fail_reason != kLostHdMapLane) { env_status_->set_perception_map_suppression_reason( byd::msg::orin::routing_map::EnvStatus::MapSuppressionReason::EnvStatus_MapSuppressionReason_EGO_IN_THE_RAMP); used_ld_map = true; } else { if (match_detail.fail_reason == kLostHdMapLane) { env_status_->set_hd_map_suppression_reason( byd::msg::orin::routing_map::EnvStatus::MapSuppressionReason::EnvStatus_MapSuppressionReason_EGO_OUTSIDE_MAP); } else { env_status_->set_hd_map_suppression_reason( byd::msg::orin::routing_map::EnvStatus::MapSuppressionReason::EnvStatus_MapSuppressionReason_EGO_NOT_IN_THE_RAMP); } used_ld_map = false; } env_status_->clear_distance_to_next_junction(); env_status_->clear_distance_to_passed_junction(); env_status_->clear_left_laneline_match_info(); env_status_->clear_right_laneline_match_info(); // todo: add env status here } else { if (map_convert_params.map_stay_ld) { used_ld_map = true; } else if (map_convert_params.map_stay_bev) { used_ld_map = false; } } std::string map_type_str = used_ld_map ? "ld" : "bev"; if (!map_convert_params.map_stay_ld && used_ld_map) { const bool ld_has{false}; // const bool ld_has = bev_ld_map_geometry_match_info_.LDHasEnoughPoints(); // const bool bev_has = bev_ld_map_geometry_match_info_.BEVHasEnoughPoints(); if (!routing_map || routing_map->route.navi_start.section_id == 0U) { used_ld_map = false; if (!toggle_to_bev_info_.empty()) { toggle_to_bev_info_.pop(); } toggle_to_bev_info_.emplace(MapType::BEV_MAP); if (!routing_map) { env_status_->set_hd_map_suppression_reason( byd::msg::orin::routing_map::EnvStatus::MapSuppressionReason::EnvStatus_MapSuppressionReason_NO_HD_MAP_FRAME); } else { env_status_->set_hd_map_suppression_reason( byd::msg::orin::routing_map::EnvStatus::MapSuppressionReason::EnvStatus_MapSuppressionReason_NO_NAVIGATION_START_SECTION); } env_status_->clear_perception_map_suppression_reason(); map_type_str = fmt::format("bev ld_less_points.[{:d}-{}-{:d}]", static_cast<bool>(routing_map), routing_map ? routing_map->route.navi_start.section_id : 0, ld_has); } } RoutingMapPtr routing_map_copy_ptr = nullptr; if (nullptr != routing_map) { bool use_ld_tmp = used_ld_map; if (true == used_ld_map) { routing_map->sensor_status_info.sensor_status = 2; } post_processor_->run(routing_map, used_ld_map); if (use_ld_tmp && !used_ld_map) { env_status_->set_hd_map_suppression_reason( byd::msg::orin::routing_map::EnvStatus::MapSuppressionReason::EnvStatus_MapSuppressionReason_CLOSE_TO_HIGH_LEVEL_ROAD); env_status_->clear_perception_map_suppression_reason(); env_status_->clear_distance_to_next_junction(); env_status_->clear_distance_to_passed_junction(); env_status_->clear_left_laneline_match_info(); env_status_->clear_right_laneline_match_info(); } map_fusion_->SetGeometryMatchInfo(&bev_ld_map_geometry_match_info_); routing_map_copy_ptr = std::make_shared<RoutingMap>(*routing_map); map_fusion_->Process(bev_map, routing_map_copy_ptr); } if (used_ld_map) { env_status_->set_map_source(byd::msg::orin::routing_map::EnvStatus::EnvSource::EnvStatus_EnvSource_HD_MAP); } else { env_status_->set_map_source(byd::msg::orin::routing_map::EnvStatus::EnvSource::EnvStatus_EnvSource_PERCEPTION_MAP); } #ifdef MapLessFlag used_ld_map = false; #endif debug_infos_->SetDebugInfo(used_ld_map, lane_guidance_city_->GetMapInfo(), lane_guidance_city_->GetTwb(), routing_map_copy_ptr); messenger_->PulishFusionMap(!used_ld_map, lane_guidance_city_->GetMapInfo(), routing_map_copy_ptr, bev_stopline_objs, IS_ON_HIGHWAY_FLAG, sd_navigation_city_->GetInfo()); if (auto map_output = messenger_->GetFusionMapInfo(); map_output) { double adc_to_junction = traffic_light_mapping_->DistanceToJunction(); uint64_t ld_counter = routing_map == nullptr ? 0 : routing_map->header.cycle_counter; uint64_t bev_counter = lane_guidance_city_->GetMapInfo() == nullptr ? 0 : lane_guidance_city_->GetMapInfo()->header.cycle_counter; map_output->mutable_map_info()->mutable_env_status()->CopyFrom(*env_status_); map_output->mutable_map_info()->set_map_version( fmt::format("map_type:{} ld_counter:{} bev_counter:{} vision_counter:{} " "adc_to_junction:{:.2f} map_change_type:{} " "stay_ld:{:d} stay_bev:{:d} IS_ON_HIGHWAY_FLAG:{:d} " "used_ld_map:{:d} is_switched:{:d}", map_type_str, ld_counter, bev_counter, traffic_light_mapping_->GetPerceptionCyberCounter(), adc_to_junction, to_string(map_convert_type), map_convert_params.map_stay_ld, map_convert_params.map_stay_bev, IS_ON_HIGHWAY_FLAG, used_ld_map, env_info->is_switched_to_LD_) + sd_navigation_city_->GetInfo()); map_output->mutable_map_info()->set_engine_version( bev_ld_map_geometry_match_info_.GetDebugInfo() + fmt::format(" is_keep_lane:{:d} is_right:{:d} ", is_lane_keeping_, sd_navigation_city_->IsEgoInDedicatedRightLane()) + traffic_light_mapping_->TrafficLightLaneDebug()); GEOMETRY_LOG << map_output->map_info().map_version(); TRAFFIC_LOG << map_output->map_info().engine_version(); } } bool Master::GetIsOnHighwayFlag(const RoutingMapPtr &routing_map_raw) { auto is_on_highway_flag = [](const SDSectionInfo &sd_section_info) { auto &current_road_class = sd_section_info.road_class; uint32_t current_section_type = sd_section_info.link_type; uint64_t sd_section_id = sd_section_info.id / 10; if ((sd_section_id == 1678534592) || (sd_section_id == 1699361336) || (sd_section_id == 1699374097) || (sd_section_id == 1691246158) || (sd_section_id == 1607693456) || (sd_section_id == 1607693601) || (sd_section_id == 1648672436) || (sd_section_id == 1648672824) || (sd_section_id == 1678890528) || (sd_section_id == 1705771743) || (sd_section_id == 1705771555) || (sd_section_id == 1699402002) || (sd_section_id == 1699402004) || (sd_section_id == 1613352349) || (sd_section_id == 1678533134) || (sd_section_id == 1699372997) || (sd_section_id == 1699374094) || (sd_section_id == 1607690036) || (sd_section_id == 1607690332) || (sd_section_id == 1664789284) || (sd_section_id == 1664789271) || (sd_section_id == 1648672814) || (sd_section_id == 1678890452) || (sd_section_id == 1699443498) || (sd_section_id == 1705771744) || (sd_section_id == 1705771880) || (sd_section_id == 1705771278) || (sd_section_id == 1705771745) || (sd_section_id == 1699402006) || (sd_section_id == 1699402007) || (sd_section_id == 1705771745) || (sd_section_id == 1663998523) || (sd_section_id == 1582251492)) { return false; } if (current_road_class == SDRoadClass::SD_HIGHWAY || current_road_class == SDRoadClass::SD_CITY_FAST_WAY || (current_section_type & (uint32_t)SDLinkTypeMask::SDLT_IC) == (uint32_t)SDLinkTypeMask::SDLT_IC || (current_section_type & (uint32_t)SDLinkTypeMask::SDLT_JCT) == (uint32_t)SDLinkTypeMask::SDLT_JCT || (current_section_type & (uint32_t)SDLinkTypeMask::SDLT_SERVICE) == (uint32_t)SDLinkTypeMask::SDLT_SERVICE) { return true; } return false; }; auto is_highway_ramp = [](const SDSectionInfo &sd_section_info) { uint32_t section_type = sd_section_info.link_type; if ((section_type & (uint32_t)SDLinkTypeMask::SDLT_JCT) == (uint32_t)SDLinkTypeMask::SDLT_JCT || (section_type & (uint32_t)SDLinkTypeMask::SDLT_IC) == (uint32_t)SDLinkTypeMask::SDLT_IC || (section_type & (uint32_t)SDLinkTypeMask::SDLT_SERVICE) == (uint32_t)SDLinkTypeMask::SDLT_SERVICE || (section_type & (uint32_t)SDLinkTypeMask::SDLT_PARK) == (uint32_t)SDLinkTypeMask::SDLT_PARK || (section_type & (uint32_t)SDLinkTypeMask::SDLT_RAMP) == (uint32_t)SDLinkTypeMask::SDLT_RAMP || (sd_section_info.road_class == SDRoadClass::SD_OTHER_ROAD && (section_type & (uint32_t)SDLinkTypeMask::SDLT_POICONNECTION) == (uint32_t)SDLinkTypeMask::SDLT_POICONNECTION)) { return true; } else { return false; } }; auto is_highway_city_connection = [is_on_highway_flag, is_highway_ramp]( const SDSectionInfo &pre_sd_section_info, const SDSectionInfo &cur_sd_section_info, const SDSectionInfo &suc_sd_section_info) { uint32_t cur_section_type = cur_sd_section_info.link_type; if ((pre_sd_section_info.successor_section_id_list.size() == 1) && (is_on_highway_flag(pre_sd_section_info)) && ((cur_section_type & (uint32_t)SDLinkTypeMask::SDLT_IC) == (uint32_t)SDLinkTypeMask::SDLT_IC) && (!is_on_highway_flag(suc_sd_section_info) && (!is_highway_ramp(suc_sd_section_info)))) { return true; } else { return false; } }; if (routing_map_raw == nullptr) { return false; } auto &sd_mpp_sections = routing_map_raw->sd_route.mpp_sections; uint64_t sd_ego_sectionid = routing_map_raw->sd_route.navi_start.section_id; int ego_section_index = -1; for (unsigned int i = 0; i < sd_mpp_sections.size(); i++) { if (sd_ego_sectionid == sd_mpp_sections[i].id) { ego_section_index = i; break; } } if (ego_section_index == -1) { return routing_map_raw->is_on_highway; } auto &current_section = sd_mpp_sections[ego_section_index]; bool IS_ON_HIGHWAY_FLAG = routing_map_raw->is_on_highway; if (IS_ON_HIGHWAY_FLAG) { if (!is_on_highway_flag(current_section)) { return false; } if (ego_section_index >= 1 && ego_section_index < sd_mpp_sections.size() - 1) { if (is_highway_city_connection(sd_mpp_sections[ego_section_index - 1], current_section, sd_mpp_sections[ego_section_index + 1])) { return false; } } if (is_highway_ramp(current_section)) { return true; } double length_tmp = fabs(current_section.length - routing_map_raw->sd_route.navi_start.s_offset); double max_range = 1500; for (unsigned int i = ego_section_index + 1; i < sd_mpp_sections.size(); i++) { if (max_range < length_tmp) { break; } if (i >= 1 && i < sd_mpp_sections.size() - 1) { if (is_highway_city_connection(sd_mpp_sections[i - 1], sd_mpp_sections[i], sd_mpp_sections[i + 1])) { IS_ON_HIGHWAY_FLAG = false; break; } } if (is_on_highway_flag(sd_mpp_sections[i]) && is_highway_ramp(sd_mpp_sections[i])) { break; } if (!is_on_highway_flag(sd_mpp_sections[i])) { IS_ON_HIGHWAY_FLAG = false; break; } length_tmp += sd_mpp_sections[i].length; } return IS_ON_HIGHWAY_FLAG; } else { return false; } } MapConvertType Master::MapToggleMode(GeometryMatchResult &match_detail) { static constexpr size_t queue_max_size = 30; if (bev_ld_matched_info_.size() > queue_max_size) { bev_ld_matched_info_.pop(); } if (toggle_to_bev_info_.size() > queue_max_size) { toggle_to_bev_info_.pop(); } constexpr double distance_bev_to_ld_max = 150; constexpr double distance_bev_to_ld_min = 0.5; constexpr double distance_ld_to_bev_max = 150; constexpr double distance_threshold = 100; const bool bev_ld_boundary_matched = bev_ld_map_geometry_match_info_.IsLaneBoundaryMatch(match_detail); double adc_to_junction = traffic_light_mapping_->DistanceToJunction(); bool is_drive_into_unreliable_road = traffic_light_mapping_->IsUnreliableRoadCrossJunction(); is_drive_into_unreliable_road = false; bool distance_bev_to_ld = adc_to_junction < distance_bev_to_ld_max && adc_to_junction > distance_bev_to_ld_min; bool bev_ld_matched_current_period = distance_bev_to_ld && bev_ld_boundary_matched; double dis_ego_to_passed_junction = traffic_light_mapping_->GetPreviousJunctionEgoPassed(); LaneInfo ego_lane_ld = bev_ld_map_geometry_match_info_.GetLdBevLane(); bool ego_in_junction = ego_lane_ld.id != 0 && ego_lane_ld.type == cem::message::env_model::LaneType::LANE_VIRTUAL_JUNCTION; PLanningResultPtr planning_result{nullptr}; SensorDataManager::Instance()->GetLatestSensorFrame(planning_result); if (planning_result) { if (planning_result->lc_state == PLanningResultData::Keeping) { is_lane_keeping_ = true; } else { is_lane_keeping_ = false; } } if (!env_status_->is_on_freeway() && ((match_detail.fail_reason == MatchFailReason::kNotFailed) || (match_detail.fail_reason == MatchFailReason::kMatchFailed))) { env_status_->set_distance_to_next_junction(adc_to_junction); env_status_->set_distance_to_passed_junction(dis_ego_to_passed_junction); env_status_->mutable_left_laneline_match_info()->set_average_offset(match_detail.left_offset_average); env_status_->mutable_left_laneline_match_info()->set_max_offset(match_detail.left_offset_max); env_status_->mutable_right_laneline_match_info()->set_average_offset(match_detail.right_offset_average); env_status_->mutable_right_laneline_match_info()->set_max_offset(match_detail.right_offset_max); } if (env_status_->is_on_freeway() && match_detail.fail_reason == MatchFailReason::kLostHdMapLane && (!is_lane_keeping_)) { match_detail.fail_reason = MatchFailReason::kNotFailed; } GEOMETRY_LOG << fmt::format( " bev_ld_boundary_matched:{:d} distance_to_junction:{:.2f} ego_in_junction:{:d} vector_type:{:d} size:{:d} " "ego_dis_to_last_junction:{:.2f} is_lane_keeping:{:d} bev_ld_matched_current_period:{:d}", bev_ld_boundary_matched, adc_to_junction, ego_in_junction, (toggle_to_bev_info_.empty() ? MapType::UNKOWN_MAP : toggle_to_bev_info_.back()), toggle_to_bev_info_.size(), dis_ego_to_passed_junction, is_lane_keeping_, bev_ld_matched_current_period); switch (toggle_to_bev_info_.back()) { case MapType::HD_MAP: { if (adc_to_junction > distance_ld_to_bev_max && bev_ld_boundary_matched && dis_ego_to_passed_junction > distance_threshold && is_lane_keeping_) { toggle_to_bev_info_.emplace(MapType::BEV_MAP); env_status_->set_hd_map_suppression_reason( byd::msg::orin::routing_map::EnvStatus::MapSuppressionReason::EnvStatus_MapSuppressionReason_EGO_PASSED_JUNCTION); return MapConvertType::LD_2_BEV; } if (!is_lane_keeping_) { env_status_->set_perception_map_suppression_reason( byd::msg::orin::routing_map::EnvStatus::MapSuppressionReason::EnvStatus_MapSuppressionReason_EGO_IS_CHANGING_LANE); } else if (adc_to_junction <= distance_ld_to_bev_max || dis_ego_to_passed_junction <= distance_threshold) { env_status_->set_perception_map_suppression_reason( byd::msg::orin::routing_map::EnvStatus::MapSuppressionReason::EnvStatus_MapSuppressionReason_EGO_IN_JUNCTION); } else { env_status_->set_perception_map_suppression_reason(byd::msg::orin::routing_map::EnvStatus::MapSuppressionReason:: EnvStatus_MapSuppressionReason_UNABLE_TO_MATCH_PERCEPTION_WITH_HD_MAP); } toggle_to_bev_info_.emplace(MapType::HD_MAP); return MapConvertType::LD_2_LD; } case MapType::BEV_MAP: { if (bev_ld_matched_current_period && is_lane_keeping_ && (!is_drive_into_unreliable_road)) { toggle_to_bev_info_.emplace(MapType::HD_MAP); env_status_->set_perception_map_suppression_reason( byd::msg::orin::routing_map::EnvStatus::MapSuppressionReason::EnvStatus_MapSuppressionReason_EGO_IN_JUNCTION); return MapConvertType::BEV_2_LD; } if (adc_to_junction < distance_bev_to_ld_min) { toggle_to_bev_info_.emplace(MapType::UNKOWN_MAP); env_status_->set_hd_map_suppression_reason( byd::msg::orin::routing_map::EnvStatus::MapSuppressionReason::EnvStatus_MapSuppressionReason_UNKNOWN_REASON); return MapConvertType::BEV_2_UNKNOWN; } toggle_to_bev_info_.emplace(MapType::BEV_MAP); if (!is_lane_keeping_) { env_status_->set_hd_map_suppression_reason( byd::msg::orin::routing_map::EnvStatus::MapSuppressionReason::EnvStatus_MapSuppressionReason_EGO_IS_CHANGING_LANE); } else if (is_drive_into_unreliable_road) { env_status_->set_hd_map_suppression_reason( byd::msg::orin::routing_map::EnvStatus::MapSuppressionReason::EnvStatus_MapSuppressionReason_CLOSE_TO_HIGH_LEVEL_ROAD); } else { if (adc_to_junction > distance_bev_to_ld_max) { env_status_->set_hd_map_suppression_reason(byd::msg::orin::routing_map::EnvStatus::MapSuppressionReason:: EnvStatus_MapSuppressionReason_EGO_NOT_CLOSE_ENOUGH_TO_JUNCTION); } else { env_status_->set_hd_map_suppression_reason(byd::msg::orin::routing_map::EnvStatus::MapSuppressionReason:: EnvStatus_MapSuppressionReason_UNABLE_TO_MATCH_PERCEPTION_WITH_HD_MAP); } } return MapConvertType::BEV_2_BEV; } case MapType::UNKOWN_MAP: { if (bev_ld_matched_current_period && is_lane_keeping_) { toggle_to_bev_info_.emplace(MapType::HD_MAP); env_status_->set_perception_map_suppression_reason( byd::msg::orin::routing_map::EnvStatus::MapSuppressionReason::EnvStatus_MapSuppressionReason_EGO_IN_JUNCTION); return MapConvertType::UNKNOWN_2_LD; } if (adc_to_junction > distance_bev_to_ld_min * 2 && is_lane_keeping_) { toggle_to_bev_info_.emplace(MapType::BEV_MAP); env_status_->set_hd_map_suppression_reason( byd::msg::orin::routing_map::EnvStatus::MapSuppressionReason::EnvStatus_MapSuppressionReason_UNKNOWN_REASON); return MapConvertType::UNKNOWN_2_BEV; } env_status_->set_hd_map_suppression_reason( byd::msg::orin::routing_map::EnvStatus::MapSuppressionReason::EnvStatus_MapSuppressionReason_UNKNOWN_REASON); toggle_to_bev_info_.emplace(MapType::UNKOWN_MAP); return MapConvertType::UNKNOWN_2_UNKNOWN; } default: { toggle_to_bev_info_.emplace(MapType::BEV_MAP); return MapConvertType::DEFAULT_BEV; } } toggle_to_bev_info_.emplace(MapType::BEV_MAP); return MapConvertType::DEFAULT_BEV; } /**********************************发送消息的数据结构接口************************************/ std::shared_ptr<byd::msg::basic::ModuleStatus> Master::GetModuleStatusPtr() { return this->messenger_->GetDiagnoInfo(); } std::shared_ptr<byd::msg::orin::routing_map::RoutingMap> Master::GetENVRoutingMapPtr() { return this->messenger_->GetRoutingMapInfo(); } std::shared_ptr<byd::msg::orin::routing_map::TrafficLightsE2EInfo> Master::GetTrafficLightsE2EPtr() { return this->messenger_->GetTrafficLightsE2EInfo(); } /***************************接收消息callback函数 * 在此处实现************************************/ void Master::OnVehInfoCallback(const std::shared_ptr<byd::msg::drivers::VehInfo> &msg) { this->messenger_->Callback<byd::msg::drivers::VehInfo, cem::message::sensor::VehicleSignal>(msg); this->messenger_->Callback<byd::msg::drivers::VehInfo, cem::message::sensor::Bcm50msPdu02>(msg); this->messenger_->Callback<byd::msg::drivers::VehInfo, cem::message::sensor::Ibs20msPdu08>(msg); this->messenger_->Callback<byd::msg::drivers::VehInfo, cem::message::sensor::Imcu20msPdu05>(msg); this->messenger_->Callback<byd::msg::drivers::VehInfo, cem::message::sensor::Eps010msPdu00>(msg); this->messenger_->Callback<byd::msg::drivers::VehInfo, cem::message::sensor::Ibs20msPdu15>(msg); this->messenger_->Callback<byd::msg::drivers::VehInfo, cem::message::sensor::Sas10msPdu00>(msg); this->messenger_->Callback<byd::msg::drivers::VehInfo, cem::message::sensor::Mpd100msPdu04>(msg); this->messenger_->Callback<byd::msg::drivers::VehInfo, cem::message::sensor::Icm100msPdu29>(msg); this->messenger_->Callback<byd::msg::drivers::VehInfo, cem::message::sensor::AdasIpd100msPdu12>(msg); } void Master::OnEnvModelLocalMapInfoCallback(const std::shared_ptr<byd::msg::env_model::LocalMapInfo> &msg) { this->messenger_->Callback<byd::msg::env_model::LocalMapInfo, cem::message::sensor::BevMapInfo>(msg); } void Master::OnRoutingMapCallBack(const std::shared_ptr<byd::msg::orin::routing_map::RoutingMap> &msg) { this->messenger_->Callback<byd::msg::orin::routing_map::RoutingMap, cem::message::env_model::RoutingMap>(msg); } void Master::OnMsgMapEventCallback(const std::shared_ptr<byd::msg::orin::routing_map::MapEvent> &msg) { this->messenger_->Callback<byd::msg::orin::routing_map::MapEvent, cem::message::env_model::MapEvent>(msg); } /* OnMsgMapEventCallback */ void Master::OnPercepTrfInfoCallback(const std::shared_ptr<byd::msg::perception::PerceptionTrafficInfo> &msg) { this->messenger_->Callback<byd::msg::perception::PerceptionTrafficInfo, cem::message::sensor::PercepTrfInfo>(msg); } void Master::OnPerceptionObstaclesInfoCallback(const std::shared_ptr<byd::msg::perception::PerceptionObstacles> &msg) { this->messenger_->Callback<byd::msg::perception::PerceptionObstacles, cem::message::sensor::FusObjInfo>(msg); } void Master::OnMsgDriverInsCallback(const std::shared_ptr<byd::msg::drivers::Ins> &msg) { this->messenger_->Callback<byd::msg::drivers::Ins, cem::message::sensor::LocalizationData>(msg); } void Master::OnMsgLocationDrCallback(const std::shared_ptr<byd::msg::localization::LocalizationEstimate> &msg) { this->messenger_->Callback<byd::msg::localization::LocalizationEstimate, cem::message::sensor::LocalizationData>(msg); } // void Master::OncanoutCallback( // const std::shared_ptr<byd::msg::orin::sm_msgs::MsgSM_BYD_CAN_Output> &msg) // { // this->messenger_->Callback<byd::msg::orin::sm_msgs::MsgSM_BYD_CAN_Output, // cem::message::sensor::CAN1>(msg); // } void Master::OnEnvModelLidaRoadedgeCallback(const std::shared_ptr<byd::msg::env_model::LocalMapInfo> &msg) { this->messenger_->Callback<byd::msg::env_model::LocalMapInfo, cem::message::sensor::LidarRoadEdgeInfo>(msg); } void Master::OnPlanResultCallback(const std::shared_ptr<byd::msg::planning::PLanningResultProto> &msg) { this->messenger_->Callback<byd::msg::planning::PLanningResultProto, cem::message::env_model::PLanningResultData>(msg); } void Master::OnPlanFuncStateCallback(const std::shared_ptr<byd::msg::pnc::PlanFuncState> &msg) { this->messenger_->Callback<byd::msg::pnc::PlanFuncState, cem::message::env_model::PLanFuncState>(msg); } void Master::OncanoutCallback(const std::shared_ptr<byd::msg::orin::sm_msgs::MsgSM_BYD_CAN_Output> &msg) { this->messenger_->Callback<byd::msg::orin::sm_msgs::MsgSM_BYD_CAN_Output, cem::message::env_model::CAN1>(msg); } void Master::OnOccCallback(const std::shared_ptr<byd::msg::perception::OCCInfo>& msg){ this->messenger_->Callback<byd::msg::perception::OCCInfo,cem::env_model::occ::OCCInfo>(msg); return; } /***************************************************************************************************/ } // namespace fusion } // namespace cem 解读下代码
07-19
syntax = "proto2"; import "modules/msg/basic_msgs/header.proto"; import "modules/msg/basic_msgs/geometry.proto"; package byd.msg.orin.routing_map; message EnvStatus { enum MapSuppressionReason { NOT_SUPPRESSION = 0; CLOSE_TO_HIGH_LEVEL_ROAD = 1; NO_NAVIGATION_START_SECTION = 2; NO_HD_MAP_FRAME = 3; EGO_IS_CHANGING_LANE = 11; EGO_PASSED_JUNCTION = 12; EGO_IN_JUNCTION = 13; EGO_NOT_CLOSE_ENOUGH_TO_JUNCTION = 14; EGO_OUTSIDE_MAP = 15; EGO_NOT_IN_THE_RAMP = 16; EGO_IN_THE_RAMP = 17; UNABLE_TO_MATCH_PERCEPTION_WITH_HD_MAP = 31; UNKNOWN_REASON = 101; } enum EnvSource { UNDEFINED = 0; PERCEPTION_MAP = 1; HD_MAP = 2; BYD_CROWD_SOURCED_MAP = 3; } message LineMatchInfo { optional double average_offset = 1; optional double max_offset = 2; } optional bool is_on_freeway = 1; optional EnvSource map_source = 2; optional MapSuppressionReason hd_map_suppression_reason = 3; optional MapSuppressionReason perception_map_suppression_reason = 4; optional double distance_to_next_junction = 5; optional double distance_to_passed_junction = 6; optional LineMatchInfo left_laneline_match_info = 7; optional LineMatchInfo right_laneline_match_info = 8; } message MapInfo { enum CoordSys { WGS84 = 0; GCJ02 = 1; RFU = 2; FLU = 3; } optional CoordSys coord_sys = 1; optional string map_version = 2; optional string engine_version = 3; optional string sdmap_version = 4; optional EnvStatus env_status = 5; } enum LightStatus { NONE_LIGHT = 0; //无信号灯 GREEN_LIGHT = 1; YELLOW_LIGHT = 2; RED_LIGHT = 3; UNKNOWN_LIGHT = 4; //有信号灯状态未知 YELLOW_BLINKING = 5; FAIL_DETECTION = 6; BLOCK_FAIL = 7; GREEN_BLINKING = 8; BLURRING_MODE = 9; } enum NoneOddType { NODD_NONE = 0; NORMAL_NOT_ODD = 1; NODD_LOW_PRECISION = 22; NODD_LANE_BOUNDARY_CHANGE = 100; NODD_LANE_BOUNDARY_LOSS_WIDTH_ABNORMAL = 101; NODD_LANE_NUM_INCREASE = 102; NODD_LANE_NUM_DECREASE = 103; NODD_LANE_TYPE_CHANGE = 104; NODD_CONSTRUCTION_OPPOSITE_DIR_BORROW_WAY_NOT_DEGRADATION = 105; NODD_CONSTRUCTION_OPPOSITE_DIR_BORROW_WAY_DEGRADATION = 106; NODD_CONSTRUCTION_SAME_DIR_CHANGE_WAY_NOT_DEGRADATION = 107; NODD_CONSTRUCTION_SAME_DIR_CHANGE_WAY_DEGRADATION = 108; NODD_CONSTRUCTION_CLOSE_WAY = 109; NODD_CONSTRUCTION_CLOSE_WAY_TO_NOT_HIGHWAY_DEGRADATION = 110; NODD_RAMP_INCREASE = 111; NODD_TRAFFIC_CONE = 112; NODD_WATER_SAFETY_BARRIER = 113; NODD_UNKNOWN = 255; } enum PointSource { PS_UNKNOWN = 0; PS_BEV = 1; // 感知形点 TOPO_INSETRT = 2; // 拓扑插值点 SECTION_EXTENTED_FROM_LANEMARKER = 3; // lane使用lanemarker补齐 SECTION_EXTENTED_FROM_FIT = 4; // lane lanemarker使用自身点拟合重采样补齐 SECTION_EXTENTED_FROM_LANE = 5; // lanemarker使用lane点补齐 PS_HDMAP = 6; // 地图形点 PS_INVISIBLE = 7; // 感知不可见点 } message Point { optional double x = 1; optional double y = 2; optional double z = 3; optional double curvature = 4; optional PointSource point_source = 5; optional double mse = 6; // set value when BEV Map used } message Trajectory{ optional uint64 id = 1; optional uint64 lane_id = 2; optional uint64 start_lane_id = 3; optional uint64 end_lane_id = 4; repeated uint64 relative_lane_id = 5; repeated Point points = 6; } message LaneInfo { enum LaneType { LANE_UNKNOWN = 0; LANE_NORMAL = 1; LANE_ACC = 2; LANE_DEC = 3; LANE_RAMP = 4; LANE_EMERGENCY = 5; LANE_ACC_DCC = 6; LANE_BUS_NORMAL = 7; // 公交停靠站 LANE_HOV_NORMAL = 8; LANE_NON_MOTOR = 9; LANE_LEFT_WAIT = 10; LANE_VIRTUAL_COMMON = 11; LANE_VIRTUAL_JUNCTION = 12; LANE_ROUND_ABOUT = 13; LANE_REVERSIBLE = 16; LANE_VARIABLE_TURN = 17; LANE_HARBOR_STOP = 18; // 港湾停靠站 LANE_ENTRY = 19; // 入口 LANE_EXIT = 20; // 出口 LANE_DIVERSION = 21; // 导流区车道 LANE_U_TURN_LANE = 22; // 掉头车道 LANE_RIGHT_TURN_LANE = 23; // 右转专用车道 LANE_RIGHT_TURN_AREA = 24; // 右转等待车道 LANE_U_TURN_AREA = 25; // 掉头等待车道 LANE_NO_TURN_AREA = 26; // 直行等待车道 LANE_VIRTUAL_CONNECTED_LANE = 27; // 虚拟连接车道 LANE_PARKING = 28; // 停车车道 LANE_TOLLBOOTH = 29; // 收费站车道 LANE_OBSTACLE = 30; // 障碍物 LANE_MIXED_TOLL = 31; // 混合收费车道 LANE_REVERSIBLE_CONNECTION_LANE = 32; //潮汐连接路 LANE_ENTRANCE_OR_EXIT_LANE = 33; //主辅路出入口 LANE_LEFT_TURN_LANE = 34; //左转专用道 LANE_CHECKPOINT_LANE = 35; //检查站车道 LANE_USE_THE_LEFT_TURN_LANE = 36; //借道左转车道 LANE_BRT = 37; //公交专用道 } enum TurnType { NO_TURN = 0; LEFT_TURN = 1; RIGHT_TURN = 2; U_TURN = 3; STRAIGHT_AND_LEFT_TURN = 4; STRAIGHT_AND_RIGHT_TURN = 5; STRAIGHT_AND_U_TURN = 6; LEFT_TURN_AND_U_TURN = 7; RIGHT_TURN_AND_U_TURN = 8; STRAIGHT_AND_LEFT_TURN_AND_RIGHT_TURN = 9; LEFT_TURN_AND_RIGHT_TURN = 10; STRAIGHT_AND_LEFT_TURN_AND_U_TURN = 11; STRAIGHT_AND_RIGHT_TURN_AND_U_TURN = 12; LEFT_TURN_AND_RIGHT_TURN_AND_U_TURN = 13; STRAIGHT_AND_LEFT_AND_RIGHT_AND_U_TURN = 14; OTHER_UNKNOWN = 9999; } enum SplitTopology { TOPOLOGY_SPLIT_NONE = 0; TOPOLOGY_SPLIT_LEFT = 1; // split to left TOPOLOGY_SPLIT_RIGHT = 2; // split to right TOPOLOGY_SPLIT_UNKNOWN = 3; } enum MergeTopology { TOPOLOGY_MERGE_NONE = 0; TOPOLOGY_MERGE_LEFT = 1; // merge to left, ego is on right of target lane TOPOLOGY_MERGE_RIGHT = 2; // merge to right, ego is on left of target lane TOPOLOGY_TO_BE_MERGED = 3; TOPOLOGY_MERGE_UNKNOWN = 4; } enum MergeSource { MERGE_UNKNOWN = 0; MERGE_BEV = 1; MERGE_LD = 2; MERGE_SD = 3; } enum TrafficSetReason{ UNKNOWN_STATE = 0; STAY_PREV = 1; SET_DEFAULT_OBJ = 2; NEW_ARROW_LIGHT = 3; NEW_CIRCLE_LIGHT = 4; NEW_UNKNOWN_GREEN = 5; NEW_UNKNOWN_OTHER = 6; NEW_BLURRING_COLOR = 7; NEW_BLURRING_SHAPE = 8; } message MergeInfo { optional bool merge_valid = 1; optional MergeSource merge_source = 2; optional double dis_to_merge = 3; }; optional uint64 id = 1; optional uint64 section_id = 2; optional uint64 junction_id = 3; optional uint64 left_lane_id = 4; optional uint64 right_lane_id = 5; repeated uint64 next_lane_ids = 6; repeated uint64 left_lane_boundary_ids = 7; repeated uint64 right_lane_boundary_ids = 8; repeated uint64 left_road_boundary_ids = 9; repeated uint64 right_road_boundary_ids = 10; optional LaneType type = 11; optional NoneOddType none_odd_type = 12; optional TurnType turn_type = 13; // vaild in city region optional LightStatus light_status = 14; optional SplitTopology split_topology = 15; optional MergeTopology merge_topology = 16; repeated Point points = 17; // hasn't supported lane level curvature yet optional double length = 18; optional double speed_limit = 19; // uint: m/s optional bool is_virtual = 20; repeated uint64 cross_walks = 21; repeated uint64 traffic_stop_lines = 22; optional uint32 light_countdown = 23; repeated uint64 previous_lane_ids = 24; optional MergeInfo merge_info = 25; optional uint32 connect_score = 26; // score of classification as normal and split, ranging from 0 to 100 optional TurnType plan_turn_type = 27; optional bool is_blocked = 28; optional uint32 traffic_light_obj_id = 29; optional uint32 traffic_light_seq_num = 30; optional TrafficSetReason traffic_set_reason = 31; optional uint32 stay_prev_counter = 32; repeated uint64 exp_trajectory_ids = 33; optional bool cnoa_is_virtual = 34; // same as cnoa map is_virtual value, add to solve problem form SR optional uint32 lane_seq = 35; //车道序号,从左到右从1开始递增 optional uint32 stopline_angle_flag = 36; } message LaneBoundaryInfo { enum LineType { UNKNOWN = 0; SOLID = 1; DASHED = 2; SOLID_SOLID = 3; DASHED_DASHED = 4; SOLID_DASHED = 5; DASHED_SOLID = 6; VIRTUAL_LANE = 7; OTHERS = 9999; } enum LaneMarkerColor { LM_COLOR_UNKNOWN = 0; LM_COLOR_WHITE = 1; LM_COLOR_YELLOW = 2; LM_COLOR_BLUE = 3; LM_COLOR_GREEN = 4; LM_COLOR_RED = 5; } message ColorSegment { optional LaneMarkerColor color = 1; optional uint32 start_index = 2; optional uint32 end_index = 3; }; message TypeSegment { optional LineType type = 1; optional uint32 start_index = 2; optional uint32 end_index = 3; }; optional uint64 id = 1; repeated byd.msg.basic.Point2D points = 2; optional LineType line_type = 3; repeated ColorSegment color_seg = 4; repeated TypeSegment type_seg = 5; repeated Point line_points = 6; } message RoadBoundaryInfo { enum BoundaryType { UNKNOWN_BOUNDARY = 0; FLAT_BOUNDARY = 1; LOW_BOUNDARY = 2; HIGH_BOUNDARY = 3; FENCE_BOUNDARY = 4; VIRTUAL = 12; } optional uint64 id = 1; repeated byd.msg.basic.Point2D points = 2; optional BoundaryType boundary_type = 3; repeated Point line_points = 4; } message JunctionInfo { optional uint64 id = 1; repeated byd.msg.basic.Point2D points = 2; } message CrossWalkInfo { optional uint64 id = 1; repeated byd.msg.basic.Point2D points = 2; } message StopLineInfo { optional uint64 id = 1; repeated byd.msg.basic.Point2D points = 2; optional uint32 type = 3; //type: 0 - real stopline, 1 - virtual stopline } message TrafficLightInfo { optional uint64 id = 1; optional byd.msg.basic.Point3D center_position = 2; repeated byd.msg.basic.Point3D bounding_box_geometry = 3; repeated uint64 laneids = 4; optional uint32 light_countdown = 5; optional uint32 shape = 6; optional LightStatus light_status = 7; } message NaviPosition { optional uint64 section_id = 1; optional double s_offset = 2; //uint: m } message SectionInfo { enum LDLinkTypeMask { LT_NORMAL = 0; // 0X00000000, // 普通 LT_TUNNEL = 1; // 0X00000001, // 隧道 LT_BRIDGE = 2; // 0X00000002, // 桥 LT_TOLLBOOTH = 4; // 0X00000004, // 收费站道路 LT_DEAD_END = 8; // 0X00000008, // 断头路 LT_IC = 16; // 0X00000010, // IC(高速连接普通路的道路) LT_JCT = 32; // 0X00000020, // JCT(高速连接高速的道路) LT_SAPA = 64; // 0X00000040, // SAPA(服务器、停车区道路) LT_WITHIN_INTERSECTION = 128; // 0X00000080, // 路口内道路 LT_AUTHORIZED = 256; // 0X00000100, // 授权道路 LT_TOLLGATE = 512; // 0X00000200, // 收费岛道路 LT_ABANDONED_TOLLGATE = 1024;// 0X00000400, // 废弃收费岛道路 LT_CHECKPOINT = 2048;// 0X00000800, // 检查站道路 LT_ROUNDABOUT = 4096;// 0X00001000, // 环岛内道路 LT_SERRATED = 8192;// 0X00002000, // 锯齿道路 LT_MAIN_ROAD = 16384;// 0X00004000, // 主路(main road) LT_SIDE_ROAD = 32768; // 0X00008000, // 辅路(side road) LT_MAINROAD_CONNECTION = 65536;// 0X00010000, // 主辅路连接路(mainside connection) LT_NO_S_INTERSECTION = 131072;// 0X00020000, // 无小路口 LT_S_INTERSECTION_LEFT = 262144;// 0X00040000, // 小路口左侧道路 LT_S_INTERSECTION_RIGHT= 524288;//0X00080000, // 小路口右侧道路 LT_S_INTERSECTION_BOTH = 1048576; //0X00100000, // 小路口两侧道路 LT_INJUNCTION = 2097152; //0X00200000, // 路口内道路(编译计算) LT_BOOTH_EXIT = 4194304;//0X00400000, // 出口收费站 LT_BOOTH_ENTRANCE = 8388608;//0X00800000, // 入口收费站 LT_BOOTH_EXIT_ENTRANCE = 16777216;//0X01000000 // 出入口收费站 } optional uint64 id = 1; optional double length = 2; //uint: m repeated uint64 lane_ids = 3; repeated Point points = 4; optional RoadClass road_class = 5; repeated uint64 predecessor_section_id_list = 6; repeated uint64 successor_section_id_list = 7; optional uint32 link_type = 8; //复合类型,与LdLinkTypeMask“按位与”操作判断。 } message ArrowInfo { enum ArrowType { RM_TYPE_STRAIGHT = 1; RM_TYPE_LEFT = 2; RM_TYPE_RIGHT = 3; RM_TYPE_TURNING = 4; RM_TYPE_STRAIGHT_LEFT = 5; RM_TYPE_STRAIGHT_RIGHT = 6; RM_TYPE_STRAIGHT_LEFT_RIGHT = 7; RM_TYPE_LEFT_RIGHT = 8; RM_TYPE_STRAIGHT_TURNING = 9; RM_TYPE_LEFT_TURNING = 10; } optional uint64 id = 1; optional ArrowType type = 2; optional byd.msg.basic.Point3D center_position = 3; repeated byd.msg.basic.Point3D bounding_box_geometry = 4; repeated uint64 lane_id = 5; } message SubPath { optional uint64 enter_section_id = 1; repeated SectionInfo sections = 2; } message RouteInfo { optional uint64 id = 1; optional NaviPosition navi_start = 2; //from currrent section repeated SectionInfo sections = 3; repeated SubPath subpaths = 4; optional string route_id = 5; //ld导航路径的md5值 } enum RoadClass { UNKNOWN = 0; EXPRESSWAY = 1; URBAN_EXPRESSWAY = 2; NATION_ROAD = 3; PROVINCE_ROAD = 4; COUNTRY_ROAD = 6; TOWN_ROAD = 7; SPECIAL_ROAD = 8; // 特服道路 WALK_ROAD = 9; PEOPLE_FERRY = 10; // 人渡 FERRY = 11; // 轮渡 OTHERS = 99; } enum V2RoadClassType { UNKNOWN_ROAD = 0; HIGH_WAY_ROAD = 1; EXPRESS_WAY_ROAD = 2; NATIOANL_ROAD = 3; PROVINCIAL_ROAD = 4; MAIN_ROAD = 5; SUB_ROAD = 6; } enum SDRoadClass { SD_HIGHWAY = 0; SD_CITY_FAST_WAY = 1; SD_NATIONAL_ROAD = 2; SD_PROVINCIAL_ROAD = 3; SD_COUNTY_ROAD = 4; SD_TOWNSHIP_ROAD = 5; SD_OTHER_ROAD = 6; SD_LEVEL_9_ROAD = 7; SD_FERRY = 8; SD_WALY_WAY = 9; SD_INVALID = 127; } message V2RoadClass { optional double start = 1; optional double end = 2; optional V2RoadClassType road_class = 3; } message V2RoadInfo { optional V2RoadClassType road_class = 1; optional int32 lane_num = 2; } message V2TurnInfo { optional uint64 id = 1; optional bool is_valid = 2; enum V2TurnType { UNKNOWN = 0; LEFT = 1; RIGHT = 2; STRAIGHT = 3; U_TURN_LEFT = 4; U_TURN_RIGHT = 5; MERGE_LEFT = 6; MERGE_RIGHT = 7; RAMP_LEFT = 11; RAMP_RIGHT = 12; RAMP_STRAIGHT = 13; RAMP_U_TURN_LEFT = 14; RAMP_U_TURN_RIGHT = 15; } optional V2TurnType turn_type = 3; enum V2DetailTurnType { NONE = 0; TURN_LEFT = 2; // 左转图标 TURN_RIGHT = 3; // 右转图标 SLIGHT_LEFT = 4; // 左前方图标 SLIGHT_RIGHT = 5; // 右前方图标 TURN_HARD_LEFT = 6; // 左后方图标 TURN_HARD_RIGHT = 7; // 右后方图标 UTURN = 8; // 左转掉头图标 (无在线图标) CONTINUE = 9; // 直行图标 TURN_RIGHT_ONLY = 10; // 右转专用道 UTURN_RIGHT = 19; // 右转掉头图标,左侧通行地区的掉头 LEFT_MERGE = 65; // 靠左图标 RIGHT_MERGE = 66; // 靠右图标 } optional V2DetailTurnType detail_turn_type = 4; optional double dist = 5; optional V2RoadInfo before_turn = 6; optional V2RoadInfo after_turn = 7; optional double v2_dist = 8; // V2提供的距离,新增加 } message NonODDInfo { optional string id = 1; optional uint64 reason = 2; optional double dist = 3; } message V2Curvature { optional double curvature = 1; // 曲率半径 optional double distance = 2; // 距离 } message V2TrafficFlow { optional double start_s = 1; optional double end_s = 2; enum V2TrafficFlowType { UNKNOWN_FLOW = 0; SMOOTH_FLOW = 1; SLOW_FLOW = 2; JAMMED_FLOW = 3; SEVERE_JAMMED_FLOW = 4; NO_FLOW = 5; } optional V2TrafficFlowType type = 3; } message EnvInfo { optional bool v2_valid = 1; optional bool v2_has_navigation = 2; optional double v2_dist_to_ramp = 3; optional double v2_dist_to_toll = 4; optional double v2_dist_to_tunnel = 5; repeated V2RoadClass v2_road_classes = 6; repeated V2TurnInfo v2_turn_info = 7; optional double dist_to_subpath = 8; optional double dist_to_split_routelanenum_dec = 9; repeated V2TrafficFlow traffic_flows = 10; repeated V2Curvature v2_curvatures = 11; repeated NonODDInfo v2_non_odd_info = 12; } message SDSectionInfo { enum SDLinkTypeMask { SDLT_INVALID = 0; SDLT_RING = 1; //环岛 0X00000001 SDLT_NOATTR = 2; //无属性 0X00000002 SDLT_MAINSEPARATE = 4; //上下行分离 0X00000004 SDLT_JCT = 8; //JCT 0X00000008 SDLT_CROSSLINK = 16; //交叉点内LINK 0X00000010 SDLT_IC = 32; //IC 0X00000020 SDLT_PARK = 64; //停车区 0X00000040 SDLT_SERVICE = 128; //服务区 0X00000080 SDLT_BRIDGE = 256; //桥 0X00000100 SDLT_WALKSTREET = 512; //步行街 0X00000200 SDLT_SIDEROAD = 1024; //辅路 0X00000400 SDLT_RAMP = 2048; //匝道 0X00000800 SDLT_CLOSEDROAD = 4096; //全封闭道路 0X00001000 SDLT_UNDEFINEDTRAFFICAREA = 8192; //未定义交通区域 0X00002000 SDLT_POICONNECTION = 16384; //连接路 0X00004000 SDLT_TUNNEL = 32768; //隧道 0X00008000 SDLT_RA_FOOTWAY = 65536; //步行道 0X00010000 SDLT_BUS = 131072; //公交专用道 0X00020000 SDLT_RIGHTTURN = 262144; //提前右转 0X00040000 SDLT_SCENICROAD = 524288; //风景线路 0X00080000 SDLT_INAREAROAD = 1048576; //区域内道路 0X00100000 SDLT_LEFTTURN = 2097152; //提前左转 0X00200000 SDLT_UTURN = 4194304; //掉头口 0X00400000 SDLT_MAINSIDECONNECT = 8388608; //主辅路出入口 0X00800000 SDLT_DUMMYLINK = 16777216; //虚拟链接路 0X01000000 SDLT_PARKLINK = 33554432; //停车位引导路 0X02000000 } enum SDDirectionType { UNKNOWN = 0; //未知 BIDIRECTIONAL_PASSABLE = 1; //双向可通行 FORWARD_ONLY = 2; //仅正向通行 REVERSE_ONLY = 3; //仅反向通行 INVALID = 4; //无效 } enum SDLinkTypeExtendMask { SDLTE_INVALID = 0; // = 0X00000000 /**< 0X00,无效值 */ SDLTE_PARKING_ENUUTRANCE = 1; // = 0X00000001, /*停车场出入口连接路 */ SDLTE_GAS_STATION_ENUUTRANCE = 2; // = 0X00000002, /*通往加油站的连接路 */ SDLTE_ESCAPE_LANE = 4; // = 0X00000004, /*避险车道 */ SDLTE_TRUCK_LANE = 8; // = 0X00000008, /*货车专用*/ SDLTE_NOTROUNDABOUT = 16; // = 0X00000010, /*非标环岛 */ SDLTE_FRONT_ROAD = 32; // = 0X00000020, /*门前路段*/ SDLTE_FOOTBRIDGE = 64; // = 0X00000040, /*跨线天桥*/ SDLTE_TUNNEL = 128; // = 0X00000080, /*跨线地道 */ SDLTE_FLYOVER = 256; // = 0X00000100, /*立交桥*/ SDLTE_TAXILANE = 512; // = 0X00000200, /*出租车专用道*/ SDLTE_PASSENGERCARLANE = 1024; // = 0X00000400, /*客运车专用道*/ SDLTE_PANSHANROAD = 2048; // = 0X00000800, /*盘山路*/ } optional uint64 id = 1; optional double length = 2; //uint: m optional uint64 lane_num = 3; repeated Point points = 4; optional SDRoadClass road_class = 5; repeated uint64 predecessor_section_id_list = 6; repeated uint64 successor_section_id_list = 7; optional uint32 link_type = 8; //与SDLinkTypeMask按位与判断 optional double speed_limit = 9; // uint: m/s optional bool has_toll_station = 10; optional SDDirectionType direction = 11; optional uint32 reverse_lane_count = 12; optional double exp_speed = 13; repeated SDLaneGroupIndex lane_group_idx = 14; optional bool has_junction = 15; optional uint32 link_type_extend = 16; //link的扩展类型,与SDLinkTypeExtendMask按位与判断 } message SDSubPath{ enum PathType { NONE = 0; SPLIT = 2; MERGE = 3; } optional uint64 enter_section_id = 1; // 汇入时为汇入主路的link, 汇出时为汇出主路的link repeated SDSectionInfo sections = 2; optional PathType path_type = 3; } message SDLaneGroupIndex { optional uint64 id = 1; optional double start_range_offset = 2; //uint: m optional double end_range_offset = 3; } message SDRecommendLaneGroup { optional uint64 lane_group_id = 1; repeated SDRecommendLGSegment recommend_lane = 2; //推荐区域车道 repeated SDRecommendLGSegment available_lane= 3; //可通行区域 } message SDRouteInfo { optional string id = 1; optional NaviPosition navi_start = 2; //from currrent section repeated SDSectionInfo mpp_sections = 3; repeated SDSubPath subpaths = 4; repeated SDRecommendLaneGroup recommend_lane_list = 5; //导航推荐车道 repeated uint64 mpp_lanegroup_id_list = 6; //lane_group级别的mpp id列表 } message SDRecommendLGSegment{ optional uint32 start_offset = 1; //车道组开始的位置(相对于langroup起点的距离,单位:m) optional uint32 end_offset = 2; //车道组结束的位置(相对于langroup起点的距离,单位:m) repeated uint32 lane_seqs = 3; //车道序号 optional uint32 lane_num = 4; //车道数 } message SDLaneGroupInfo { optional uint64 id = 1; optional double length = 2; //uint: m repeated uint64 successor_lane_group_ids = 3; repeated uint64 predecessor_lane_group_ids = 4; optional uint32 lane_num = 5; repeated LaneInfo lane_info = 6; repeated SDRecommendLGSegment recommend_lane = 7; //推荐区域车道 repeated SDRecommendLGSegment available_lane= 8; //可通行区域 } enum SpeedLimitMode{ passive_mode = 0x0; fusion_mode = 0x1; map_mode = 0x2; vision_mode = 0x3; } enum NormalSpeedStatus{ NORMAL = 0x0; UNKNOWN_LIMIT_SPEED = 0x1; UNLIMITED = 0x2; SPL_CANCELLED = 0x3; NO_DISPLAY = 0x4; } enum UnknownLimitStatus{ INVALID = 0x0; VALID = 0x1; UNCLEAR = 0x2; PRESERVE = 0x3; } enum ConditionType{ UNSPECIFIED = 0; TIME_CONDITION = 1; RAIN_CONDITION = 2; SNOW_CONDITION = 3; } message ConditionLimit{ optional float condition_limit_speed_value = 1; optional uint32 condition_type = 2; } message FusionSpeedInfo{ optional basic.Header header = 1; optional float speed_value = 2; optional uint32 normal_speed_status = 3; optional uint32 unknown_limit_status = 4; optional uint32 speed_limit_mode = 5; optional bool time_condition = 6; optional bool snow_condition = 7; optional bool rain_condition = 8; optional bool distance_condition = 9; repeated ConditionLimit condition_limit = 10; } message SensorStatusInfo{ optional uint32 sensor_status = 1; optional uint64 special_type = 2; } message RoutingMap { enum MapType { UNKOWN_MAP = 0; PERCEPTION_MAP = 1; HD_MAP = 2; BEV_MAP = 3; } optional basic.Header header = 1; optional MapInfo map_info = 2; optional MapType map_type = 3; repeated LaneInfo lanes = 4; repeated LaneBoundaryInfo lane_boundaries = 5; repeated RoadBoundaryInfo road_boundaries = 6; repeated StopLineInfo stop_lines = 7; repeated JunctionInfo junctions = 8; repeated CrossWalkInfo cross_walks = 9; optional RouteInfo route = 10; optional RoadClass cur_road_class = 11; repeated TrafficLightInfo traffic_lights = 12; repeated ArrowInfo arrows = 13; optional bool is_on_highway = 14; repeated byd.msg.basic.Point2D nodes = 15; optional EnvInfo env_info = 16; optional SDRouteInfo sd_route = 17; repeated SDLaneGroupInfo sd_lane_groups = 18; optional FusionSpeedInfo fusionSpeedInfo = 19; optional string debug_info = 20; repeated Trajectory exp_trajectories = 21; optional SensorStatusInfo sensor_status_info = 22; optional TrafficLightStatus traffic_light_uturn = 23; // for env auto_test optional TrafficLightStatus traffic_light_left = 24; // for env auto_test optional TrafficLightStatus traffic_light_straight = 25; // for env auto_test optional TrafficLightStatus traffic_light_right = 26; // for env auto_test } message TrafficLightStatus { optional LightStatus light_status = 1; // 红绿灯颜色 optional LaneInfo.TurnType turn_type = 2; // 红绿灯的转向类型 repeated byd.msg.basic.Point2D stop_line_pts = 3; // 应该在红绿灯前停车的线的位置 optional uint32 traffic_light_num = 4; // 红绿灯倒计时 repeated uint32 lane_ids = 5; // 红绿灯状态对应的lane id optional bool is_navi_light = 6; optional uint64 traffic_obj_id = 7; optional uint64 perception_sequence = 8; optional uint64 stay_prev_counter = 9; optional uint64 invalid_counter = 10; optional LaneInfo.TrafficSetReason traffic_reason = 11; repeated byd.msg.basic.Point2D stop_line_pts_wait = 12; // 应该在红绿灯前停车的线的位置 optional bool stopline_is_virtual = 13; optional double distance_to_stopline = 14; optional bool traffic_match_cloud_file = 15; }; message TrafficLightsE2EInfo { optional basic.Header header = 1; // 里面有seq信息,lane_ids是对应seq地图里面的 repeated TrafficLightStatus traffic_status = 2; // 所有红绿灯状态 optional byd.msg.basic.Point3D pose = 3; // 红绿灯位置 optional TrafficLightStatus traffic_light_uturn = 4; // for env auto_test optional TrafficLightStatus traffic_light_left = 5; // for env auto_test optional TrafficLightStatus traffic_light_straight = 6; // for env auto_test optional TrafficLightStatus traffic_light_right = 7; // for env auto_test repeated TrafficLightInfo traffic_lights = 8; }; 详细解释下接口proto
最新发布
09-04
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值