36 if (std::isnan(vehicle_state.
x()) || std::isnan(vehicle_state.
y()) ||
37 std::isnan(vehicle_state.
z()) || std::isnan(vehicle_state.
heading()) ||
38 std::isnan(vehicle_state.
kappa()) ||
48 if (first.has_header() && second.has_header()) {
49 const auto& first_header = first.
header();
50 const auto& second_header = second.
header();
51 return (first_header.sequence_num() != second_header.sequence_num() ||
52 first_header.module_name() != second_header.module_name() ||
53 first_header.timestamp_sec() != second_header.timestamp_sec());
60 const double adc_front_edge_s,
const double stop_line_s) {
62 const double max_adc_stop_speed = common::VehicleConfigHelper::Instance()
65 .max_abs_speed_when_stopped();
66 if (adc_speed < max_adc_stop_speed) {
70 double stop_distance = 0;
72 if (stop_line_s > adc_front_edge_s) {
73 stop_distance = stop_line_s - adc_front_edge_s;
75 if (stop_distance < 1e-5) {
76 return std::numeric_limits<double>::max();
78 return (adc_speed * adc_speed) / (2 * stop_distance);
85 const std::string& stop_sign_overlap_id) {
86 const std::vector<PathOverlap>& stop_sign_overlaps =
88 auto stop_sign_overlap_it =
89 std::find_if(stop_sign_overlaps.begin(), stop_sign_overlaps.end(),
90 [&stop_sign_overlap_id](
const PathOverlap& overlap) {
91 return overlap.object_id == stop_sign_overlap_id;
93 return (stop_sign_overlap_it != stop_sign_overlaps.end());
101 const std::string& traffic_light_overlap_id) {
102 const std::vector<PathOverlap>& traffic_light_overlaps =
104 auto traffic_light_overlap_it =
105 std::find_if(traffic_light_overlaps.begin(), traffic_light_overlaps.end(),
106 [&traffic_light_overlap_id](
const PathOverlap& overlap) {
107 return overlap.object_id == traffic_light_overlap_id;
109 return (traffic_light_overlap_it != traffic_light_overlaps.end());
120 reference_line_info.
GetJunction(adc_front_edge_s, &junction_overlap);
121 if (junction_overlap.
object_id.empty()) {
125 static constexpr double kIntersectionPassDist = 2.0;
126 const double distance_adc_pass_intersection =
127 adc_back_edge_s - junction_overlap.
end_s;
128 ADEBUG <<
"distance_adc_pass_intersection[" << distance_adc_pass_intersection
129 <<
"] junction_overlap[" << junction_overlap.
object_id <<
"] start_s["
130 << junction_overlap.
start_s <<
"]";
132 return distance_adc_pass_intersection < kIntersectionPassDist;
139 std::vector<std::string>* files) {
141 if (!boost::filesystem::exists(path)) {
144 if (boost::filesystem::is_regular_file(path)) {
145 AINFO <<
"Found record file: " << path.c_str();
146 files->push_back(path.c_str());
149 if (boost::filesystem::is_directory(path)) {
150 for (
auto& entry : boost::make_iterator_range(
151 boost::filesystem::directory_iterator(path), {})) {
161 double s,
bool* is_left) {
162 const auto& vehicle_param =
163 common::VehicleConfigHelper::Instance()->GetConfig().vehicle_param();
164 double max_kappa = 1.0 / vehicle_param.min_turn_radius();
165 double half_wb = 0.5 * vehicle_param.wheel_base();
166 double front_l = vehicle_param.front_edge_to_center() - half_wb;
167 double half_w = 0.5 * vehicle_param.width();
168 double current_heading =
184 *is_left = (kappa_b < 0.0);
186 if (kappa_f * kappa_b < 0.0 || fabs(kappa_f) < 1e-6) {
190 kappa_f = std::min(fabs(kappa_f), max_kappa);
191 kappa_b = std::min(fabs(kappa_b), max_kappa);
193 double sint = std::sin(theta);
194 double cost = std::cos(theta);
195 double r_f = 1.0 / kappa_f;
198 r_f + front_l * sint + half_w * cost)
201 return std::max(eq_half_w, half_w);
206 const auto& vehicle_param =
207 common::VehicleConfigHelper::Instance()->GetConfig().vehicle_param();
208 double max_kappa = 1.0 / vehicle_param.min_turn_radius();
209 double half_wb = 0.5 * vehicle_param.wheel_base();
210 double front_l = vehicle_param.front_edge_to_center() - half_wb;
211 double half_w = 0.5 * vehicle_param.width();
212 double current_heading = lane_info->Heading(s);
213 double heading_f = lane_info->Heading(s + front_l);
214 double heading_b = lane_info->Heading(s - half_wb);
223 *is_left = (kappa_b < 0.0);
225 if (kappa_f * kappa_b < 0.0 || fabs(kappa_f) < 1e-6) {
229 kappa_f = std::min(fabs(kappa_f), max_kappa);
230 kappa_b = std::min(fabs(kappa_b), max_kappa);
232 double sint = std::sin(theta);
233 double cost = std::cos(theta);
234 double r_f = 1.0 / kappa_f;
237 r_f + front_l * sint + half_w * cost)
240 return std::max(eq_half_w, half_w);
248 if (delta_x > r * (1.0 + std::sin(heading)) - 1e-6) {
249 *result = std::numeric_limits<double>::lowest();
253 *result = std::sqrt(r * r - std::pow(delta_x - r * std::sin(heading), 2)) -
254 r * std::cos(heading);
263 if (delta_x > r * (1.0 - std::sin(heading)) - 1e-6) {
264 *result = std::numeric_limits<double>::max();
267 *result = r * std::cos(heading) -
268 std::sqrt(r * r - std::pow(delta_x + r * std::sin(heading), 2));
279 if (heading > 0 || kappa < 0 ||
280 delta_x > r * (1.0 - std::sin(heading)) - 1e-6) {
281 *result = std::numeric_limits<double>::lowest();
284 if (delta_x < -r * std::sin(heading)) {
285 *result = r * std::cos(heading) -
286 std::sqrt(r * r - std::pow(delta_x - r * std::sin(heading), 2));
288 *result = std::sqrt(r * r - std::pow(delta_x + r * std::sin(heading), 2)) -
289 r * (2 - std::cos(heading));
301 if (heading < 0 || kappa > 0 ||
302 delta_x > r * (1.0 - std::sin(heading)) - 1e-6) {
303 *result = std::numeric_limits<double>::max();
306 if (delta_x < r * std::sin(heading)) {
307 *result = std::sqrt(r * r - std::pow(delta_x - r * std::sin(heading), 2)) -
308 r * std::cos(heading);
310 *result = r * (2 - std::cos(heading)) -
311 std::sqrt(r * r - std::pow(delta_x - r * std::sin(heading), 2));
The class of vehicle state.
double linear_velocity() const
Get the vehicle's linear velocity.
Implements a class of 2-dimensional vectors.
double Length() const
Gets the length of the vector
double Angle() const
Gets the angle between the vector and the positive x semi-axis
const std::vector< PathOverlap > & signal_overlaps() const
const std::vector< PathOverlap > & stop_sign_overlaps() const
ReferenceLineInfo holds all data for one reference line.
int GetJunction(const double s, hdmap::PathOverlap *junction_overlap) const
const ReferenceLine & reference_line() const
const SLBoundary & AdcSlBoundary() const
const hdmap::Path & map_path() const
ReferencePoint GetReferencePoint(const double s) const
Planning module main class.
double NormalizeAngle(const double angle)
Normalize angle to [-PI, PI).
std::shared_ptr< const LaneInfo > LaneInfoConstPtr
bool left_arc_bound_with_heading(double delta_x, double r, double heading, double *result)
bool CheckInsideJunction(const ReferenceLineInfo &reference_line_info)
bool CheckStopSignOnReferenceLine(const ReferenceLineInfo &reference_line_info, const std::string &stop_sign_overlap_id)
bool right_arc_bound_with_heading(double delta_x, double r, double heading, double *result)
double CalculateEquivalentEgoWidth(const ReferenceLineInfo &reference_line_info, double s, bool *is_left)
bool left_arc_bound_with_heading_with_reverse_kappa(double delta_x, double r, double heading, double kappa, double *result)
void GetFilesByPath(const boost::filesystem::path &path, std::vector< std::string > *files)
bool IsVehicleStateValid(const VehicleState &vehicle_state)
double GetADCStopDeceleration(apollo::common::VehicleStateProvider *vehicle_state, const double adc_front_edge_s, const double stop_line_s)
bool IsDifferentRouting(const PlanningCommand &first, const PlanningCommand &second)
bool right_arc_bound_with_heading_with_reverse_kappa(double delta_x, double r, double heading, double kappa, double *result)
bool CheckTrafficLightOnReferenceLine(const ReferenceLineInfo &reference_line_info, const std::string &traffic_light_overlap_id)
optional double linear_velocity
optional double linear_acceleration
optional apollo::common::Header header