70 {
71 Vec2d position(vehicle_state_.
x(), vehicle_state_.
y());
72
74 Vec2d vec_to_center(
75 (param.front_edge_to_center() - param.back_edge_to_center()) / 2.0,
76 (param.left_edge_to_center() - param.right_edge_to_center()) / 2.0);
77
78 Vec2d center(position + vec_to_center.rotate(vehicle_state_.
heading()));
79
81
82
83 static constexpr double kDistanceThreshold = 50.0;
84 static constexpr double buffer = 0.1;
85 const double impact_region_length =
86 param.length() + buffer + kDistanceThreshold;
87 Box2d ego_front_region(center + unit_vec_heading * kDistanceThreshold / 2.0,
88 vehicle_state_.
heading(), impact_region_length,
89 param.width() + buffer);
90
91 for (const auto& obstacle : obstacles) {
92 if (obstacle->IsVirtual() ||
93 !ego_front_region.HasOverlap(obstacle->PerceptionBoundingBox())) {
94 continue;
95 }
96
98 obstacle->PerceptionBoundingBox().center()) -
100
101 if (front_clear_distance_ < 0.0 || dist < front_clear_distance_) {
102 front_clear_distance_ = dist;
103 }
104 }
105}
double diagonal() const
Getter of the size of the diagonal of the box
const Vec2d & center() const
Getter of the center of the box
static Vec2d CreateUnitVec2d(const double angle)
Creates a unit-vector with a given angle to the positive x semi-axis
double DistanceTo(const Vec2d &other) const
Returns the distance to the given vector
optional VehicleParam vehicle_param