26 #include "Eigen/Dense" 27 #include "Eigen/Eigen" 28 #include "Eigen/Geometry" 30 #include "modules/common/configs/vehicle_config_helper.h" 36 namespace perception {
52 static constexpr uint32_t kMaxNumVirtualLanePoint = 25;
54 static constexpr
float kAverageFrameRate = 0.05f;
63 const Eigen::Matrix3d &homography_im2car,
67 const float average_frame_rate = kAverageFrameRate,
68 const bool image_based_cipv =
false,
const int debug_level = 0);
69 virtual std::string Name()
const;
72 bool DetermineCipv(
const std::vector<base::LaneLine> &lane_objects,
74 const Eigen::Affine3d &world2camera,
75 std::vector<std::shared_ptr<base::Object>> *objects);
79 const Eigen::Affine3d &world2camera,
80 std::vector<std::shared_ptr<base::Object>> *objects);
82 static float VehicleDynamics(
const uint32_t tick,
const float yaw_rate,
83 const float velocity,
const float time_unit,
85 static float VehicleDynamics(
const uint32_t tick,
const float yaw_rate,
86 const float velocity,
const float time_unit,
87 const float vehicle_half_width,
float *center_x,
88 float *ceneter_y,
float *left_x,
float *left_y,
89 float *right_x,
float *right_y);
91 static bool MakeVirtualEgoLaneFromYawRate(
const float yaw_rate,
93 const float offset_distance,
99 bool DistanceFromPointToLineSegment(
const Point2Df &point,
100 const Point2Df &line_seg_start_point,
105 bool GetEgoLane(
const std::vector<base::LaneLine> &lane_objects,
107 bool *b_left_valid,
bool *b_right_valid);
110 bool ElongateEgoLane(
const std::vector<base::LaneLine> &lane_objects,
111 const bool b_left_valid,
const bool b_right_valid,
112 const float yaw_rate,
const float velocity,
114 bool CreateVirtualEgoLane(
const float yaw_rate,
const float velocity,
118 bool FindClosestObjectImage(
const std::shared_ptr<base::Object> &
object,
124 bool FindClosestObjectGround(
const std::shared_ptr<base::Object> &
object,
126 const Eigen::Affine3d world2camera,
131 bool AreDistancesSane(
const float distance_start_point_to_right_lane,
132 const float distance_start_point_to_left_lane,
133 const float distance_end_point_to_right_lane,
134 const float distance_end_point_to_left_lane);
137 bool IsObjectInTheLaneImage(
const std::shared_ptr<base::Object> &
object,
138 const EgoLane &egolane_image,
float *distance);
147 bool IsObjectInTheLaneGround(
const std::shared_ptr<base::Object> &
object,
149 const Eigen::Affine3d world2camera,
150 const bool b_virtual,
float *distance);
153 bool IsObjectInTheLane(
const std::shared_ptr<base::Object> &
object,
156 const Eigen::Affine3d world2camera,
157 const bool b_virtual,
float *distance);
160 bool IsPointLeftOfLine(
const Point2Df &point,
161 const Point2Df &line_seg_start_point,
162 const Point2Df &line_seg_end_point);
167 const float yaw_rate,
const float offset_distance,
171 bool TranformPoint(
const Eigen::VectorXf &in,
172 const Eigen::Matrix4f &motion_matrix,
173 Eigen::Vector3d *out);
175 bool image2ground(
const float image_x,
const float image_y,
float *ground_x,
177 bool ground2image(
const float ground_x,
const float ground_y,
float *image_x,
181 bool b_image_based_cipv_ =
false;
182 int32_t debug_level_ = 0;
183 float time_unit_ = kAverageFrameRate;
188 float margin_vehicle_to_lane_ =
190 float single_virtual_egolane_width_in_meter_ =
192 float half_virtual_egolane_width_in_meter_ =
193 single_virtual_egolane_width_in_meter_ * 0.5f;
196 float max_dist_object_to_virtual_lane_in_meter_ =
199 float MAX_VEHICLE_WIDTH_METER = 5.0f;
200 float EPSILON = 1.0e-6f;
201 std::size_t kDropsHistorySize = 100;
202 std::size_t kMaxObjectNum = 100;
203 std::size_t kMaxAllowedSkipObject = 10;
205 std::map<int, size_t> object_id_skip_count_;
206 std::map<int, boost::circular_buffer<std::pair<float, float>>>
207 object_trackjectories_;
208 std::map<int, std::vector<double>> object_timestamps_;
209 Eigen::Matrix3d homography_im2car_ = Eigen::Matrix3d::Identity();
210 Eigen::Matrix3d homography_car2im_ = Eigen::Matrix3d::Identity();
211 int32_t old_cipv_track_id_ = -2;
float yaw_angle
Definition: cipv_camera.h:41
Definition: lane_object.h:75
constexpr float kMaxDistObjectToVirtualLaneInMeter
Definition: cipv_camera.h:46
float yaw_rate
Definition: cipv_camera.h:40
constexpr float kMaxDistObjectToLaneInPixel
Definition: cipv_camera.h:47
constexpr uint32_t kMinLaneLineLengthForCIPV
Definition: lane_object.h:35
constexpr float kMinVelocity
Definition: cipv_camera.h:44
float velocity
Definition: cipv_camera.h:39
Eigen::Vector2f Point2Df
Definition: lane_object.h:51
Definition: cipv_camera.h:56
constexpr float kAverageLaneWidthInMeter
Definition: lane_object.h:37
std::shared_ptr< MotionBuffer > MotionBufferPtr
Definition: object_supplement.h:201
constexpr float kMaxDistObjectToLaneInMeter
Definition: cipv_camera.h:45
Definition: lane_object.h:64
Definition: lane_object.h:55
const std::size_t kMaxObjectNum
Definition: cipv_camera.h:49
const std::size_t kMaxAllowedSkipObject
Definition: cipv_camera.h:50
constexpr float kMaxVehicleWidthInMeter
Definition: lane_object.h:39
constexpr float kMarginVehicleToLane
Definition: lane_object.h:41
const std::size_t kDropsHistorySize
Definition: cipv_camera.h:48
Definition: cipv_camera.h:38