42 if (obstacles_container ==
nullptr) {
43 AERROR <<
"Null obstacles container found";
50 if (adc_trajectory_container ==
nullptr) {
51 AERROR <<
"adc_trajectory_container is nullptr";
54 const std::vector<std::string>& lane_ids =
56 if (lane_ids.empty()) {
62 if (pose_container ==
nullptr) {
63 AERROR <<
"Pose container pointer is a null pointer.";
67 pose_container->ToPerceptionObstacle();
68 if (pose_obstacle_ptr ==
nullptr) {
69 AERROR <<
"Pose obstacle pointer is a null pointer.";
72 double pose_x = pose_obstacle_ptr->
position().
x();
73 double pose_y = pose_obstacle_ptr->
position().
y();
74 double ego_vehicle_s = std::numeric_limits<double>::max();
75 double ego_vehicle_l = std::numeric_limits<double>::max();
76 double accumulated_s = 0.0;
77 std::string ego_lane_id =
"";
79 for (
const std::string& lane_id : lane_ids) {
80 std::shared_ptr<const LaneInfo> lane_info_ptr =
82 if (lane_info_ptr ==
nullptr) {
83 AERROR <<
"Null lane info pointer found.";
89 if (std::fabs(l) < std::fabs(ego_vehicle_l)) {
90 ego_vehicle_s = accumulated_s + s;
92 ego_lane_id = lane_id;
95 accumulated_s += lane_info_ptr->total_length();
100 std::unordered_set<std::string> ego_back_lane_id_set_;
101 std::unordered_set<std::string> ego_front_lane_id_set_;
102 for (
const std::string& lane_id : lane_ids) {
103 std::shared_ptr<const LaneInfo> lane_info_ptr =
105 if (lane_info_ptr ==
nullptr) {
106 AERROR <<
"Null lane info pointer found.";
109 accumulated_s += lane_info_ptr->total_length();
110 if (accumulated_s < ego_vehicle_s) {
111 ego_back_lane_id_set_.insert(lane_id);
112 }
else if (accumulated_s > ego_vehicle_s) {
113 ego_front_lane_id_set_.insert(lane_id);
121 if (obstacle_ptr ==
nullptr) {
128 ADEBUG <<
"RightOfWay for obstacle [" << latest_feature_ptr->
id() <<
"], "
129 <<
"with lane_sequence_size: "
130 << latest_feature_ptr->
lane().lane_graph().lane_sequence_size();
131 for (
auto& lane_sequence : *latest_feature_ptr->mutable_lane()
132 ->mutable_lane_graph()
133 ->mutable_lane_sequence()) {
135 for (
auto lane_segment : lane_sequence.lane_segment()) {
136 accumulated_s += lane_segment.end_s() - lane_segment.start_s();
138 if (lane_segment.lane_turn_type() == 2) {
139 lane_sequence.set_right_of_way(-20);
140 }
else if (lane_segment.lane_turn_type() == 3) {
141 lane_sequence.set_right_of_way(-10);
143 if (accumulated_s > 50.0) {
static bool GetProjection(const Eigen::Vector2d &position, const std::shared_ptr< const hdmap::LaneInfo > lane_info, double *s, double *l)
Get the frenet coordinates (s, l) on a lane by a position.