日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Apollo_Lattice palnner

發(fā)布時間:2023/12/16 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Apollo_Lattice palnner 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Lattice與Piecewise方法明顯的不同,Lattice是沿參考線分解,橫向運(yùn)動(l,l',l''),縱向運(yùn)動(s,s',s''),然后進(jìn)行軌跡合成。
?

引言:

?Apollo中在2.5版本就引入了Lattice palnner,該算法基于Frenet坐標(biāo)系,通過采樣的方式生成軌跡。在橫向采樣中,Apollo引入了優(yōu)化的思想,這與之后的Piecewise jerk Path optimization同根同源。

雖然該算法本身具有一定的缺陷,但作為一個體系完整的規(guī)劃器,依舊很值得我們學(xué)習(xí)。

基礎(chǔ)工作:ReferenceLine、Pncmap、障礙物映射(數(shù)據(jù)流動)等

Apollo 中 Planning 模塊的框架_牛仔很忙吧的博客-CSDN博客

0. 啟動流程

主流程在planning\planner\lattice\lattice_planner.cc,需要調(diào)用以下模塊:

common/math/cartesian_frenet_conversion.cc //坐標(biāo)轉(zhuǎn)換 common/math/path_matcher.cc planning/common/planning_gflags.cc planning/constraint_checker/collision_checker.cc //碰撞檢測 planning/constraint_checker/constraint_checker.cc //約束檢測 planning/lattice/behavior/path_time_graph.cc planning/lattice/behavior/prediction_querier.cc planning/lattice/trajectory_generation/backup_trajectory_generator.cc planning/lattice/trajectory_generation/lattice_trajectory1d.cc planning/lattice/trajectory_generation/trajectory1d_generator.cc planning/lattice/trajectory_generation/trajectory_combiner.cc //軌跡拼接 planning/lattice/trajectory_generation/trajectory_evaluator.cc //軌跡評估

CyberRT的planning_component類里Init過程中運(yùn)行palnning_base類的RunOnce()函數(shù)周期性地運(yùn)行規(guī)劃主程序plan(),即根據(jù)config與scenario等決定哪一種planner。

planner中的PlannerWithReferenceLine子類中有四個子類,其中之一是LatticePlanner。

LatticePlanner類頭文件如下(刪除暫時無用的部分):

//FILE:modules/planning/planner/lattice/lattice_planner.h class LatticePlanner : public PlannerWithReferenceLine {public:explicit LatticePlanner(const std::shared_ptr<DependencyInjector>& injector): PlannerWithReferenceLine(injector) {}common::Status Plan(const common::TrajectoryPoint& planning_init_point,Frame* frame,ADCTrajectory* ptr_computed_trajectory) override;common::Status PlanOnReferenceLine(const common::TrajectoryPoint& planning_init_point, Frame* frame,ReferenceLineInfo* reference_line_info) override; };

LatticePlanner::Plan()

運(yùn)行接口,從frame中獲取多條reference_line_info并逐條進(jìn)行規(guī)劃.多條參考線形成跟車/換道/繞行等決策效果.

PlanOnReferenceLine()

運(yùn)行主體.官方注釋中分為大步驟.
此部分的代碼寫的層次比較清晰,結(jié)合注釋能把每一步的作用看懂,并把操作都封裝到了一個個單獨(dú)的類中.共7步,下面對每步進(jìn)行解讀.

1. 獲取參考線數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換

obtain a reference line and transform it to the PathPoint format

ReferencePoint -> PathPoint,同時計算路徑累計長度s.

auto ptr_reference_line =std::make_shared<std::vector<PathPoint>>(ToDiscretizedReferenceLine(reference_line_info->reference_line().reference_points()));

2. 匹配在參考線上最近點(diǎn)

compute the matched point of the init planning point on the reference line

PathPoint matched_point = PathMatcher::MatchToPath(*ptr_reference_line, planning_init_point.path_point().x(),planning_init_point.path_point().y());

(下圖為盜圖,侵刪,下面的盜圖同)先在reference_line找到歐式距離最近的點(diǎn)以及下一個點(diǎn),然后線性插值得到垂直最近點(diǎn).

PathPoint PathMatcher::MatchToPath(const std::vector<PathPoint>& reference_line,const double x, const double y) {CHECK_GT(reference_line.size(), 0);auto func_distance_square = [](const PathPoint& point, const double x,const double y) {double dx = point.x() - x;double dy = point.y() - y;return dx * dx + dy * dy;};double distance_min = func_distance_square(reference_line.front(), x, y);std::size_t index_min = 0;for (std::size_t i = 1; i < reference_line.size(); ++i) {double distance_temp = func_distance_square(reference_line[i], x, y);if (distance_temp < distance_min) {distance_min = distance_temp;index_min = i;}}std::size_t index_start = (index_min == 0) ? index_min : index_min - 1;std::size_t index_end =(index_min + 1 == reference_line.size()) ? index_min : index_min + 1;if (index_start == index_end) {return reference_line[index_start];}//線性插值時注意把kappa,dkappa也做處理.return FindProjectionPoint(reference_line[index_start],reference_line[index_end], x, y); }

代碼學(xué)習(xí)點(diǎn):用三目運(yùn)算符代替簡單的if-else

3. 根據(jù)參考線起始點(diǎn)計算Frenet坐標(biāo)系,并構(gòu)造預(yù)測后障礙物查詢散列表

according to the matched point, compute the init state in Frenet frame

std::array<double, 3> init_s;std::array<double, 3> init_d;ComputeInitFrenetState(matched_point, planning_init_point, &init_s, &init_d);auto ptr_prediction_querier = std::make_shared<PredictionQuerier>(frame->obstacles(), ptr_reference_line);

其中構(gòu)造了PredictionQuerier障礙物查詢器,利用google protobuf庫的InsertIfNotPresent()把reference_line里的障礙物提取出來成為散列表.

PredictionQuerier::PredictionQuerier(const std::vector<const Obstacle*>& obstacles,const std::shared_ptr<std::vector<common::PathPoint>>& ptr_reference_line): ptr_reference_line_(ptr_reference_line) {for (const auto ptr_obstacle : obstacles) {if (common::util::InsertIfNotPresent(&id_obstacle_map_, ptr_obstacle->Id(),ptr_obstacle)) {obstacles_.push_back(ptr_obstacle);} else {AWARN << "Duplicated obstacle found [" << ptr_obstacle->Id() << "]";}} }

4. 建圖(PathTimeGraph)獲取speed_limit與PlanningTarget

parse the decision and get the planning target

由于Lattice主要適用于高速場景,因此駕駛?cè)蝿?wù)主要分為:巡航,跟車,換道,剎停.完成這幾樣任務(wù),需要得知目標(biāo)速度(道路限速,駕駛員設(shè)定,前車速度,曲率限速等,從reference_line數(shù)據(jù)結(jié)構(gòu)中獲取),目標(biāo)(無目標(biāo)巡航,有目標(biāo)時,跟車,換道,換道超車,剎停等).


這些任務(wù)的決策是通過SL,TS圖的分析得到的.

auto ptr_path_time_graph = std::make_shared<PathTimeGraph>(ptr_prediction_querier->GetObstacles(), *ptr_reference_line,reference_line_info, init_s[0],init_s[0] + FLAGS_speed_lon_decision_horizon, 0.0,FLAGS_trajectory_time_length, init_d);double speed_limit =reference_line_info->reference_line().GetSpeedLimitFromS(init_s[0]); reference_line_info->SetLatticeCruiseSpeed(speed_limit);PlanningTarget planning_target = reference_line_info->planning_target(); if (planning_target.has_stop_point()) { ADEBUG << "Planning target stop s: " << planning_target.stop_point().s()<< "Current ego s: " << init_s[0]; }

建圖PathTimeGraph類

在構(gòu)造智能指針的過程中構(gòu)造PathTimeGraph()類.
輸入列表為:

const std::vector<const Obstacle*>& obstacles, //障礙物 const std::vector<common::PathPoint>& discretized_ref_points, //參考線離散點(diǎn) const ReferenceLineInfo* ptr_reference_line_info, //參考線信息 const double s_start, //s,t的始終 const double s_end, const double t_start, const double t_end, const std::array<double, 3>& init_d //s的kappa信息

構(gòu)造函數(shù)內(nèi)容為:初始化成員變量,設(shè)置障礙物SetupObstacles(obstacles, discretized_ref_points).
根據(jù)有沒有預(yù)測軌跡,將障礙物分為虛擬/靜態(tài)/動態(tài)障礙物.

1. 靜態(tài)障礙物

