提交 0f7fee6e 编写于 作者: C Calvin Miao 提交者: Liangliang Zhang

Prediction: Added function to obtain ADC reference line lane ids

上级 f0ba88e8
...@@ -35,6 +35,7 @@ using apollo::planning::ADCTrajectory; ...@@ -35,6 +35,7 @@ using apollo::planning::ADCTrajectory;
void ADCTrajectoryContainer::Insert( void ADCTrajectoryContainer::Insert(
const ::google::protobuf::Message& message) { const ::google::protobuf::Message& message) {
reference_line_lane_ids_.clear();
adc_trajectory_.CopyFrom(dynamic_cast<const ADCTrajectory&>(message)); adc_trajectory_.CopyFrom(dynamic_cast<const ADCTrajectory&>(message));
if (!IsProtected()) { if (!IsProtected()) {
junction_polygon_ = Polygon2d{}; junction_polygon_ = Polygon2d{};
...@@ -55,8 +56,8 @@ bool ADCTrajectoryContainer::IsPointInJunction(const PathPoint& point) const { ...@@ -55,8 +56,8 @@ bool ADCTrajectoryContainer::IsPointInJunction(const PathPoint& point) const {
on_virtual_lane = map->IsVirtualLane(point.lane_id()); on_virtual_lane = map->IsVirtualLane(point.lane_id());
} }
if (!on_virtual_lane) { if (!on_virtual_lane) {
on_virtual_lane = map->OnVirtualLane({point.x(), point.y()}, on_virtual_lane =
FLAGS_virtual_lane_radius); map->OnVirtualLane({point.x(), point.y()}, FLAGS_virtual_lane_radius);
} }
return in_polygon && on_virtual_lane; return in_polygon && on_virtual_lane;
} }
...@@ -67,44 +68,46 @@ bool ADCTrajectoryContainer::IsProtected() const { ...@@ -67,44 +68,46 @@ bool ADCTrajectoryContainer::IsProtected() const {
} }
Polygon2d ADCTrajectoryContainer::GetJunctionPolygon() { Polygon2d ADCTrajectoryContainer::GetJunctionPolygon() {
int num_point = adc_trajectory_.trajectory_point_size();
if (num_point == 0) {
return Polygon2d{};
}
std::shared_ptr<const JunctionInfo> junction_info(nullptr); std::shared_ptr<const JunctionInfo> junction_info(nullptr);
double prev_s = 0.0; for (int i = 0; i < adc_trajectory_.trajectory_point_size(); ++i) {
for (int i = 0; i < num_point; ++i) {
double s = adc_trajectory_.trajectory_point(i).path_point().s(); double s = adc_trajectory_.trajectory_point(i).path_point().s();
if (i > 0 && std::abs(s - prev_s) < FLAGS_junction_search_radius) { std::string lane_id =
continue; adc_trajectory_.trajectory_point(i).path_point().lane_id();
}
if (s > FLAGS_adc_trajectory_search_length) { // Find junctions
break; if (junction_info == nullptr && s < FLAGS_adc_trajectory_search_length) {
double x = adc_trajectory_.trajectory_point(i).path_point().x();
double y = adc_trajectory_.trajectory_point(i).path_point().y();
std::vector<std::shared_ptr<const JunctionInfo>> junctions =
PredictionMap::instance()->GetJunctions({x, y},
FLAGS_junction_search_radius);
if (!junctions.empty() && junctions.front() != nullptr) {
junction_info = junctions.front();
}
} }
prev_s = s;
double x = adc_trajectory_.trajectory_point(i).path_point().x(); // Insert reference lane ids
double y = adc_trajectory_.trajectory_point(i).path_point().y(); if (reference_line_lane_ids_.empty() ||
std::vector<std::shared_ptr<const JunctionInfo>> junctions = lane_id != reference_line_lane_ids_.back()) {
PredictionMap::instance()->GetJunctions({x, y}, reference_line_lane_ids_.emplace_back(lane_id);
FLAGS_junction_search_radius);
if (junctions.empty()) {
continue;
} else {
junction_info = junctions.front();
break;
} }
} }
if (junction_info == nullptr) {
return Polygon2d{};
}
const apollo::hdmap::Polygon& junction_polygon = if (junction_info != nullptr) {
junction_info->junction().polygon(); std::vector<Vec2d> vertices;
std::vector<Vec2d> vertices; for (const auto& point : junction_info->junction().polygon().point()) {
for (const auto& point : junction_polygon.point()) { vertices.emplace_back(point.x(), point.y());
vertices.emplace_back(point.x(), point.y()); }
if (vertices.size() >= 3) {
return Polygon2d{vertices};
}
} }
return Polygon2d{vertices}; return Polygon2d{};
}
const std::vector<std::string>&
ADCTrajectoryContainer::get_reference_line_lane_ids() {
return reference_line_lane_ids_;
} }
} // namespace prediction } // namespace prediction
......
...@@ -24,7 +24,6 @@ ...@@ -24,7 +24,6 @@
#include <memory> #include <memory>
#include <string> #include <string>
#include <unordered_set>
#include <vector> #include <vector>
#include "modules/perception/proto/perception_obstacle.pb.h" #include "modules/perception/proto/perception_obstacle.pb.h"
...@@ -68,13 +67,19 @@ class ADCTrajectoryContainer : public Container { ...@@ -68,13 +67,19 @@ class ADCTrajectoryContainer : public Container {
*/ */
bool IsPointInJunction(const apollo::common::PathPoint& point) const; bool IsPointInJunction(const apollo::common::PathPoint& point) const;
/**
* @brief Get reference line lane ids
* @return A vector of lane ids
*/
const std::vector<std::string>& get_reference_line_lane_ids();
private: private:
apollo::common::math::Polygon2d GetJunctionPolygon(); apollo::common::math::Polygon2d GetJunctionPolygon();
private: private:
apollo::planning::ADCTrajectory adc_trajectory_; apollo::planning::ADCTrajectory adc_trajectory_;
apollo::common::math::Polygon2d junction_polygon_; apollo::common::math::Polygon2d junction_polygon_;
std::unordered_set<std::string> reference_line_lane_ids_; std::vector<std::string> reference_line_lane_ids_;
}; };
} // namespace prediction } // namespace prediction
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册