30 const std::vector<const Obstacle*>& obstacles,
31 const std::shared_ptr<std::vector<common::PathPoint>>& ptr_reference_line)
32 : ptr_reference_line_(ptr_reference_line) {
33 for (
const auto ptr_obstacle : obstacles) {
34 if (common::util::InsertIfNotPresent(&id_obstacle_map_, ptr_obstacle->Id(),
36 obstacles_.push_back(ptr_obstacle);
38 AWARN <<
"Duplicated obstacle found [" << ptr_obstacle->Id() <<
"]";
48 const std::string& obstacle_id,
const double s,
const double t)
const {
49 ACHECK(id_obstacle_map_.find(obstacle_id) != id_obstacle_map_.end());
51 const auto& trajectory = id_obstacle_map_.at(obstacle_id)->Trajectory();
52 int num_traj_point = trajectory.trajectory_point_size();
53 if (num_traj_point < 2) {
57 if (t < trajectory.trajectory_point(0).relative_time() ||
58 t > trajectory.trajectory_point(num_traj_point - 1).relative_time()) {
63 std::lower_bound(trajectory.trajectory_point().begin(),
64 trajectory.trajectory_point().end(), t,
66 return p.relative_time() < t;
69 double v = matched_it->v();
70 double theta = matched_it->path_point().theta();
71 double v_x = v * std::cos(theta);
72 double v_y = v * std::sin(theta);
76 auto ref_theta = obstacle_point_on_ref_line.
theta();
78 return std::cos(ref_theta) * v_x + std::sin(ref_theta) * v_y;