SetStaticObstacle(const Obstacle* obstacle,const std::vector<PathPoint>&discretized_ref_points)

SL圖

先用ComputeObstacleBoundary()計算SLBoundary(msg).具體為障礙物的頂點(diǎn)轉(zhuǎn)化為Frenet下,求得s與l的上下限即為SLBoundary.
接著獲取參考線的長度以及道路寬度,過濾超出長度以及道路寬度(分左右側(cè))的障礙物.最后存到static_obs_sl_boundaries_中.

TS圖

分別設(shè)置ST圖的矩形四個角點(diǎn),矩形的長度t由標(biāo)定參數(shù)FLAGS_trajectory_time_length決定.最后存到path_time_obstacle_map_中.

2. 動態(tài)障礙物

SetDynamicObstacle()類似與靜態(tài)障礙物,只不過t維度上無法采用靜止的一條直線描述,只能用0.1s-8.0s(FLAGS_trajectory_time_resolution間隔)采樣描述出s維度上的2個點(diǎn),然后連起來.每一個時間點(diǎn)先把障礙物用GetBoundingBox()轉(zhuǎn)換為common::math::Box2d,然后得到四個頂點(diǎn)GetAllCorners(),也過濾掉超界障礙物,得到ST圖,path_time_obstacle_map_.

3.排序

靜態(tài)障礙物根據(jù)start_s大小排序static_obs_sl_boundaries_SL圖容器.
動態(tài)障礙物直接存到path_time_obstacles_ST圖容器中.

其中,障礙物是通過common::math::Polygon2d類來表達(dá)的,此類包括了多邊形的常用運(yùn)算,例如求面積/距離/包含/重合,還有后續(xù)碰撞檢測用的AABoundingBox().

獲取限速

速度限制優(yōu)先級:ReferenceLine的每段s處的限速>Lane限速(lane_waypoint.lane->lane().speed_limit())>地圖道路限速(hdmap::Road::HIGHWAY)).
通過ReferenceLine::GetSpeedLimitFromS(const double s)函數(shù)獲取.ReferenceLine類有私有成員變量struct SpeedLimit與std::vector<SpeedLimit>記錄每段處的限速.

設(shè)置規(guī)劃目標(biāo)

設(shè)置為proto msg

message PlanningTarget {optional StopPoint stop_point = 1; //內(nèi)含停止s值,HARD/SOFT類型optional double cruise_speed = 2; }

?5. 采樣生成橫+縱向軌跡群

generate 1d trajectory bundle for longitudinal and lateral respectively

/ 5. generate 1d trajectory bundle for longitudinal and lateral respectively.Trajectory1dGenerator trajectory1d_generator(init_s, init_d, ptr_path_time_graph, ptr_prediction_querier);std::vector<std::shared_ptr<Curve1d>> lon_trajectory1d_bundle;std::vector<std::shared_ptr<Curve1d>> lat_trajectory1d_bundle;trajectory1d_generator.GenerateTrajectoryBundles(planning_target, &lon_trajectory1d_bundle, &lat_trajectory1d_bundle);ADEBUG << "Trajectory_Generation_Time = "<< (Clock::NowInSeconds() - current_time) * 1000;current_time = Clock::NowInSeconds();

進(jìn)入GenerateTrajectoryBundles函數(shù)

void Trajectory1dGenerator::GenerateTrajectoryBundles(const PlanningTarget& planning_target,Trajectory1DBundle* ptr_lon_trajectory_bundle,Trajectory1DBundle* ptr_lat_trajectory_bundle) {//縱向速度規(guī)劃GenerateLongitudinalTrajectoryBundle(planning_target,ptr_lon_trajectory_bundle);//橫向軌跡規(guī)劃GenerateLateralTrajectoryBundle(ptr_lat_trajectory_bundle); }

5.1 Trajectory1dGenerator類-規(guī)劃軌跡生成器

構(gòu)造函數(shù)中首先計算TS以及VS圖中的FeasibleRegion.具體為根據(jù)車輛縱向加速度的上下限計算SUpper,SLower,VUpper,VLower,TLower.

5.2??縱向規(guī)劃軌跡生成

五次多項(xiàng)式(跟車/超車、停車)、四次多項(xiàng)式(巡航)

void Trajectory1dGenerator::GenerateLongitudinalTrajectoryBundle(const PlanningTarget& planning_target,Trajectory1DBundle* ptr_lon_trajectory_bundle) const {// cruising trajectories are planned regardlessly.GenerateSpeedProfilesForCruising(planning_target.cruise_speed(),ptr_lon_trajectory_bundle);GenerateSpeedProfilesForPathTimeObstacles(ptr_lon_trajectory_bundle);if (planning_target.has_stop_point()) {GenerateSpeedProfilesForStopping(planning_target.stop_point().s(),ptr_lon_trajectory_bundle);} }

GenerateLongitudinalTrajectoryBundle()函數(shù).縱向主要是在TS圖中可以直觀感受到,S的一階導(dǎo)數(shù)為V,即可得到VS圖(這里沒有使用官方的ST圖的表述是因?yàn)榕cSL圖表示一致,自變量在前因變量在后).
輸出的標(biāo)準(zhǔn)數(shù)據(jù)結(jié)構(gòu)是struct SamplePoint即帶速度的STPoint,最小的分辨率為運(yùn)行周期0.1s.

巡航

????????GenerateSpeedProfilesForCruising(): 根據(jù)planning_target的巡航速度得到終止條件(終止條件采樣器),用GenerateTrajectory1DBundle<4>計算得速度的四次多項(xiàng)式QuarticPolynomialCurve1d.
????????由于不需要確定末狀態(tài)的S值,所以只有五個變量(起始點(diǎn)s、v、a和末點(diǎn)的v、a,不需要求解五次多項(xiàng)式,求解四次即可(apollo對性能還是很敏感的啊).
????????這里介紹一下巡航時采樣器EndConditionSampler::SampleLonEndConditionsForCruising().
需要輸入巡航速度然后輸出采樣點(diǎn)時間點(diǎn)處的速度即可.具體是采樣9個點(diǎn),范圍是[FLAGS_polynomial_minimal_param,FLAGS_trajectory_time_length*i].實(shí)際值好象是[0.01, 1, 2, 3, 4…7, 8]s.在每個時刻,計算FeasibleRegion里對應(yīng)個采樣時間點(diǎn)處的速度上下限,用線性插值的方式增加采樣點(diǎn).如下圖:


總采樣點(diǎn)為2+6×8=50個.

然后再說一下曲線的類,繼承關(guān)系如下:
Curve1d->PolynomialCurve1d->QuarticPolynomialCurve1d/QuinticPolynomialCurve1d
Curve1d->LatticeTrajectory1d

對于每段軌跡的初始化,使用智能指針管理.
auto ptr_trajectory1d = std::make_shared<LatticeTrajectory1d>(std::shared_ptr<Curve1d>(new QuarticPolynomialCurve1d())
構(gòu)造函數(shù)里有QuarticPolynomialCurve1d::ComputeCoefficients()函數(shù)計算出多項(xiàng)式系數(shù),得到縱向規(guī)劃曲線bundle.

跟車/超車

GenerateSpeedProfilesForPathTimeObstacles():此時的采樣器為EndConditionSampler::SampleLonEndConditionsForPathTimePoints().
不管是跟車還是超車是通過QueryPathTimeObstacleSamplePoints()函數(shù)根據(jù)車輛尺寸(front_edge_to_center),


分別查詢跟車QueryFollowPathTimePoints()與超車QueryOvertakePathTimePoints()均采集采樣點(diǎn),而在TS圖里跟車與超車分別意味著在障礙物的下方/上方采點(diǎn).這里是不對跟車/超車進(jìn)行決策,決策是通過后續(xù)的cost計算來決策的.


具體過程是先查詢障礙物的四個角點(diǎn):PathTimeGraph::GetObstacleSurroundingPoints().跟車的話,對下方2角點(diǎn)進(jìn)行線性插值得到FLAGS_time_min_density分辨率下的采樣點(diǎn).
超車的話,對上方2角點(diǎn)進(jìn)行線性插值.


提一下這里的線性插值,下圖TS圖中的斜率代表了障礙物的速度,勻速時為直線,加速時為開口向上的多項(xiàng)式曲線,減速時開口向下.但是這里采用線性插值是有點(diǎn)問題的.減速時插值的直線在實(shí)際曲線的下方,也就是比實(shí)際更嚴(yán)格.但是加速時插值的直線在實(shí)際曲線的上方,對于前期緩慢加速,后期突然快速加速的前車誤差最大,可能導(dǎo)致碰撞(還是說交給后面的碰撞檢測來填坑?).


采樣點(diǎn)SamplePoint里的速度則是通過函數(shù)PredictionQuerier::ProjectVelocityAlongReferenceLine()把障礙物的速度投射到Frenet坐標(biāo)系中得到速度.只不過考慮到超車后的安全,s方向上加了一個offset:FLAGS_default_lon_buffer.
然后得到的采樣點(diǎn)用FeasibleRegion過濾掉不滿足的點(diǎn)得到最終的縱向終止點(diǎn)集end_s_conditions.

對所有終止點(diǎn)求解五次多項(xiàng)式得到速度軌跡,求解函數(shù)Trajectory1dGenerator::GenerateTrajectory1DBundle<5>為common function的求解函數(shù).
軌跡曲線:auto ptr_trajectory1d = std::make_shared<LatticeTrajectory1d>(std::shared_ptr<Curve1d>(new QuinticPolynomialCurve1d()).

停車

GenerateSpeedProfilesForStopping():由開關(guān)planning_target.has_stop_point()來控制.
此時的采樣器為EndConditionSampler::SampleLonEndConditionsForCruising().
由于終止點(diǎn)的速度/加速度都為0,采樣點(diǎn)需要決定的數(shù)據(jù)為2個,一個是剎停距離std::max(init_s_[0], ref_stop_point),ref_stop_point為輸入的參考剎停距離,
第二個是時間間隔同采樣器SampleLonEndConditionsForCruising().
然后用common function的求解函數(shù)求得速度軌跡.

5.3?橫向規(guī)劃軌跡生成

GenerateLateralTrajectoryBundle()函數(shù).橫向的采樣器為EndConditionSampler::SampleLatEndConditions()
采樣點(diǎn)為d方向:0.0, -0.5, 0.5三個點(diǎn),s方向:10.0, 20.0, 40.0, 80.0四個點(diǎn),一共12個點(diǎn).
換道的橫向軌跡規(guī)劃是通過調(diào)整referenceLine來實(shí)現(xiàn)的.


通過FLAGS_lateral_optimization開關(guān)控制是否經(jīng)過優(yōu)化的方式還是直接計算五次多項(xiàng)式的形式計算橫向軌跡.
直接計算五次多項(xiàng)式同縱向的common function.

優(yōu)化計算是通過繼承了LateralQPOptimizer類的LateralOSQPOptimizer來完成的.輸出的軌跡類型為PiecewiseJerkTrajectory1d.

void Trajectory1dGenerator::GenerateLateralTrajectoryBundle(Trajectory1DBundle* ptr_lat_trajectory_bundle) const {//是否使用優(yōu)化軌跡,true,采用五次多項(xiàng)式規(guī)劃if (!FLAGS_lateral_optimization) {auto end_conditions = end_condition_sampler_.SampleLatEndConditions();// Use the common function to generate trajectory bundles.GenerateTrajectory1DBundle<5>(init_lat_state_, end_conditions,ptr_lat_trajectory_bundle);} else {double s_min = init_lon_state_[0];double s_max = s_min + FLAGS_max_s_lateral_optimization; //FLAGS_max_s_lateral_optimization = 60double delta_s = FLAGS_default_delta_s_lateral_optimization; //規(guī)劃間隔為1m//橫向邊界auto lateral_bounds =ptr_path_time_graph_->GetLateralBounds(s_min, s_max, delta_s);// LateralTrajectoryOptimizer lateral_optimizer;std::unique_ptr<LateralQPOptimizer> lateral_optimizer(new LateralOSQPOptimizer);// 采用的是OSQP求解器lateral_optimizer->optimize(init_lat_state_, delta_s, lateral_bounds);auto lateral_trajectory = lateral_optimizer->GetOptimalTrajectory();ptr_lat_trajectory_bundle->push_back(std::make_shared<PiecewiseJerkTrajectory1d>(lateral_trajectory));} }

5.4?軌跡類型

這里稍微介紹一下planning/module/trajectory1d下面的幾個軌跡類型.
StandingStillTrajectory1d:在s處不的的軌跡描述.
ConstantJerkTrajectory1d:jerk不變的軌跡描述,
ConstantDecelerationTrajectory1d:減速度不變的軌跡描述,
PiecewiseJerkTrajectory1d:ConstantJerkTrajectory1d的vector,即數(shù)段連接在一起的軌跡.對外的接口是:增加線段,獲取總長度,獲取order階數(shù)時t處值.
PiecewiseAccelerationTrajectory1d:多段段內(nèi)加速度不變的曲線連接在一起的軌跡,使用s,v,a,t的vector來表達(dá).
PiecewiseTrajectory1d:多段Curve1d連接在一起的軌跡.
PiecewiseBrakingTrajectoryGenerator:在planning/lattice/trajectory_generation下面,分段剎車的軌跡,得到為PiecewiseAccelerationTrajectory1d軌跡.

6. 計算軌跡cost并排序,過濾可能碰撞的軌跡

first, evaluate the feasibility of the 1d trajectories according to dynamic constraints. second, evaluate the feasible longitudinal and lateral trajectory pairs and sort them according to the cost.

TrajectoryEvaluator trajectory_evaluator(init_s, planning_target, lon_trajectory1d_bundle, lat_trajectory1d_bundle,ptr_path_time_graph, ptr_reference_line); // Get instance of collision checker and constraint checker CollisionChecker collision_checker(frame->obstacles(), init_s[0], init_d[0],*ptr_reference_line, reference_line_info,ptr_path_time_graph);

通過TrajectoryEvaluator類的構(gòu)造函數(shù)實(shí)現(xiàn).

濾除不合格的軌跡

  • 過停止位置的縱向軌跡.
  • ConstraintChecker1d::IsValidLongitudinalTrajectory過濾v/a/jerk超限的縱向軌跡
  • ConstraintChecker1d::IsValidLateralTrajectory橫向軌跡的濾除好像還在調(diào)試
  • cost計算

    也通過TrajectoryEvaluator類的構(gòu)造函數(shù)實(shí)現(xiàn).

    主要計算如下5個cost.
    時間點(diǎn)集TT一般為[0,FLAGS_trajectory_time_length]時間范圍內(nèi)以FLAGS_trajectory_time_resolution為分辨率的點(diǎn).

    (后面把這個時間段的選擇表述為[0:FLAGS_trajectory_time_resolution:FLAGS_trajectory_time_length]).

    注意,下面的順序并沒有完全按照源碼里的順序來解讀.

    1.目標(biāo)cost

    Cost of missing the objective, e.g., cruise, stop, etc.
    首先需要構(gòu)造一個理想的目標(biāo)速度軌跡,通過ComputeLongitudinalGuideVelocity()實(shí)現(xiàn).
    用TS圖來表達(dá)的話為TT各個點(diǎn)上的s值vector.
    詳細(xì)分為3種情況

    不剎停
    生成PiecewiseAccelerationTrajectory1d勻速直線.

    剎停,現(xiàn)在開始剎
    生成PiecewiseAccelerationTrajectory1d減速到0.

    剎停,未來某點(diǎn)開始剎直到剎停

    生成PiecewiseBrakingTrajectoryGenerator::Generate().又分為幾種情況.
    緊急剎車無法達(dá)到舒適性剎車,立即最大剎停.
    可以舒適性剎車,典型的情況如下:加速到目標(biāo)速度->勻速->舒適性減速->剎停.
    根據(jù)實(shí)際情況可以變成:減速到目標(biāo)速度->勻速->舒適性減速->剎停/ 減速到目標(biāo)速度->舒適性減速->剎停/ 加速到目標(biāo)速度->舒適性減速->剎停.如下圖:

    如果時間點(diǎn)集還有剩余則用水平線補(bǔ)齊.
    這里使用Piecewise曲線,通過一段段曲線添加的形式,個人覺得非常值得借鑒.
    注:PiecewiseBrakingTrajectoryGenerator類中所有的成員函數(shù)均為static類型,應(yīng)該是安全性考慮,值得借鑒.

    cost分為2部分,speed偏差與軌跡總距離(總距離與cost成反比這一點(diǎn)有點(diǎn)想不明白…).事先計算出理想?yún)⒖键c(diǎn)與評價軌跡的速度之差,評價軌跡的總距離.

    2. 縱向舒適性cost(jerk)

    3. 縱向碰撞cost

    Cost of longitudinal collision
    通過PathTimeGraph::GetPathBlockingIntervals()函數(shù)獲取TT上截取所有障礙物的s跨度(參考縱向采樣時的線性插值).
    TrajectoryEvaluator::LonCollisionCost()計算碰撞cost.
    首先計算時間titi處縱向軌跡的s值,si

    4. 縱向向心加速度cost

    找到titi處匹配的參考線上的曲率ki.

    5. 橫向偏移cost

    Cost of lateral offsets

    先獲取比較的s的span:標(biāo)定量FLAGS_speed_lon_decision_horizon與評價軌跡長度的小值,[0:FLAGS_trajectory_space_resolution:S].

    6. 橫向舒適度cost

    cost of later comfort

    最后把6項(xiàng)cost加權(quán)相加得到最終的總cost.

    同時把縱向橫向的軌跡組合以及其cost放入優(yōu)先隊(duì)列?std::priority_queue<PairCost, std::vector<PairCost>, CostComparator> cost_queue_;中.

    碰撞檢測環(huán)境創(chuàng)建

    CollisionChecker的構(gòu)造函數(shù)里BuildPredictedEnvironment()函數(shù)創(chuàng)建檢測環(huán)境,具體是濾除不相關(guān)的障礙物以及在障礙物形狀上加offset膨脹.

    • 濾除的障礙物有:
  • 虛擬障礙物.
  • 障礙物與自車在同一車道內(nèi)并且在自車后.
  • 障礙物與自車在同一車道內(nèi)但不在PathTimeGrap內(nèi).
    • 膨脹有效障礙物,在Box2d的橫縱向各擴(kuò)張標(biāo)定系數(shù)倍.

    7. 過濾超界軌跡,拼接橫縱向軌跡,如果沒有合格軌跡生成backup軌跡

    always get the best pair of trajectories to combine; return the first collision-free trajectory.

    流程如下:

    7.1?隊(duì)列操作

    選取cost最大的軌跡,并pop出去隊(duì)列top指向第二大的軌跡.

    while (trajectory_evaluator.has_more_trajectory_pairs()) { double trajectory_pair_cost =trajectory_evaluator.top_trajectory_pair_cost(); auto trajectory_pair = trajectory_evaluator.next_top_trajectory_pair();// combine two 1d trajectories to one 2d trajectory auto combined_trajectory = TrajectoryCombiner::Combine(*ptr_reference_line, *trajectory_pair.first, *trajectory_pair.second,planning_init_point.relative_time());// check longitudinal and lateral acceleration // considering trajectory curvatures auto result = ConstraintChecker::ValidTrajectory(combined_trajectory); // check collision with other obstacles if (collision_checker.InCollision(combined_trajectory)) {++collision_failure_count;continue; } // put combine trajectory into debug data const auto& combined_trajectory_points = combined_trajectory; num_lattice_traj += 1; reference_line_info->SetTrajectory(combined_trajectory); reference_line_info->SetCost(reference_line_info->PriorityCost() +trajectory_pair_cost); reference_line_info->SetDrivable(true);// cast auto lattice_traj_ptr =std::dynamic_pointer_cast<LatticeTrajectory1d>(trajectory_pair.first); if (!lattice_traj_ptr) {ADEBUG << "Dynamically casting trajectory1d ptr. failed."; }if (lattice_traj_ptr->has_target_position()) {ADEBUG << "Ending Lon. State s = " << lattice_traj_ptr->target_position()<< " ds = " << lattice_traj_ptr->target_velocity()<< " t = " << lattice_traj_ptr->target_time(); } break; }


    7.2?實(shí)現(xiàn)橫向/縱向軌跡的拼接.

    TrajectoryCombiner::Combine()

    • 在時間[0:FLAGS_trajectory_time_resolution:FLAGS_trajectory_time_length]上每個時刻分別根據(jù)縱橫向軌跡計算得到s,ds,dds與l,dl,ddl.
    • 找到參考線上匹配的最近的點(diǎn),然后將Frenet坐標(biāo)系下的坐標(biāo)轉(zhuǎn)換到笛卡爾坐標(biāo)系下,得到x,y,s,theta,kappa,dkappa,relative_time的TrajectoryPoint.
    • 通過DiscretizedTrajectory::AppendTrajectoryPoint()方法把軌跡點(diǎn)放入到離散軌跡中,完成拼接.

    7.3?約束驗(yàn)證.

    ConstraintChecker::ValidTrajectory()
    分為?VALID, LON_VELOCITY_OUT_OF_BOUND, LON_ACCELERATION_OUT_OF_BOUND,LON_JERK_OUT_OF_BOUND, LAT_VELOCITY_OUT_OF_BOUND, LAT_ACCELERATION_OUT_OF_BOUND, LAT_JERK_OUT_OF_BOUND,CURVATURE_OUT_OF_BOUND結(jié)果,過程是檢查報錯結(jié)果的那些指標(biāo)有沒有出界,都沒有出界的情況下合格.

    7.4?碰撞檢測.

    CollisionChecker::InCollision()
    在每個TrajectoryPoint處構(gòu)造一個shift后的自車Box2d,檢查之前濾除完成后障礙物vectorpredicted_bounding_rectangles_中的每個障礙物與自車HasOverlap()的情況. Shift的vector為Vec2d shift_vec{shift_distance * std::cos(ego_theta),shift_distance * std::sin(ego_theta)};,其中double shift_distance = ego_length/2.0 - vehicle_config.vehicle_param().back_edge_to_center();.

    碰撞檢測是通過矩形Box2d重疊HasOverlap()實(shí)現(xiàn)的.

    將自車/障礙物抽象成Box2d有如下2種方式:

    AABB—Axis Aligned Bounding Box

    OBB—Oriented Bounding Box

    AABB更簡單,構(gòu)造上只要找到x,y坐標(biāo)軸上的極值即可,操作上只需通過x,y坐標(biāo)的比較很快實(shí)現(xiàn),缺點(diǎn)是沒有那么精確,存在大塊空白區(qū),容易引起誤檢.區(qū)別如下圖:

    Apollo使用AABB來構(gòu)造Box2d.但自車的幾何中心與后輪中心不重疊,需要Shift一個vector.

    雖然AABB沒有這么精確,Apollo通過2段檢測法來平衡性能與效果.先用AABB做粗略檢測.如果障礙物與自車在AABB重疊了,進(jìn)行下一步分離軸定理檢測.

    這一步讓我想起了做車輛計劃工程師review汽車零件之間clearance的工作,在CAD軟件上通過截不同的軸面觀測零件到截面的距離來獲取clearance.當(dāng)然這個工作大批量的情況下會由仿真部門自動檢測,但初期布置的情況下需要手動觀察.

    如下圖,只要觀測到

    即可證明沒有碰撞.需要以自車的四個邊為投影軸做檢測直到發(fā)項(xiàng)有一個滿足即可退出. 具體的計算過程,我會在Apollo::Common::Math解讀篇進(jìn)行分析.

    7.5?保存合格軌跡

    能夠跨過這么多道坎還能留存下來的是可行駛的軌跡無疑了.將軌跡相關(guān)信息壓入ReferenceLineInfo中,包括SetTrajectory(),SetCost(),SetDrivable().返回執(zhí)行狀態(tài)Status::OK().最后的輸出為帶cost的一束拼接軌跡,供后續(xù)使用.

    是的,到現(xiàn)在還是不清楚前文提出問題,超車的話是怎么改變ReferenceLine的選擇,需要進(jìn)一步研究一下代碼.

    7.6?backup軌跡

    那要是沒有軌跡能跨過這些坎呢?還有backup軌跡.BackupTrajectoryGenerator類生成backup軌跡.原理是對a進(jìn)行固定采樣{-0.1, -1.0, -2.0, -3.0, -4.0}生成固定減速度的軌跡ConstantDecelerationTrajectory1d.根據(jù)新的初始條件重新規(guī)劃橫向GenerateLateralTrajectoryBundle().之后的過程與上面的障礙物檢測,橫縱向軌跡拼接一致.

    if (num_lattice_traj > 0) { ADEBUG << "Planning succeeded"; num_planning_succeeded_cycles += 1; reference_line_info->SetDrivable(true); return Status::OK(); } else { AERROR << "Planning failed"; if (FLAGS_enable_backup_trajectory) {AERROR << "Use backup trajectory";BackupTrajectoryGenerator backup_trajectory_generator(init_s, init_d, planning_init_point.relative_time(),std::make_shared<CollisionChecker>(collision_checker),&trajectory1d_generator);DiscretizedTrajectory trajectory =backup_trajectory_generator.GenerateTrajectory(*ptr_reference_line);reference_line_info->AddCost(FLAGS_backup_trajectory_cost);reference_line_info->SetTrajectory(trajectory);reference_line_info->SetDrivable(true);return Status::OK();} else {reference_line_info->SetCost(std::numeric_limits<double>::infinity()); }}

    7.7?失敗報錯

    還是無法找到合格的軌跡只能報錯,Status(ErrorCode::PLANNING_ERROR, "No feasible trajectories").

    經(jīng)過這7步,完成了lattice_planner.

    補(bǔ)充:

    軌跡拼接(規(guī)劃起點(diǎn)、規(guī)劃周期、Repaln問題)

    總結(jié):

    Planning Lattice規(guī)劃器 - 知乎

    Apollo Lattice Planner學(xué)習(xí)記錄 - Challenging-eXtraordinary

    下面這篇博客,作者自己按照自己的思路實(shí)現(xiàn)了一遍,分析的比較詳細(xì)?

    基于Frenet坐標(biāo)系的無人車軌跡規(guī)劃詳解與實(shí)現(xiàn)_robinvista的博客-CSDN博客_apollo frenet坐標(biāo)

    Frenet坐標(biāo)系與Cartesian坐標(biāo)系互轉(zhuǎn)_昔風(fēng)不起,唯有努力生存!-CSDN博客_frenet坐標(biāo)系

    百度 Apollo 軌跡規(guī)劃技術(shù)分享筆記 - 知乎? ?提問匯總

    Baidu Apollo代碼解析之軌跡規(guī)劃中的軌跡評估代價函數(shù) - 知乎??Lattice Planner 和 EM Planner

    自動駕駛路徑規(guī)劃-Lattice Planner算法?半杯茶的小酒杯,匯總了一些提問

    下面這個實(shí)踐總結(jié)的很詳細(xì):

    Apollo中Lattice規(guī)劃器結(jié)構(gòu)梳理_王不二的路-CSDN博客_apollo lattice

    ?Lattice Planner從學(xué)習(xí)到放棄(一).額不....到實(shí)踐_王不二的路-CSDN博客_lattice plan

    Lattice Planner從學(xué)習(xí)到放棄(二):二次規(guī)劃的應(yīng)用與調(diào)試_王不二的路-CSDN博客_二次規(guī)劃求解器

    關(guān)于動態(tài)障礙物的處理,需要思考學(xué)習(xí):?

    ?Lattice Planner從學(xué)習(xí)到放棄(三):動態(tài)障礙物的處理與應(yīng)用 - 知乎

    ?Apollo中Lattice軌跡碰撞檢測_王不二的路-CSDN博客_apollo 碰撞檢測

    ?社群分享內(nèi)容 | Lattice Planner規(guī)劃算法

    Apollo規(guī)劃代碼ros移植-Lattice規(guī)劃框架_夏融化了這季節(jié)的博客-CSDN博客

    Apollo規(guī)劃代碼ros移植-Lattcie的二次規(guī)劃_夏融化了這季節(jié)的博客-CSDN博客

    Lattice Planner規(guī)劃算法原理 - 知乎

    狀態(tài)空間lattice算法梳理(按執(zhí)行邏輯) - 知乎

    ?Lattice規(guī)劃與Matlab實(shí)現(xiàn)(1) - 知乎

    關(guān)于多項(xiàng)式的理解:

    Lattice Planner-Matlab - 知乎

    關(guān)于五次多項(xiàng)式:還有很多疑問,對多項(xiàng)式的理解?

    軌跡優(yōu)化 | Minimum-jerk - 知乎(以及高飛的課程)

    自動駕駛決策規(guī)劃算法第一章第一節(jié) 細(xì)說五次多項(xiàng)式_嗶哩嗶哩_bilibili

    五次多項(xiàng)式軌跡(matlab) - 知乎

    MATLAB中的支持

    Lattice Planner-Matlab - 知乎

    Highway Trajectory Planning Using Frenet Reference Path- MATLAB & Simulink- MathWorks 中國

    總結(jié)

    以上是生活随笔為你收集整理的Apollo_Lattice palnner的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    国产精品久久久久久吹潮天美传媒 | 久久黄色影院 | 欧美国产一区二区 | 丁香婷婷综合激情五月色 | 日日爽夜夜操 | 五月天激情综合 | 玖玖在线播放 | 97色视频在线 | 久久精品视频在线看 | 国产亚洲免费观看 | 国产精品欧美久久久久无广告 | 97色视频在线 | 欧美一性一交一乱 | 丁香六月av | 又黄又刺激 | 成 人 黄 色 视频免费播放 | 精品日韩视频 | 夜夜躁狠狠躁日日躁视频黑人 | 亚洲欧洲成人精品av97 | 色91在线 | 岛国大片免费视频 | 久久草网| 色www精品视频在线观看 | 成人黄色av网站 | 久久手机免费视频 | 97成人精品视频在线观看 | 免费精品视频在线观看 | 999视频网站| 久久国产区| 色婷久久 | 亚洲一一在线 | 在线观看亚洲精品视频 | 午夜久久久影院 | 亚洲欧美激情精品一区二区 | 999热视频| 狠狠色丁香久久婷婷综合丁香 | 欧美 激情 国产 91 在线 | 精品色综合 | 国产美女黄网站免费 | 亚洲在线网址 | 一级α片免费看 | 涩涩网站在线 | 亚洲精品白浆高清久久久久久 | 欧美视频99 | 久久久婷 | 精品人妖videos欧美人妖 | 在线播放亚洲激情 | 久草在线观看视频免费 | 亚洲电影图片小说 | 欧美日韩在线视频观看 | 亚洲国产精品va在线看黑人动漫 | 高清久久久 | 天天草天天干天天 | 在线观看v片 | 六月色丁 | 日韩成人在线免费观看 | www.五月婷婷 | 久久综合婷婷国产二区高清 | 成年人免费在线观看网站 | 国产精品美女久久久久久久久 | 日韩大片在线播放 | 免费成人在线视频网站 | 精品99久久久久久 | 2023av| 天天射一射| 日韩精品免费专区 | 久久精品一区 | 99精品欧美一区二区蜜桃免费 | 成年人在线免费看视频 | 欧美日韩在线播放一区 | 91传媒视频在线观看 | 日韩丝袜在线观看 | 香蕉在线观看 | 日日干美女 | 狠狠干狠狠久久 | 国产精品毛片久久久久久久 | 亚洲天堂网站 | 成年人在线观看免费视频 | 91成人免费观看视频 | 久草精品资源 | 五月婷婷av在线 | 日韩二区三区在线 | 很黄很色很污的网站 | 亚洲 欧美日韩 国产 中文 | 欧美精品在线视频 | 精品免费久久久久久 | 五月婷婷一区二区三区 | 欧美在线视频第一页 | 久久久免费高清视频 | 久久精品一区二区三区国产主播 | 亚洲精品在线一区二区三区 | 久久中文字幕导航 | 91亚洲精品国偷拍自产在线观看 | 在线中文字幕网站 | 国产色妞影院wwwxxx | 欧美福利网址 | 国产精品免费久久 | 超碰人在线 | 在线观看视频h | 婷婷视频在线播放 | 97超碰资源站 | 亚洲国产小视频在线观看 | 天天干,天天射,天天操,天天摸 | 久久久久久高潮国产精品视 | 欧美一区二区三区特黄 | 九九综合在线 | 精品亚洲va在线va天堂资源站 | 国产九九热视频 | 免费视频二区 | 天天色综合久久 | 97在线影视 | 日韩精品欧美视频 | 黄色一级大片在线免费看产 | 久草视频在线免费播放 | 午夜精品视频在线 | 国产不卡片 | 久久成人毛片 | 亚洲国产日本 | 国产精品久久网站 | www.午夜视频 | 欧美日韩一区二区免费在线观看 | 日韩一区二区三区在线观看 | 成人av在线看 | 久久免费看 | 国产视频久久 | 国产成人av一区二区三区在线观看 | 久久久久久片 | 亚洲乱码在线 | 黄色一级免费 | 综合成人在线 | 99热99| 久久综合成人 | 久久男人视频 | 亚洲视频大全 | 免费看色的网站 | 久操视频在线播放 | 亚洲成人av片在线观看 | 国产精品久久久久久久久久久久久久 | 久久久久久亚洲精品 | 欧美成人黄 | 亚洲视频久久久 | 国产精品18久久久久久久久久久久 | 视频 天天草 | 国产女v资源在线观看 | 久久人人爽人人人人片 | 在线中文字幕观看 | av日韩精品 | 色婷婷综合视频在线观看 | 久久久精品高清 | 日韩成人av在线 | 久久综合欧美 | 欧美另类高清 | 在线免费观看国产视频 | 在线免费中文字幕 | 亚洲精品国产片 | 国产精品99久久久久人中文网介绍 | 又爽又黄又无遮挡网站动态图 | 国偷自产中文字幕亚洲手机在线 | 天操夜夜操 | 日本视频高清 | 亚洲精品在线观看av | 国产日韩视频在线观看 | 激情www| 国产精品一区二区三区电影 | 四虎www | 九九热久久免费视频 | 成人免费视频网站在线观看 | 91高清一区| 婷婷中文字幕在线观看 | 免费观看一级成人毛片 | 久久精品婷婷 | 蜜臀久久99静品久久久久久 | 成人国产精品 | 五月天综合在线 | 日韩免| 久久综合九色九九 | 国产二区视频在线 | 91亚洲精品久久久蜜桃网站 | 91视频麻豆视频 | 一区二区三区免费在线观看视频 | 91一区二区三区在线观看 | 久久 一区 | 4438全国亚洲精品观看视频 | 亚洲在线成人精品 | 久久99深爱久久99精品 | 日韩美av在线 | 成人精品一区二区三区电影免费 | 国产福利av | 天天爱天天草 | 在线国产视频一区 | 精品国产久 | 天天色天天操综合网 | 在线观看91精品视频 | 欧美少妇xxxxxx| 91在线影视 | 亚洲区视频在线 | 制服丝袜天堂 | 久久九九免费视频 | 中文字幕精品三级久久久 | 久久激情片 | 午夜精品成人一区二区三区 | 天天草综合网 | 久久久黄色免费网站 | 久久一区91 | 婷婷网在线 | 伊人色综合久久天天网 | av免费看av | 欧美一区二区三区在线看 | 国产精品乱码久久 | 亚洲免费婷婷 | 在线欧美中文字幕 | 美女视频永久黄网站免费观看国产 | 99精品免费在线观看 | 三上悠亚一区二区在线观看 | 久草在线免费资源 | 日韩一区二区三区视频在线 | 人人射网站| 久久久久久久久久久久久9999 | 亚洲撸撸 | 在线观看黄网 | 欧美激情精品一区 | 99久久精品国产一区二区成人 | 久草在线最新视频 | 青青河边草免费直播 | 天天操天天干天天玩 | 亚洲va天堂va欧美ⅴa在线 | 久久99精品国产91久久来源 | 久久视频免费观看 | 五月婷婷一区二区三区 | 91秒拍国产福利一区 | 国产三级在线播放 | 91亚洲精品国产 | 丁香花五月| 人人干人人上 | 黄色一级免费 | 国产91粉嫩白浆在线观看 | 欧美伦理一区 | h久久| 国产在线观看午夜 | 国产精品久久久久高潮 | 久久精品直播 | 麻豆视频国产 | 九九九九九九精品 | 成人黄色在线 | 91香蕉视频 | 97成人免费视频 | 四川妇女搡bbbb搡bbbb搡 | 99在线精品免费视频九九视 | 成人日批视频 | 国产精品欧美日韩在线观看 | 国产精品自产拍在线观看网站 | 玖玖国产精品视频 | 国产在线视频导航 | 九九欧美 | 91伊人久久大香线蕉蜜芽人口 | 久久久久久国产精品免费 | 久久成人精品电影 | 久久国产欧美日韩精品 | 夜夜操天天操 | 久久久精品亚洲 | av 一区二区三区四区 | 久久深夜福利免费观看 | 亚洲另类交 | 日韩欧美一区二区三区视频 | 日韩欧美aaa | 成人在线免费观看视视频 | 久久爽久久爽久久av东京爽 | 丁香婷婷久久久综合精品国产 | 99久久精品国产系列 | 啪啪免费视频网站 | 97超碰人人 | www黄色大片 | 国产理论在线 | 国产综合福利在线 | 狠狠躁夜夜躁人人爽视频 | 亚州精品一二三区 | 欧美日本中文字幕 | 久久理论影院 | 国产一级不卡毛片 | 看片网站黄 | 久草在线视频在线 | www.精选视频.com | 在线a亚洲视频播放在线观看 | 狠狠色综合欧美激情 | 91在线视频免费91 | 天天操狠狠操网站 | 国产精品久久电影观看 | www成人av | 成年人在线看片 | 亚洲精品系列 | 成+人+色综合 | 97看片| 国产精品第10页 | 国产美女网站视频 | 国色天香在线观看 | 青草视频在线看 | 久久经典视频 | 亚洲成人黄 | 97日日碰人人模人人澡分享吧 | 亚洲国内精品 | 亚洲理论电影 | japanese黑人亚洲人4k | 亚洲天天综合网 | 欧美狠狠操 | 久草在线免费电影 | 在线精品视频免费播放 | 日本最新一区二区三区 | 欧美俄罗斯性视频 | 久久久精品成人 | 亚洲精品在线一区二区 | 免费看三片| 久久这里只有精品视频首页 | 国产成人久久精品 | 日韩免费视频观看 | 国产精品粉嫩 | 亚洲激情五月 | 最近免费观看的电影完整版 | 国产99久久久国产精品免费看 | 在线观看视频一区二区三区 | 四虎影视精品永久在线观看 | 麻豆视频在线播放 | 久久免费成人 | avav99| 手机看片午夜 | 欧美精品一区二区在线观看 | 天天天天爱天天躁 | 色婷婷成人 | 91禁在线观看| 91精品啪在线观看国产81旧版 | av在线免费观看网站 | 国产精品国产毛片 | 高潮久久久 | 久久精品爱视频 | 欧美极品一区二区三区 | av免费在线免费观看 | 成人国产精品久久久久久亚洲 | 国产成人av一区二区三区在线观看 | 99久久夜色精品国产亚洲 | 久久午夜影视 | 久久久久久久久久亚洲精品 | 亚洲午夜久久久久久久久电影网 | 亚洲九九爱 | 欧美成人猛片 | avcom在线| 久久久久电影网站 | 午夜精品一区二区三区在线观看 | 日本韩国欧美在线观看 | 国产一区二区电影在线观看 | 999久久| 日韩免费电影网站 | 久久婷五月 | 激情小说网站亚洲综合网 | 色综合久久综合中文综合网 | 国产精选在线 | 四季av综合网站 | 亚洲欧洲日韩 | 久久爱综合 | 91av99| 国产高清免费在线播放 | 色综合久久久久综合 | 少妇激情久久 | 黄色性av | 亚洲在线精品视频 | 99久精品 | 美女久久久久久久 | 国产高清不卡一区二区三区 | 九九九九九九精品 | 欧美在线观看视频 | 欧美色伊人 | 激情久久网 | 久久久精品 一区二区三区 国产99视频在线观看 | 国产一级二级三级视频 | 麻豆视传媒官网免费观看 | 色久天| 国产精品毛片完整版 | 婷婷在线视频 | 婷婷色伊人| 久久任你操 | 久久久久免费精品视频 | 97碰碰视频 | 夜夜夜草| 欧美 另类 交 | 在线视频 成人 | 亚洲一级二级三级 | 人人超碰免费 | 亚洲免费在线观看视频 | 51久久夜色精品国产麻豆 | 欧美日韩在线看 | 久久精品在线免费观看 | 国内精品久久久久影院优 | 国产一区二区不卡在线 | 在线免费日韩 | 久久久久久久久久久免费视频 | 国产乱老熟视频网88av | 中文字幕亚洲精品日韩 | 久久激情视频 | 色视频网站在线 | 色欧美成人精品a∨在线观看 | 亚洲电影av在线 | 99久久成人 | 国产一在线精品一区在线观看 | 国产高清视频免费最新在线 | 亚洲人成人在线 | 在线观看亚洲国产 | 国产日韩精品久久 | 久久亚洲日本 | 97成人精品视频在线播放 | 久久99精品热在线观看 | 欧美日韩精品影院 | 特黄特黄的视频 | 国产看片 色 | 欧美性久久久 | av综合 日韩| 青青草国产在线 | 午夜91在线 | 二区三区中文字幕 | 日韩免费观看视频 | 国产亚洲一级高清 | 成人h在线播放 | 激情网第四色 | 激情网五月天 | 国产一区在线播放 | 国产精品久久久久久久免费大片 | 三级av在线播放 | 色在线网站 | h文在线观看免费 | 国产精品九九久久久久久久 | 伊人久久在线观看 | 青青久草在线视频 | 中文字幕第一页在线视频 | av电影中文 | 91视频在线观看大全 | 久久久久久久久久久成人 | 成人av在线直播 | 中文字幕文字幕一区二区 | 人人看人人 | 在线播放一区二区三区 | 午夜国产一区二区三区四区 | 玖玖玖影院 | 欧美专区日韩专区 | 91精品成人久久 | 国产成人免费网站 | 日韩黄色在线观看 | 亚洲乱码久久 | 亚洲视频2| 福利电影久久 | av网站在线观看免费 | 成人亚洲网 | 日韩精品一区二区在线 | 国产手机在线观看视频 | 久久久久免费网站 | 久久综合9988久久爱 | 97在线观看视频国产 | 国产在线视频一区二区 | 又黄又爽又色无遮挡免费 | 久久夜av| 91视频在线播放视频 | 黄色网www | 91麻豆精品国产自产在线 | 亚洲精品综合久久 | 精品国产理论片 | 亚洲欧美久久 | 91在线观看视频 | 96精品视频| 97偷拍视频 | 午夜精品成人一区二区三区 | 91麻豆国产福利在线观看 | 国产精品av免费 | 色99视频| 久久久蜜桃一区二区 | 日韩精品一区二区三区丰满 | 欧美成亚洲 | 超碰人人在线观看 | 福利视频网址 | 亚洲欧美日本一区二区三区 | 亚洲精品在线观看不卡 | 亚州精品天堂中文字幕 | 激情在线免费视频 | 99久热精品 | 国产麻豆精品在线观看 | 欧美日韩二区在线 | 在线观看免费视频 | 黄色美女免费网站 | 国产精品女同一区二区三区久久夜 | 久久男人免费视频 | 国产天天综合 | 在线亚洲成人 | 成人高清在线观看 | 日韩电影久久久 | 麻豆91在线播放 | 久久精品网站视频 | 国产在线观看 | 美女在线国产 | 国产一区二区免费 | 午夜视频免费在线观看 | 在线观看日韩中文字幕 | 亚洲精品小区久久久久久 | 天堂视频中文在线 | 日韩精品一区二区三区在线播放 | 国产小视频福利在线 | 黄色免费在线看 | 天天天操操操 | 99在线高清视频在线播放 | 亚洲午夜久久久久久久久 | 99精品视频网站 | 毛片视频网址 | 毛片网站观看 | 97超碰福利久久精品 | www.黄色在线 | 国产精品九九九 | 久久精品久久精品久久精品 | 99精品国产兔费观看久久99 | 国产亚洲观看 | 国产精品乱码在线 | 五月婷婷导航 | 中文在线8资源库 | 国产黄色精品视频 | 日韩视频在线观看视频 | 欧洲亚洲女同hd | 日韩免费看视频 | 日日爽夜夜操 | 欧美一区免费在线观看 | 日韩高清二区 | 国产99久久九九精品 | av三级在线看 | 特黄特黄的视频 | 超碰人人草 | 超碰av在线免费观看 | 日韩在线免费播放 | 欧美国产日韩一区二区三区 | 久久99国产视频 | 免费看十八岁美女 | 深爱婷婷网 | 69久久久| 欧美综合色在线图区 | 天天艹天天干天天 | 99国产情侣在线播放 | 免费在线观看日韩 | 日日天天av | a极黄色片 | www操操 | 免费看三级网站 | 欧美日bb | 免费三级在线 | av高清免费在线 | 国产精品高潮久久av | 亚洲理论在线 | 91在线免费观看网站 | 国产视频不卡一区 | 一区二区三区免费在线观看视频 | 国产精品视频永久免费播放 | 免费视频91 | 日韩欧美网址 | 婷婷色在线观看 | 亚洲精品伦理在线 | 国产一级一片免费播放放a 一区二区三区国产欧美 | 蜜桃视频精品 | 日韩视频一区二区三区在线播放免费观看 | 亚洲永久字幕 | 久久超| 日本视频久久久 | 久久这里只有精品23 | 天天操天天操天天操天天操天天操天天操 | 91视频在线观看大全 | 久久久久久久久久久免费 | 免费看黄电影 | av看片网 | 成人av电影免费在线观看 | 免费在线观看午夜视频 | 天天操夜夜逼 | 国产亚洲一区 | 在线观看国产福利片 | 国产美女视频黄a视频免费 久久综合九色欧美综合狠狠 | 欧美专区日韩专区 | 亚洲一片黄 | 少妇搡bbbb搡bbb搡aa | 欧美美女一级片 | 91理论电影 | 亚洲精品五月 | 夜夜视频欧洲 | 国产一级片免费视频 | 日韩r级电影在线观看 | 蜜桃视频在线视频 | 91精品第一页 | 精品黄色片 | 成 人 黄 色 视频免费播放 | 免费在线观看一区 | 五月天色婷婷丁香 | 欧美va天堂va视频va在线 | 一区在线观看视频 | 91精品国产麻豆国产自产影视 | 国产精品视频永久免费播放 | 一区在线观看视频 | 亚洲精品久久久久58 | 成人午夜电影在线观看 | 日韩系列在线 | 国产精品网址在线观看 | 精品久久久久国产免费第一页 | 91视频久久久 | 91精品久久久久久综合乱菊 | 又黄又爽的视频在线观看网站 | 日韩色区 | 欧美极品xxxxx | 久久国产精品一区二区三区四区 | 欧美专区日韩专区 | 色综合天天 | 免费日韩 精品中文字幕视频在线 | 亚洲高清激情 | 91麻豆免费看 | 九九天堂| 成人久久网 | 色多多污污 | 少妇做爰k8经典 | 欧美日韩精品免费观看 | 日本久久久久久 | 国产美女网站视频 | 色偷偷人人澡久久超碰69 | 超碰在线最新地址 | 国产少妇在线观看 | japanesexxxxfreehd乱熟| 日韩一二三区不卡 | 国产精品地址 | 天天综合网在线观看 | 天天干天天草天天爽 | 国产精品扒开做爽爽的视频 | 91 在线视频播放 | 亚洲高清视频在线观看 | 91免费版在线观看 | 中文字幕日本在线 | 成人免费视频网址 | 国产三级香港三韩国三级 | 999久久久免费精品国产 | 日韩免费av在线 | 久久草| 一区二区电影网 | 免费在线视频一区二区 | 久久久久欠精品国产毛片国产毛生 | 免费在线观看视频一区 | 国产福利免费在线观看 | 国精产品永久999 | 国产精品女同一区二区三区久久夜 | www激情久久 | 亚洲国产精品女人久久久 | 亚洲国产中文字幕 | 免费日韩av片 | 国产成人av网| 在线观看av小说 | 欧美日韩国产亚洲乱码字幕 | 正在播放一区 | 久久精品中文字幕免费mv | 亚洲久草网 | 免费看的黄色网 | 岛国精品一区二区 | 日韩精品在线观看av | 欧美一二区在线 | 超碰在线免费福利 | 狠狠色伊人亚洲综合网站野外 | 免费国产在线精品 | 精品中文字幕视频 | 国产黄色网 | 精品久久久久久综合日本 | 日韩欧美电影在线观看 | 在线免费观看国产 | 久99久视频 | av网站大全免费 | 久久免费视频2 | 国产精品成久久久久三级 | 久久精品精品电影网 | 91大神精品视频在线观看 | 国产成人无码AⅤ片在线观 日韩av不卡在线 | 亚洲国产美女久久久久 | 亚洲精品中文在线资源 | 亚洲国产精品视频在线观看 | 亚洲精品乱码久久久久久 | 国产九九在线 | 国产一区不卡在线 | 成人四虎| 国产精品欧美久久久久无广告 | 狠狠狠色丁香综合久久天下网 | 久久精品www人人爽人人 | 亚洲91中文字幕无线码三区 | 国产精品av久久久久久无 | 日韩v在线91成人自拍 | 免费看网站在线 | 在线观看视频黄 | 最新中文在线视频 | 国产精品第一页在线观看 | 精品uu | 天天干天天操av | 亚洲经典中文字幕 | 波多野结衣在线中文字幕 | 视频福利在线观看 | 四虎永久视频 | 五月婷婷综合激情网 | 国产 一区二区三区 在线 | av大全在线观看 | 激情丁香5月| 国产亚洲欧美在线视频 | 成人一级在线 | 亚洲91精品在线观看 | 黄毛片在线观看 | 在线国产一区二区 | 中日韩在线视频 | 日韩字幕 | 免费看短 | 三级黄色网络 | 亚洲婷婷网| 成人av.com | 国产中文a | 国产美腿白丝袜足在线av | 日韩高清精品免费观看 | 中文字幕中文中文字幕 | 中文在线a在线 | 欧美日韩不卡在线观看 | 国产69精品久久久久久 | 久久国产精彩视频 | 久久这里只有精品久久 | 91久久久国产精品 | 国产精品毛片完整版 | 手机av电影在线 | 久草在线最新视频 | 国产裸体无遮挡 | 午夜视频久久久 | av线上免费观看 | 97电院网手机版 | 欧美天天综合 | 日本女人b | 久久综合成人网 | h视频日本| 伊人一级 | 97超碰人人澡人人爱学生 | 97超级碰碰碰碰久久久久 | 视频在线观看国产 | 国内精品久久久久 | 国产日韩中文字幕在线 | 欧美性生活一级片 | 99久久精品国产毛片 | 天天操人| 久久成人毛片 | 精品99免费视频 | 国产精久久久 | 夜色成人av | 天天操福利视频 | 日本少妇久久久 | 欧美性久久久久久 | 99爱这里只有精品 | 九九电影在线 | 欧美日韩国产综合一区二区 | 亚洲日本在线一区 | 免费黄在线观看 | 亚洲精品影视 | 国产精品日韩高清 | 日韩色视频在线观看 | 国产一区视频导航 | 激情综合色综合久久综合 | 日韩在线观看高清 | 亚洲精品国产品国语在线 | 精品一二区 | 91欧美视频网站 | 精品亚洲视频在线观看 | 特级毛片在线观看 | 日韩 在线观看 | www在线免费观看 | 国产成人一区二区三区电影 | 婷婷开心久久网 | 成年人电影免费看 | 亚洲va欧美va人人爽春色影视 | 玖操 | 久草久草视频 | 91精品久| 美女黄网久久 | 中文字幕成人在线观看 | 精品亚洲男同gayvideo网站 | 最新真实国产在线视频 | 久久伊人五月天 | 国产精品一区免费在线观看 | 欧美大香线蕉线伊人久久 | 久草网在线 | 天天操比 | 91九色国产视频 | 激情偷乱人伦小说视频在线观看 | 亚洲砖区区免费 | 天天人人综合 | 一区二区三区在线观看免费 | 成人久久18免费网站麻豆 | 五月婷社区 | 中文字幕最新精品 | 国产黄在线免费观看 | 韩国av一区二区三区在线观看 | 精品在线不卡 | 97在线精品视频 | 黄色在线观看免费 | 亚洲精品国产精品99久久 | 国产在线免费观看 | 国产精品毛片一区二区在线看 | 狠狠干网址 | 国产成人免费av电影 | 91精品网站| 一本色道久久综合亚洲二区三区 | 国产精品露脸在线 | 日批视频在线播放 | 欧美成人猛片 | 伊人久久精品久久亚洲一区 | 亚洲成a人片在线观看中文 中文字幕在线视频第一页 狠狠色丁香婷婷综合 | www黄色| 91久久黄色| 成人午夜性影院 | 久久a久久 | 日本一区二区免费在线观看 | 久久精品福利 | 玖玖精品视频 | 在线免费观看黄色小说 | 天天爱天天操天天射 | 国产精品久久电影网 | 中文字幕在线视频国产 | 国产亚洲视频在线免费观看 | 国产精品成人一区二区 | 看黄色.com| 99九九热只有国产精品 | 婷婷免费视频 | 一区二区三区精品久久久 | 最近中文字幕免费av | av片中文字幕 | 91最新视频在线观看 | 精品96久久久久久中文字幕无 | www.天天干 | 成人黄色免费观看 | 在线免费观看的av网站 | 婷婷色综合 | 中国精品少妇 | 国产不卡网站 | 久久久国产99久久国产一 | 91视频在线观看大全 | 国产欧美高清 | 久久久久网址 | 99在线视频精品 | 久久久久亚洲精品国产 | 免费看三级黄色片 | 97免费在线观看视频 | 中文字幕一区在线 | 国产精品美乳一区二区免费 | 在线成人免费电影 | 玖玖爱国产在线 | 亚洲 欧美 成人 | 亚洲乱码久久 | 日本护士三级少妇三级999 | 久草免费资源 | 国产欧美在线一区二区三区 | 精品极品在线 | 欧美,日韩 | www.av在线播放 | 国产精品美女久久 | 日韩在线观看视频免费 | 精品综合久久久 | 五月开心激情网 | 99草在线视频 | 亚洲激情在线观看 | 日韩欧美一区二区三区免费观看 | 亚洲精品www久久久 www国产精品com | 国产人成一区二区三区影院 | 人人澡av| 成人免费在线视频 | 91在线视频观看免费 | 日日爱av | 在线观看黄网站 | 免费观看9x视频网站在线观看 | 国产一级不卡毛片 | 综合网伊人 | av黄色在线观看 | 日本视频网 | 永久免费看av | 日韩免费小视频 | 欧美最新另类人妖 | 天天操天天色天天射 | 欧美日韩二三区 | 天天亚洲 | 国产成人a亚洲精品 | 久草视频精品 | 久久精品久久久久久久 | 午夜精品影院 | 久久99国产精品自在自在app | 亚洲精品一区二区18漫画 | 久草99| 在线观看免费中文字幕 | 天天操天天射天天添 | www.国产在线观看 | 国产一二三在线视频 | 国产伦精品一区二区三区在线 | 久久综合影视 | 91精品国产99久久久久久红楼 | 黄色软件在线观看免费 | 亚洲特级片| 天堂激情网 | 亚洲国产精品资源 | 人人爽人人看 | 91在线看网站 | 色夜视频| 国产亚洲精品久久久久久无几年桃 | 色婷婷免费视频 | 成人av教育 | www久久99| 中文不卡视频 | 超碰电影在线观看 | 黄色毛片一级 | av免费电影网站 | 免费av观看| 亚洲一级影院 | 欧美大片第1页 | 黄色免费观看网址 | 午夜av激情 | 亚洲国产片 | 国产精在线 | 激情视频综合网 | 午夜免费电影院 | 亚洲高清视频在线观看免费 | 欧美另类sm图片 | 岛国片在线| 91mv.cool在线观看 | 日本xxxx裸体xxxx17 | 精品视频免费久久久看 | 久久69av| 国内精品久久久久久久久久久久 | 日韩在线观看你懂的 | 免费日韩一区二区 | 成年人在线播放视频 | 久99久中文字幕在线 | 国产日产精品一区二区三区四区 | 成人国产精品一区二区 | 超碰在线免费97 | 色综合五月 | 久草国产精品 | 国产一级二级在线 | 国产一级大片免费看 | 国产精品不卡在线 | 久久另类视频 | 色综合天天综合 | 精品一区电影 | 日韩中文在线视频 | 久久精品电影院 | 在线综合 亚洲 欧美在线视频 | 少妇bbw搡bbbb搡bbb | 少妇精69xxtheporn | 亚洲精选在线观看 | 久久涩涩网站 | 在线观看激情av | 欧美国产一区二区 | 韩国av电影网 | 午夜精品视频一区 | 91免费视频国产 | 日韩精品久久一区二区三区 | 热99在线视频 | 亚洲综合黄色 | 久久免费在线视频 | 天堂网一区二区 | 人人看人人草 | 天天伊人狠狠 | 精品一区二区影视 | 天天干天天拍天天操天天拍 | 丁香狠狠| 玖玖视频免费在线 | 婷婷四房综合激情五月 | 夜夜躁狠狠躁日日躁视频黑人 | 国产一二区在线观看 | 伊人色**天天综合婷婷 | 蜜臀aⅴ国产精品久久久国产 | 日本中文字幕一二区观 | 日韩最新在线视频 | 久久视频二区 | 久久不卡国产精品一区二区 | 伊人狠狠色丁香婷婷综合 | 天天躁日日躁狠狠躁 | 久久看片 | 色婷婷一区 | 亚洲精品在线免费观看视频 | 国产 日韩 欧美 中文 在线播放 | 亚洲精品乱码久久久久久久久久 | 中文字幕电影在线 | 手机成人免费视频 | 国产婷婷在线观看 | 亚洲视频在线免费观看 | 久久九九影视网 | 五月婷婷深开心 | 九九av | 在线看黄网站 | 亚洲日本国产精品 | 中文字幕在线免费观看 | 亚洲涩涩一区 | 欧美日韩国产在线精品 | 天堂久久电影网 | 成年人免费在线观看 | 成人欧美在线 | 国产免费专区 | 成人性生交大片免费观看网站 | 一本—道久久a久久精品蜜桃 | 久久新视频 | a√资源在线| 日韩免费电影 | 免费av大片 |