ros版本apollo7.0.0规划控制算法

apollo.ros-7.0.0

上次给大家带来了之前学习apollo时开发的内容apollo.ros-1.0.0apollo.ros-3.0.0,主要是针对apollo 1.0.0和3.0.0版本进行了ros1下的移植和规划控制算法的学习。本次在之前工作的基础上,针对apollo 7.0.0版本,进行了ros1下的移植更新,针对apollo原有方案初学者难入门,测试操作不便等问题,能很好进行相关算法学习和测试,并可以将自己的算法增加到框架中,应用于机器人或者无人驾驶中。

项目开发详细了解可在评论区留言。

基于ros1的 apollo 7.0.0规划控制算法

版本差异

版本 说明 主要算法
apollo.ros-1.0.0 实现录制轨迹跟踪功能 PID + LQR
apollo.ros-3.0.0 基于高精度地图,引入交通规则决策,实现车道巡航、变道等功能 A* + em_planner + lattice_planner + PID + LQR + MPC
apollo.ros-7.0.0 基于高精度地图,引入场景决策,实现车道巡航、变道、泊车等功能 A* + public_road_planner + lattice_planner + open_space_planner + PID + LQR + MPC

简介

此项目为基于ros1apollo7.0.0规划控制算法,移植主要目的如下:

  • 学习apollo框架设计
  • 学习apollo中的运动控制算法
  • 学习apollo中的决策规划算法

目前只针对apollo中部分模块进行了移植,移植模块有:

.
├── docker
│   ├── build
│   └── scripts
├── images
├── LICENSE
├── modules
│   ├── apollo_common
│   ├── apollo_control
│   ├── apollo_map
│   ├── apollo_msgs
│   ├── apollo_planning
│   ├── apollo_routing
│   └── apollo_simulator
└── README.md

目前移植版本能实现车辆在高精度地图下进行routingplanningcontrol仿真测试,与原有版本改动点如下:

  • 使用原生ros(基于noetic)替代apollo中的CyberRT
  • 使用ros pkg封装apollo中的module
  • 使用cmake进行编译
  • protobuff版本提升到3.6.1
  • 增加sim_controlsim_pnc仿真工具包apollo_simulator
  • 增加高精度地图rviz显示
  • 增加动/静态障碍物rviz设置
  • 更多的高精度地图测试数据

代码部署

docker安装

  • 在线安装

    curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
    
  • 安装验证:安装完成执行 sudo docker version看看docker目前安装的版本等信息:
    在这里插入图片描述

  • 使用配置:避免每次新开一个终端都要sudo输入权限,给docker增加用户的权限。执行完成后重启电脑之后生效

    sudo usermod -aG docker $USER
    

镜像构建

  • 执行一下指令进行镜像构建

    cd apollo.ros-7.0.0/docker/build/ # 进入镜像构建目录
    ./build_docker.sh  								# 开始构建镜像
    
  • 镜像构建成功后,显示如下图所示:
    在这里插入图片描述

代码编译

  • 解压项目代码到对应目录,假设代码主目录名为apollo.ros-7.0.0,其目录结构如下:

       .
      ├── docker
      │   ├── build
      │   │   ├── apollo.ros-7.0.0.dockerfile
      │   │   └── build_docker.sh
      │   └── scripts
      │       ├── docker_into.sh
      │       └── docker_start.sh
      ├── images
      ├── LICENSE
      ├── modules
      │   ├── apollo_common
      │   │   ├── CMakeLists.txt
      │   │   ├── conf
      │   │   │   └── vehicle_model_config.pb.txt
      │   │   ├── data
      │   │   │   ├── gem_config.pb.txt
      │   │   │   ├── global_flagfile.txt
      │   │   │   └── vehicle_param.pb.txt
      │   │   ├── include
      │   │   │   └── apollo_common
      │   │   │       ├── adapters
      │   │   │       │   ├── adapter_gflags.h
      │   │   │       │   ├── adapter.h
      │   │   │       │   ├── adapter_manager.h
      │   │   │       │   └── message_adapters.h
      │   │   │       ├── component.h
      │   │   │       ├── configs
      │   │   │       │   ├── config_gflags.h
      │   │   │       │   └── vehicle_config_helper.h
      │   │   │       ├── filters
      │   │   │       │   ├── digital_filter_coefficients.h
      │   │   │       │   ├── digital_filter.h
      │   │   │       │   └── mean_filter.h
      │   │   │       ├── kv_db
      │   │   │       │   └── kv_db.h
      │   │   │       ├── latency_recorder
      │   │   │       │   └── latency_recorder.h
      │   │   │       ├── log.h
      │   │   │       ├── macros.h
      │   │   │       ├── math
      │   │   │       │   ├── aabox2d.h
      │   │   │       │   ├── aaboxkdtree2d.h
      │   │   │       │   ├── angle.h
      │   │   │       │   ├── box2d.h
      │   │   │       │   ├── cartesian_frenet_conversion.h
      │   │   │       │   ├── curve_fitting.h
      │   │   │       │   ├── euler_angles_zxy.h
      │   │   │       │   ├── factorial.h
      │   │   │       │   ├── hermite_spline.h
      │   │   │       │   ├── integral.h
      │   │   │       │   ├── kalman_filter.h
      │   │   │       │   ├── linear_interpolation.h
      │   │   │       │   ├── linear_quadratic_regulator.h
      │   │   │       │   ├── line_segment2d.h
      │   │   │       │   ├── math_utils.h
      │   │   │       │   ├── matrix_operations.h
      │   │   │       │   ├── mpc_osqp.h
      │   │   │       │   ├── path_matcher.h
      │   │   │       │   ├── polygon2d.h
      │   │   │       │   ├── qp_solver
      │   │   │       │   │   └── qp_solver.h
      │   │   │       │   ├── quaternion.h
      │   │   │       │   ├── search.h
      │   │   │       │   ├── sin_table.h
      │   │   │       │   └── vec2d.h
      │   │   │       ├── monitor_log
      │   │   │       │   ├── monitor_log_buffer.h
      │   │   │       │   └── monitor_logger.h
      │   │   │       ├── nlohmann
      │   │   │       │   └── json.hpp
      │   │   │       ├── status
      │   │   │       │   └── status.h
      │   │   │       ├── time
      │   │   │       │   ├── atomic_rw_lock.h
      │   │   │       │   ├── clock.h
      │   │   │       │   ├── duration.h
      │   │   │       │   ├── rw_lock_guard.h
      │   │   │       │   └── time.h
      │   │   │       ├── types.h
      │   │   │       ├── util
      │   │   │       │   ├── color.h
      │   │   │       │   ├── eigen_defs.h
      │   │   │       │   ├── factory.h
      │   │   │       │   ├── file.h
      │   │   │       │   ├── future.h
      │   │   │       │   ├── json_util.h
      │   │   │       │   ├── lru_cache.h
      │   │   │       │   ├── map_util.h
      │   │   │       │   ├── message_util.h
      │   │   │       │   ├── perf_util.h
      │   │   │       │   ├── point_factory.h
      │   │   │       │   ├── points_downsampler.h
      │   │   │       │   ├── string_util.h
      │   │   │       │   ├── time_util.h
      │   │   │       │   └── util.h
      │   │   │       ├── vehicle_model
      │   │   │       │   └── vehicle_model.h
      │   │   │       └── vehicle_state
      │   │   │           └── vehicle_state_provider.h
      │   │   ├── package.xml
      │   │   ├── README_cn.md
      │   │   ├── README.md
      │   │   └── src
      │   │       ├── adapters
      │   │       │   ├── adapter_gflags.cc
      │   │       │   └── adapter_manager.cc
      │   │       ├── component.cc
      │   │       ├── configs
      │   │       │   ├── config_gflags.cc
      │   │       │   └── vehicle_config_helper.cc
      │   │       ├── filters
      │   │       │   ├── digital_filter.cc
      │   │       │   ├── digital_filter_coefficients.cc
      │   │       │   └── mean_filter.cc
      │   │       ├── kv_db
      │   │       │   └── kv_db.cc
      │   │       ├── latency_recorder
      │   │       │   └── latency_recorder.cc
      │   │       ├── math
      │   │       │   ├── aabox2d.cc
      │   │       │   ├── angle.cc
      │   │       │   ├── box2d.cc
      │   │       │   ├── cartesian_frenet_conversion.cc
      │   │       │   ├── integral.cc
      │   │       │   ├── linear_interpolation.cc
      │   │       │   ├── linear_quadratic_regulator.cc
      │   │       │   ├── line_segment2d.cc
      │   │       │   ├── math_utils.cc
      │   │       │   ├── matrix_operations.cc
      │   │       │   ├── mpc_osqp.cc
      │   │       │   ├── path_matcher.cc
      │   │       │   ├── polygon2d.cc
      │   │       │   ├── qp_solver
      │   │       │   │   └── qp_solver.cc
      │   │       │   ├── search.cc
      │   │       │   ├── sin_table.cc
      │   │       │   └── vec2d.cc
      │   │       ├── monitor_log
      │   │       │   ├── monitor_log_buffer.cc
      │   │       │   └── monitor_logger.cc
      │   │       ├── time
      │   │       │   ├── clock.cc
      │   │       │   ├── duration.cc
      │   │       │   └── time.cc
      │   │       ├── util
      │   │       │   ├── file.cc
      │   │       │   ├── json_util.cc
      │   │       │   ├── perf_util.cc
      │   │       │   ├── string_util.cc
      │   │       │   └── util.cc
      │   │       ├── vehicle_model
      │   │       │   └── vehicle_model.cc
      │   │       └── vehicle_state
      │   │           └── vehicle_state_provider.cc
      │   ├── apollo_control
      │   │   ├── CMakeLists.txt
      │   │   ├── conf
      │   │   │   ├── adapter.conf
      │   │   │   ├── calibration_table.pb.txt
      │   │   │   ├── control_common_conf.pb.txt
      │   │   │   ├── control.conf
      │   │   │   ├── control_conf.pb.txt
      │   │   │   ├── lateral_controller_conf.pb.txt
      │   │   │   ├── longitudinal_controller_conf.pb.txt
      │   │   │   ├── mpc_controller_conf.pb.txt
      │   │   │   └── navigation_lincoln.pb.txt
      │   │   ├── include
      │   │   │   └── apollo_control
      │   │   │       ├── common
      │   │   │       │   ├── control_gflags.h
      │   │   │       │   ├── dependency_injector.h
      │   │   │       │   ├── hysteresis_filter.h
      │   │   │       │   ├── interpolation_1d.h
      │   │   │       │   ├── interpolation_2d.h
      │   │   │       │   ├── leadlag_controller.h
      │   │   │       │   ├── mrac_controller.h
      │   │   │       │   ├── pid_BC_controller.h
      │   │   │       │   ├── pid_controller.h
      │   │   │       │   ├── pid_IC_controller.h
      │   │   │       │   └── trajectory_analyzer.h
      │   │   │       ├── control_component.h
      │   │   │       └── controller
      │   │   │           ├── controller_agent.h
      │   │   │           ├── controller.h
      │   │   │           ├── lat_controller.h
      │   │   │           ├── lon_controller.h
      │   │   │           └── mpc_controller.h
      │   │   ├── launch
      │   │   │   └── control.launch
      │   │   ├── package.xml
      │   │   ├── README_cn.md
      │   │   ├── README.md
      │   │   └── src
      │   │       ├── common
      │   │       │   ├── control_gflags.cc
      │   │       │   ├── hysteresis_filter.cc
      │   │       │   ├── interpolation_1d.cc
      │   │       │   ├── interpolation_2d.cc
      │   │       │   ├── leadlag_controller.cc
      │   │       │   ├── mrac_controller.cc
      │   │       │   ├── pid_BC_controller.cc
      │   │       │   ├── pid_controller.cc
      │   │       │   ├── pid_IC_controller.cc
      │   │       │   └── trajectory_analyzer.cc
      │   │       ├── control_component.cc
      │   │       └── controller
      │   │           ├── controller_agent.cc
      │   │           ├── lat_controller.cc
      │   │           ├── lon_controller.cc
      │   │           └── mpc_controller.cc
      │   ├── apollo_map
      │   │   ├── CMakeLists.txt
      │   │   ├── conf
      │   │   │   ├── navigator_config.pb.txt
      │   │   │   ├── relative_map.conf
      │   │   │   └── relative_map_config.pb.txt
      │   │   ├── data
      │   │   ├── include
      │   │   │   └── apollo_map
      │   │   │       ├── hdmap
      │   │   │       │   ├── adapter
      │   │   │       │   │   ├── coordinate_convert_tool.h
      │   │   │       │   │   ├── opendrive_adapter.h
      │   │   │       │   │   ├── proto_organizer.h
      │   │   │       │   │   └── xml_parser
      │   │   │       │   │       ├── common_define.h
      │   │   │       │   │       ├── header_xml_parser.h
      │   │   │       │   │       ├── junctions_xml_parser.h
      │   │   │       │   │       ├── lanes_xml_parser.h
      │   │   │       │   │       ├── objects_xml_parser.h
      │   │   │       │   │       ├── roads_xml_parser.h
      │   │   │       │   │       ├── signals_xml_parser.h
      │   │   │       │   │       ├── status.h
      │   │   │       │   │       └── util_xml_parser.h
      │   │   │       │   ├── hdmap_common.h
      │   │   │       │   ├── hdmap.h
      │   │   │       │   ├── hdmap_impl.h
      │   │   │       │   └── hdmap_util.h
      │   │   │       ├── pnc_map
      │   │   │       │   ├── path.h
      │   │   │       │   ├── pnc_map.h
      │   │   │       │   └── route_segments.h
      │   │   │       └── relative_map
      │   │   │           ├── common
      │   │   │           │   └── relative_map_gflags.h
      │   │   │           ├── navigation_lane.h
      │   │   │           ├── relative_map_component.h
      │   │   │           └── relative_map.h
      │   │   ├── launch
      │   │   │   └── relative_map.launch
      │   │   ├── package.xml
      │   │   ├── README.md
      │   │   └── src
      │   │       ├── hdmap
      │   │       │   ├── adapter
      │   │       │   │   ├── coordinate_convert_tool.cc
      │   │       │   │   ├── opendrive_adapter.cc
      │   │       │   │   ├── proto_organizer.cc
      │   │       │   │   └── xml_parser
      │   │       │   │       ├── header_xml_parser.cc
      │   │       │   │       ├── junctions_xml_parser.cc
      │   │       │   │       ├── lanes_xml_parser.cc
      │   │       │   │       ├── objects_xml_parser.cc
      │   │       │   │       ├── roads_xml_parser.cc
      │   │       │   │       ├── signals_xml_parser.cc
      │   │       │   │       └── util_xml_parser.cc
      │   │       │   ├── hdmap.cc
      │   │       │   ├── hdmap_common.cc
      │   │       │   ├── hdmap_impl.cc
      │   │       │   └── hdmap_util.cc
      │   │       ├── pnc_map
      │   │       │   ├── path.cc
      │   │       │   ├── pnc_map.cc
      │   │       │   └── route_segments.cc
      │   │       └── relative_map
      │   │           ├── common
      │   │           │   └── relative_map_gflags.cc
      │   │           ├── navigation_lane.cc
      │   │           ├── relative_map.cc
      │   │           └── relative_map_component.cc
      │   ├── apollo_msgs
      │   │   ├── CMakeLists.txt
      │   │   ├── include
      │   │   │   └── apollo_msgs
      │   │   │       └── proto
      │   │   ├── package.xml
      │   │   ├── proto
      │   │   └── README.md
      │   ├── apollo_planning
      │   │   ├── CMakeLists.txt
      │   │   ├── conf
      │   │   │   ├── adapter.conf
      │   │   │   ├── discrete_points_smoother_config.pb.txt
      │   │   │   ├── planner_open_space_config.pb.txt
      │   │   │   ├── planning.conf
      │   │   │   ├── planning_config_navi.pb.txt
      │   │   │   ├── planning_config.pb.txt
      │   │   │   ├── planning_navi.conf
      │   │   │   ├── planning_semantic_map_config.pb.txt
      │   │   │   ├── qp_spline_smoother_config.pb.txt
      │   │   │   ├── scenario
      │   │   │   │   ├── bare_intersection_unprotected_config.pb.txt
      │   │   │   │   ├── deadend_turnaround_config.pb.txt
      │   │   │   │   ├── emergency_pull_over_config.pb.txt
      │   │   │   │   ├── emergency_stop_config.pb.txt
      │   │   │   │   ├── lane_follow_config.pb.txt
      │   │   │   │   ├── lane_follow_hybrid_config.pb.txt
      │   │   │   │   ├── learning_model_sample_config.pb.txt
      │   │   │   │   ├── narrow_street_u_turn_config.pb.txt
      │   │   │   │   ├── park_and_go_config.pb.txt
      │   │   │   │   ├── pull_over_config.pb.txt
      │   │   │   │   ├── stop_sign_unprotected_config.pb.txt
      │   │   │   │   ├── traffic_light_protected_config.pb.txt
      │   │   │   │   ├── traffic_light_unprotected_left_turn_config.pb.txt
      │   │   │   │   ├── traffic_light_unprotected_right_turn_config.pb.txt
      │   │   │   │   ├── valet_parking_config.pb.txt
      │   │   │   │   └── yield_sign_config.pb.txt
      │   │   │   ├── spiral_smoother_config.pb.txt
      │   │   │   └── traffic_rule_config.pb.txt
      │   │   ├── data
      │   │   │   └── garage.csv
      │   │   ├── images
      │   │   ├── include
      │   │   │   └── apollo_planning
      │   │   │       ├── common
      │   │   │       │   ├── decision_data.h
      │   │   │       │   ├── dependency_injector.h
      │   │   │       │   ├── ego_info.h
      │   │   │       │   ├── feature_output.h
      │   │   │       │   ├── frame.h
      │   │   │       │   ├── history.h
      │   │   │       │   ├── indexed_list.h
      │   │   │       │   ├── indexed_queue.h
      │   │   │       │   ├── learning_based_data.h
      │   │   │       │   ├── local_view.h
      │   │   │       │   ├── message_process.h
      │   │   │       │   ├── obstacle_blocking_analyzer.h
      │   │   │       │   ├── obstacle.h
      │   │   │       │   ├── open_space_info.h
      │   │   │       │   ├── path
      │   │   │       │   │   ├── discretized_path.h
      │   │   │       │   │   ├── frenet_frame_path.h
      │   │   │       │   │   └── path_data.h
      │   │   │       │   ├── path_boundary.h
      │   │   │       │   ├── path_decision.h
      │   │   │       │   ├── planning_context.h
      │   │   │       │   ├── planning_gflags.h
      │   │   │       │   ├── reference_line_info.h
      │   │   │       │   ├── smoothers
      │   │   │       │   │   └── smoother.h
      │   │   │       │   ├── speed
      │   │   │       │   │   ├── speed_data.h
      │   │   │       │   │   ├── st_boundary.h
      │   │   │       │   │   └── st_point.h
      │   │   │       │   ├── speed_limit.h
      │   │   │       │   ├── speed_profile_generator.h
      │   │   │       │   ├── st_graph_data.h
      │   │   │       │   ├── trajectory
      │   │   │       │   │   ├── discretized_trajectory.h
      │   │   │       │   │   └── publishable_trajectory.h
      │   │   │       │   ├── trajectory1d
      │   │   │       │   │   ├── constant_deceleration_trajectory1d.h
      │   │   │       │   │   ├── constant_jerk_trajectory1d.h
      │   │   │       │   │   ├── piecewise_acceleration_trajectory1d.h
      │   │   │       │   │   ├── piecewise_jerk_trajectory1d.h
      │   │   │       │   │   ├── piecewise_trajectory1d.h
      │   │   │       │   │   └── standing_still_trajectory1d.h
      │   │   │       │   ├── trajectory_evaluator.h
      │   │   │       │   ├── trajectory_stitcher.h
      │   │   │       │   └── util
      │   │   │       │       ├── common.h
      │   │   │       │       ├── math_util.h
      │   │   │       │       └── util.h
      │   │   │       ├── constraint_checker
      │   │   │       │   ├── collision_checker.h
      │   │   │       │   ├── constraint_checker1d.h
      │   │   │       │   └── constraint_checker.h
      │   │   │       ├── lattice
      │   │   │       │   ├── behavior
      │   │   │       │   │   ├── feasible_region.h
      │   │   │       │   │   ├── path_time_graph.h
      │   │   │       │   │   └── prediction_querier.h
      │   │   │       │   └── trajectory_generation
      │   │   │       │       ├── backup_trajectory_generator.h
      │   │   │       │       ├── end_condition_sampler.h
      │   │   │       │       ├── lateral_osqp_optimizer.h
      │   │   │       │       ├── lateral_qp_optimizer.h
      │   │   │       │       ├── lattice_trajectory1d.h
      │   │   │       │       ├── piecewise_braking_trajectory_generator.h
      │   │   │       │       ├── trajectory1d_generator.h
      │   │   │       │       ├── trajectory_combiner.h
      │   │   │       │       └── trajectory_evaluator.h
      │   │   │       ├── math
      │   │   │       │   ├── curve1d
      │   │   │       │   │   ├── cubic_polynomial_curve1d.h
      │   │   │       │   │   ├── curve1d.h
      │   │   │       │   │   ├── piecewise_quintic_spiral_path.h
      │   │   │       │   │   ├── polynomial_curve1d.h
      │   │   │       │   │   ├── quartic_polynomial_curve1d.h
      │   │   │       │   │   ├── quintic_polynomial_curve1d.h
      │   │   │       │   │   ├── quintic_spiral_path.h
      │   │   │       │   │   └── quintic_spiral_path_with_derivation.h
      │   │   │       │   ├── curve_math.h
      │   │   │       │   ├── discrete_points_math.h
      │   │   │       │   ├── discretized_points_smoothing
      │   │   │       │   │   ├── cos_theta_ipopt_interface.h
      │   │   │       │   │   ├── cos_theta_smoother.h
      │   │   │       │   │   ├── fem_pos_deviation_ipopt_interface.h
      │   │   │       │   │   ├── fem_pos_deviation_osqp_interface.h
      │   │   │       │   │   ├── fem_pos_deviation_smoother.h
      │   │   │       │   │   └── fem_pos_deviation_sqp_osqp_interface.h
      │   │   │       │   ├── piecewise_jerk
      │   │   │       │   │   ├── piecewise_jerk_path_problem.h
      │   │   │       │   │   ├── piecewise_jerk_problem.h
      │   │   │       │   │   └── piecewise_jerk_speed_problem.h
      │   │   │       │   ├── polynomial_xd.h
      │   │   │       │   └── smoothing_spline
      │   │   │       │       ├── affine_constraint.h
      │   │   │       │       ├── osqp_spline_1d_solver.h
      │   │   │       │       ├── osqp_spline_2d_solver.h
      │   │   │       │       ├── spline_1d_constraint.h
      │   │   │       │       ├── spline_1d.h
      │   │   │       │       ├── spline_1d_kernel.h
      │   │   │       │       ├── spline_1d_seg.h
      │   │   │       │       ├── spline_1d_solver.h
      │   │   │       │       ├── spline_2d_constraint.h
      │   │   │       │       ├── spline_2d.h
      │   │   │       │       ├── spline_2d_kernel.h
      │   │   │       │       ├── spline_2d_seg.h
      │   │   │       │       ├── spline_2d_solver.h
      │   │   │       │       └── spline_seg_kernel.h
      │   │   │       ├── navi
      │   │   │       │   └── decider
      │   │   │       │       ├── navi_obstacle_decider.h
      │   │   │       │       ├── navi_path_decider.h
      │   │   │       │       ├── navi_speed_decider.h
      │   │   │       │       ├── navi_speed_ts_graph.h
      │   │   │       │       └── navi_task.h
      │   │   │       ├── navi_planning.h
      │   │   │       ├── on_lane_planning.h
      │   │   │       ├── open_space
      │   │   │       │   ├── coarse_trajectory_generator
      │   │   │       │   │   ├── grid_search.h
      │   │   │       │   │   ├── hybrid_a_star.h
      │   │   │       │   │   ├── node3d.h
      │   │   │       │   │   └── reeds_shepp_path.h
      │   │   │       │   └── trajectory_smoother
      │   │   │       │       ├── distance_approach_interface.h
      │   │   │       │       ├── distance_approach_ipopt_fixed_dual_interface.h
      │   │   │       │       ├── distance_approach_ipopt_fixed_ts_interface.h
      │   │   │       │       ├── distance_approach_ipopt_interface.h
      │   │   │       │       ├── distance_approach_ipopt_relax_end_interface.h
      │   │   │       │       ├── distance_approach_ipopt_relax_end_slack_interface.h
      │   │   │       │       ├── distance_approach_problem.h
      │   │   │       │       ├── dual_variable_warm_start_ipopt_interface.h
      │   │   │       │       ├── dual_variable_warm_start_ipopt_qp_interface.h
      │   │   │       │       ├── dual_variable_warm_start_osqp_interface.h
      │   │   │       │       ├── dual_variable_warm_start_problem.h
      │   │   │       │       ├── dual_variable_warm_start_slack_osqp_interface.h
      │   │   │       │       └── iterative_anchoring_smoother.h
      │   │   │       ├── pipeline
      │   │   │       │   ├── evaluator.h
      │   │   │       │   └── evaluator_logger.h
      │   │   │       ├── planner
      │   │   │       │   ├── lattice
      │   │   │       │   │   └── lattice_planner.h
      │   │   │       │   ├── navi
      │   │   │       │   │   └── navi_planner.h
      │   │   │       │   ├── navi_planner_dispatcher.h
      │   │   │       │   ├── on_lane_planner_dispatcher.h
      │   │   │       │   ├── planner_dispatcher.h
      │   │   │       │   ├── planner.h
      │   │   │       │   ├── public_road
      │   │   │       │   │   └── public_road_planner.h
      │   │   │       │   └── rtk
      │   │   │       │       └── rtk_replay_planner.h
      │   │   │       ├── planning_base.h
      │   │   │       ├── planning_component.h
      │   │   │       ├── reference_line
      │   │   │       │   ├── discrete_points_reference_line_smoother.h
      │   │   │       │   ├── qp_spline_reference_line_smoother.h
      │   │   │       │   ├── reference_line.h
      │   │   │       │   ├── reference_line_provider.h
      │   │   │       │   ├── reference_line_smoother.h
      │   │   │       │   ├── reference_point.h
      │   │   │       │   ├── spiral_problem_interface.h
      │   │   │       │   └── spiral_reference_line_smoother.h
      │   │   │       ├── scenarios
      │   │   │       │   ├── bare_intersection
      │   │   │       │   │   └── unprotected
      │   │   │       │   │       ├── bare_intersection_unprotected_scenario.h
      │   │   │       │   │       ├── stage_approach.h
      │   │   │       │   │       └── stage_intersection_cruise.h
      │   │   │       │   ├── common
      │   │   │       │   │   └── stage_intersection_cruise_impl.h
      │   │   │       │   ├── dead_end
      │   │   │       │   │   └── deadend_turnaround
      │   │   │       │   │       ├── deadend_turnaround_scenario.h
      │   │   │       │   │       ├── stage_approaching_turning_point.h
      │   │   │       │   │       └── stage_turning.h
      │   │   │       │   ├── emergency
      │   │   │       │   │   ├── emergency_pull_over
      │   │   │       │   │   │   ├── emergency_pull_over_scenario.h
      │   │   │       │   │   │   ├── stage_approach.h
      │   │   │       │   │   │   ├── stage_slow_down.h
      │   │   │       │   │   │   └── stage_standby.h
      │   │   │       │   │   └── emergency_stop
      │   │   │       │   │       ├── emergency_stop_scenario.h
      │   │   │       │   │       ├── stage_approach.h
      │   │   │       │   │       └── stage_standby.h
      │   │   │       │   ├── lane_follow
      │   │   │       │   │   ├── lane_follow_scenario.h
      │   │   │       │   │   └── lane_follow_stage.h
      │   │   │       │   ├── learning_model
      │   │   │       │   │   ├── learning_model_sample_scenario.h
      │   │   │       │   │   └── stage_run.h
      │   │   │       │   ├── narrow_street_u_turn
      │   │   │       │   │   └── narrow_street_u_turn_scenario.h
      │   │   │       │   ├── park
      │   │   │       │   │   ├── pull_over
      │   │   │       │   │   │   ├── pull_over_scenario.h
      │   │   │       │   │   │   ├── stage_approach.h
      │   │   │       │   │   │   ├── stage_retry_approach_parking.h
      │   │   │       │   │   │   └── stage_retry_parking.h
      │   │   │       │   │   └── valet_parking
      │   │   │       │   │       ├── stage_approaching_parking_spot.h
      │   │   │       │   │       ├── stage_parking.h
      │   │   │       │   │       └── valet_parking_scenario.h
      │   │   │       │   ├── park_and_go
      │   │   │       │   │   ├── park_and_go_scenario.h
      │   │   │       │   │   ├── stage_adjust.h
      │   │   │       │   │   ├── stage_check.h
      │   │   │       │   │   ├── stage_cruise.h
      │   │   │       │   │   └── stage_pre_cruise.h
      │   │   │       │   ├── scenario.h
      │   │   │       │   ├── scenario_manager.h
      │   │   │       │   ├── stage.h
      │   │   │       │   ├── stop_sign
      │   │   │       │   │   └── unprotected
      │   │   │       │   │       ├── stage_creep.h
      │   │   │       │   │       ├── stage_intersection_cruise.h
      │   │   │       │   │       ├── stage_pre_stop.h
      │   │   │       │   │       ├── stage_stop.h
      │   │   │       │   │       └── stop_sign_unprotected_scenario.h
      │   │   │       │   ├── traffic_light
      │   │   │       │   │   ├── protected
      │   │   │       │   │   │   ├── stage_approach.h
      │   │   │       │   │   │   ├── stage_intersection_cruise.h
      │   │   │       │   │   │   └── traffic_light_protected_scenario.h
      │   │   │       │   │   ├── unprotected_left_turn
      │   │   │       │   │   │   ├── stage_approach.h
      │   │   │       │   │   │   ├── stage_creep.h
      │   │   │       │   │   │   ├── stage_intersection_cruise.h
      │   │   │       │   │   │   └── traffic_light_unprotected_left_turn_scenario.h
      │   │   │       │   │   └── unprotected_right_turn
      │   │   │       │   │       ├── stage_creep.h
      │   │   │       │   │       ├── stage_intersection_cruise.h
      │   │   │       │   │       ├── stage_stop.h
      │   │   │       │   │       └── traffic_light_unprotected_right_turn_scenario.h
      │   │   │       │   ├── util
      │   │   │       │   │   └── util.h
      │   │   │       │   └── yield_sign
      │   │   │       │       ├── stage_approach.h
      │   │   │       │       ├── stage_creep.h
      │   │   │       │       └── yield_sign_scenario.h
      │   │   │       ├── tasks
      │   │   │       │   ├── deciders
      │   │   │       │   │   ├── creep_decider
      │   │   │       │   │   │   └── creep_decider.h
      │   │   │       │   │   ├── decider.h
      │   │   │       │   │   ├── lane_change_decider
      │   │   │       │   │   │   └── lane_change_decider.h
      │   │   │       │   │   ├── open_space_decider
      │   │   │       │   │   │   ├── open_space_fallback_decider.h
      │   │   │       │   │   │   ├── open_space_pre_stop_decider.h
      │   │   │       │   │   │   └── open_space_roi_decider.h
      │   │   │       │   │   ├── path_assessment_decider
      │   │   │       │   │   │   └── path_assessment_decider.h
      │   │   │       │   │   ├── path_bounds_decider
      │   │   │       │   │   │   └── path_bounds_decider.h
      │   │   │       │   │   ├── path_decider
      │   │   │       │   │   │   └── path_decider.h
      │   │   │       │   │   ├── path_lane_borrow_decider
      │   │   │       │   │   │   └── path_lane_borrow_decider.h
      │   │   │       │   │   ├── path_reference_decider
      │   │   │       │   │   │   └── path_reference_decider.h
      │   │   │       │   │   ├── path_reuse_decider
      │   │   │       │   │   │   └── path_reuse_decider.h
      │   │   │       │   │   ├── rss_decider
      │   │   │       │   │   │   └── rss_decider.h
      │   │   │       │   │   ├── rule_based_stop_decider
      │   │   │       │   │   │   └── rule_based_stop_decider.h
      │   │   │       │   │   ├── speed_bounds_decider
      │   │   │       │   │   │   ├── speed_bounds_decider.h
      │   │   │       │   │   │   ├── speed_limit_decider.h
      │   │   │       │   │   │   └── st_boundary_mapper.h
      │   │   │       │   │   ├── speed_decider
      │   │   │       │   │   │   └── speed_decider.h
      │   │   │       │   │   ├── st_bounds_decider
      │   │   │       │   │   │   ├── st_bounds_decider.h
      │   │   │       │   │   │   ├── st_driving_limits.h
      │   │   │       │   │   │   ├── st_guide_line.h
      │   │   │       │   │   │   └── st_obstacles_processor.h
      │   │   │       │   │   └── utils
      │   │   │       │   │       └── path_decider_obstacle_utils.h
      │   │   │       │   ├── learning_model
      │   │   │       │   │   ├── learning_model_inference_task.h
      │   │   │       │   │   └── learning_model_inference_trajectory_task.h
      │   │   │       │   ├── optimizers
      │   │   │       │   │   ├── open_space_trajectory_generation
      │   │   │       │   │   │   ├── open_space_trajectory_optimizer.h
      │   │   │       │   │   │   └── open_space_trajectory_provider.h
      │   │   │       │   │   ├── open_space_trajectory_partition
      │   │   │       │   │   │   └── open_space_trajectory_partition.h
      │   │   │       │   │   ├── path_optimizer.h
      │   │   │       │   │   ├── path_time_heuristic
      │   │   │       │   │   │   ├── dp_st_cost.h
      │   │   │       │   │   │   ├── gridded_path_time_graph.h
      │   │   │       │   │   │   ├── path_time_heuristic_optimizer.h
      │   │   │       │   │   │   └── st_graph_point.h
      │   │   │       │   │   ├── piecewise_jerk_path
      │   │   │       │   │   │   ├── piecewise_jerk_path_ipopt_solver.h
      │   │   │       │   │   │   └── piecewise_jerk_path_optimizer.h
      │   │   │       │   │   ├── piecewise_jerk_speed
      │   │   │       │   │   │   ├── piecewise_jerk_speed_nonlinear_ipopt_interface.h
      │   │   │       │   │   │   ├── piecewise_jerk_speed_nonlinear_optimizer.h
      │   │   │       │   │   │   └── piecewise_jerk_speed_optimizer.h
      │   │   │       │   │   ├── road_graph
      │   │   │       │   │   │   ├── comparable_cost.h
      │   │   │       │   │   │   ├── dp_road_graph.h
      │   │   │       │   │   │   ├── trajectory_cost.h
      │   │   │       │   │   │   └── waypoint_sampler.h
      │   │   │       │   │   ├── speed_optimizer.h
      │   │   │       │   │   └── trajectory_optimizer.h
      │   │   │       │   ├── task_factory.h
      │   │   │       │   ├── task.h
      │   │   │       │   └── utils
      │   │   │       │       └── st_gap_estimator.h
      │   │   │       ├── traffic_rules
      │   │   │       │   ├── backside_vehicle.h
      │   │   │       │   ├── crosswalk.h
      │   │   │       │   ├── destination.h
      │   │   │       │   ├── keep_clear.h
      │   │   │       │   ├── reference_line_end.h
      │   │   │       │   ├── rerouting.h
      │   │   │       │   ├── stop_sign.h
      │   │   │       │   ├── traffic_decider.h
      │   │   │       │   ├── traffic_light.h
      │   │   │       │   ├── traffic_rule.h
      │   │   │       │   └── yield_sign.h
      │   │   │       └── tuning
      │   │   │           ├── autotuning_base_model.h
      │   │   │           ├── autotuning_feature_builder.h
      │   │   │           ├── autotuning_mlp_net_model.h
      │   │   │           ├── autotuning_raw_feature_generator.h
      │   │   │           ├── BUILD
      │   │   │           └── speed_model
      │   │   │               ├── autotuning_speed_feature_builder.h
      │   │   │               └── autotuning_speed_mlp_model.h
      │   │   ├── launch
      │   │   │   └── planning.launch
      │   │   ├── package.xml
      │   │   ├── README_cn.md
      │   │   ├── README.md
      │   │   └── src
      │   │       ├── common
      │   │       │   ├── decision_data.cc
      │   │       │   ├── ego_info.cc
      │   │       │   ├── feature_output.cc
      │   │       │   ├── frame.cc
      │   │       │   ├── history.cc
      │   │       │   ├── learning_based_data.cc
      │   │       │   ├── message_process.cc
      │   │       │   ├── obstacle_blocking_analyzer.cc
      │   │       │   ├── obstacle.cc
      │   │       │   ├── open_space_info.cc
      │   │       │   ├── path
      │   │       │   │   ├── discretized_path.cc
      │   │       │   │   ├── frenet_frame_path.cc
      │   │       │   │   └── path_data.cc
      │   │       │   ├── path_boundary.cc
      │   │       │   ├── path_decision.cc
      │   │       │   ├── planning_context.cc
      │   │       │   ├── planning_gflags.cc
      │   │       │   ├── reference_line_info.cc
      │   │       │   ├── smoothers
      │   │       │   │   └── smoother.cc
      │   │       │   ├── speed
      │   │       │   │   ├── speed_data.cc
      │   │       │   │   ├── st_boundary.cc
      │   │       │   │   └── st_point.cc
      │   │       │   ├── speed_limit.cc
      │   │       │   ├── speed_profile_generator.cc
      │   │       │   ├── st_graph_data.cc
      │   │       │   ├── trajectory
      │   │       │   │   ├── discretized_trajectory.cc
      │   │       │   │   └── publishable_trajectory.cc
      │   │       │   ├── trajectory1d
      │   │       │   │   ├── constant_deceleration_trajectory1d.cc
      │   │       │   │   ├── constant_jerk_trajectory1d.cc
      │   │       │   │   ├── piecewise_acceleration_trajectory1d.cc
      │   │       │   │   ├── piecewise_jerk_trajectory1d.cc
      │   │       │   │   ├── piecewise_trajectory1d.cc
      │   │       │   │   └── standing_still_trajectory1d.cc
      │   │       │   ├── trajectory_evaluator.cc
      │   │       │   ├── trajectory_stitcher.cc
      │   │       │   └── util
      │   │       │       ├── common.cc
      │   │       │       ├── math_util.cc
      │   │       │       └── util.cc
      │   │       ├── constraint_checker
      │   │       │   ├── collision_checker.cc
      │   │       │   ├── constraint_checker1d.cc
      │   │       │   └── constraint_checker.cc
      │   │       ├── lattice
      │   │       │   ├── behavior
      │   │       │   │   ├── feasible_region.cc
      │   │       │   │   ├── path_time_graph.cc
      │   │       │   │   └── prediction_querier.cc
      │   │       │   └── trajectory_generation
      │   │       │       ├── backup_trajectory_generator.cc
      │   │       │       ├── end_condition_sampler.cc
      │   │       │       ├── lateral_osqp_optimizer.cc
      │   │       │       ├── lateral_qp_optimizer.cc
      │   │       │       ├── lattice_trajectory1d.cc
      │   │       │       ├── piecewise_braking_trajectory_generator.cc
      │   │       │       ├── trajectory1d_generator.cc
      │   │       │       ├── trajectory_combiner.cc
      │   │       │       └── trajectory_evaluator.cc
      │   │       ├── math
      │   │       │   ├── curve1d
      │   │       │   │   ├── cubic_polynomial_curve1d.cc
      │   │       │   │   ├── piecewise_quintic_spiral_path.cc
      │   │       │   │   ├── quartic_polynomial_curve1d.cc
      │   │       │   │   ├── quintic_polynomial_curve1d.cc
      │   │       │   │   └── quintic_spiral_path.cc
      │   │       │   ├── curve_math.cc
      │   │       │   ├── discrete_points_math.cc
      │   │       │   ├── discretized_points_smoothing
      │   │       │   │   ├── cos_theta_ipopt_interface.cc
      │   │       │   │   ├── cos_theta_smoother.cc
      │   │       │   │   ├── fem_pos_deviation_ipopt_interface.cc
      │   │       │   │   ├── fem_pos_deviation_osqp_interface.cc
      │   │       │   │   ├── fem_pos_deviation_smoother.cc
      │   │       │   │   └── fem_pos_deviation_sqp_osqp_interface.cc
      │   │       │   ├── piecewise_jerk
      │   │       │   │   ├── piecewise_jerk_path_problem.cc
      │   │       │   │   ├── piecewise_jerk_problem.cc
      │   │       │   │   └── piecewise_jerk_speed_problem.cc
      │   │       │   ├── polynomial_xd.cc
      │   │       │   └── smoothing_spline
      │   │       │       ├── affine_constraint.cc
      │   │       │       ├── osqp_spline_1d_solver.cc
      │   │       │       ├── osqp_spline_2d_solver.cc
      │   │       │       ├── spline_1d.cc
      │   │       │       ├── spline_1d_constraint.cc
      │   │       │       ├── spline_1d_kernel.cc
      │   │       │       ├── spline_1d_seg.cc
      │   │       │       ├── spline_1d_solver.cc
      │   │       │       ├── spline_2d.cc
      │   │       │       ├── spline_2d_constraint.cc
      │   │       │       ├── spline_2d_kernel.cc
      │   │       │       ├── spline_2d_seg.cc
      │   │       │       └── spline_seg_kernel.cc
      │   │       ├── navi
      │   │       │   └── decider
      │   │       │       ├── navi_obstacle_decider.cc
      │   │       │       ├── navi_path_decider.cc
      │   │       │       ├── navi_speed_decider.cc
      │   │       │       ├── navi_speed_ts_graph.cc
      │   │       │       └── navi_task.cc
      │   │       ├── navi_planning.cc
      │   │       ├── on_lane_planning.cc
      │   │       ├── open_space
      │   │       │   ├── coarse_trajectory_generator
      │   │       │   │   ├── grid_search.cc
      │   │       │   │   ├── hybrid_a_star.cc
      │   │       │   │   ├── node3d.cc
      │   │       │   │   └── reeds_shepp_path.cc
      │   │       │   └── trajectory_smoother
      │   │       │       ├── distance_approach_ipopt_fixed_dual_interface.cc
      │   │       │       ├── distance_approach_ipopt_fixed_ts_interface.cc
      │   │       │       ├── distance_approach_ipopt_interface.cc
      │   │       │       ├── distance_approach_ipopt_relax_end_interface.cc
      │   │       │       ├── distance_approach_ipopt_relax_end_slack_interface.cc
      │   │       │       ├── distance_approach_problem.cc
      │   │       │       ├── dual_variable_warm_start_ipopt_interface.cc
      │   │       │       ├── dual_variable_warm_start_ipopt_qp_interface.cc
      │   │       │       ├── dual_variable_warm_start_osqp_interface.cc
      │   │       │       ├── dual_variable_warm_start_problem.cc
      │   │       │       ├── dual_variable_warm_start_slack_osqp_interface.cc
      │   │       │       └── iterative_anchoring_smoother.cc
      │   │       ├── pipeline
      │   │       │   └── evaluator.cc
      │   │       ├── planner
      │   │       │   ├── lattice
      │   │       │   │   └── lattice_planner.cc
      │   │       │   ├── navi
      │   │       │   │   └── navi_planner.cc
      │   │       │   ├── navi_planner_dispatcher.cc
      │   │       │   ├── on_lane_planner_dispatcher.cc
      │   │       │   ├── planner_dispatcher.cc
      │   │       │   ├── public_road
      │   │       │   │   └── public_road_planner.cc
      │   │       │   └── rtk
      │   │       │       └── rtk_replay_planner.cc
      │   │       ├── planning_base.cc
      │   │       ├── planning_component.cc
      │   │       ├── reference_line
      │   │       │   ├── discrete_points_reference_line_smoother.cc
      │   │       │   ├── qp_spline_reference_line_smoother.cc
      │   │       │   ├── reference_line.cc
      │   │       │   ├── reference_line_provider.cc
      │   │       │   ├── reference_point.cc
      │   │       │   ├── spiral_problem_interface.cc
      │   │       │   ├── spiral_reference_line_smoother.cc
      │   │       │   └── spiral_smoother_util.cc
      │   │       ├── scenarios
      │   │       │   ├── bare_intersection
      │   │       │   │   └── unprotected
      │   │       │   │       ├── bare_intersection_unprotected_scenario.cc
      │   │       │   │       ├── stage_approach.cc
      │   │       │   │       └── stage_intersection_cruise.cc
      │   │       │   ├── common
      │   │       │   │   └── stage_intersection_cruise_impl.cc
      │   │       │   ├── dead_end
      │   │       │   │   └── deadend_turnaround
      │   │       │   │       ├── deadend_turnaround_scenario.cc
      │   │       │   │       ├── stage_approaching_turning_point.cc
      │   │       │   │       └── stage_turning.cc
      │   │       │   ├── emergency
      │   │       │   │   ├── emergency_pull_over
      │   │       │   │   │   ├── emergency_pull_over_scenario.cc
      │   │       │   │   │   ├── stage_approach.cc
      │   │       │   │   │   ├── stage_slow_down.cc
      │   │       │   │   │   └── stage_standby.cc
      │   │       │   │   └── emergency_stop
      │   │       │   │       ├── emergency_stop_scenario.cc
      │   │       │   │       ├── stage_approach.cc
      │   │       │   │       └── stage_standby.cc
      │   │       │   ├── lane_follow
      │   │       │   │   ├── lane_follow_scenario.cc
      │   │       │   │   └── lane_follow_stage.cc
      │   │       │   ├── learning_model
      │   │       │   │   ├── learning_model_sample_scenario.cc
      │   │       │   │   └── stage_run.cc
      │   │       │   ├── narrow_street_u_turn
      │   │       │   │   └── narrow_street_u_turn_scenario.cc
      │   │       │   ├── park
      │   │       │   │   ├── pull_over
      │   │       │   │   │   ├── pull_over_scenario.cc
      │   │       │   │   │   ├── stage_approach.cc
      │   │       │   │   │   ├── stage_retry_approach_parking.cc
      │   │       │   │   │   └── stage_retry_parking.cc
      │   │       │   │   └── valet_parking
      │   │       │   │       ├── stage_approaching_parking_spot.cc
      │   │       │   │       ├── stage_parking.cc
      │   │       │   │       └── valet_parking_scenario.cc
      │   │       │   ├── park_and_go
      │   │       │   │   ├── park_and_go_scenario.cc
      │   │       │   │   ├── stage_adjust.cc
      │   │       │   │   ├── stage_check.cc
      │   │       │   │   ├── stage_cruise.cc
      │   │       │   │   └── stage_pre_cruise.cc
      │   │       │   ├── scenario.cc
      │   │       │   ├── scenario_manager.cc
      │   │       │   ├── stage.cc
      │   │       │   ├── stop_sign
      │   │       │   │   └── unprotected
      │   │       │   │       ├── stage_creep.cc
      │   │       │   │       ├── stage_intersection_cruise.cc
      │   │       │   │       ├── stage_pre_stop.cc
      │   │       │   │       ├── stage_stop.cc
      │   │       │   │       └── stop_sign_unprotected_scenario.cc
      │   │       │   ├── traffic_light
      │   │       │   │   ├── protected
      │   │       │   │   │   ├── stage_approach.cc
      │   │       │   │   │   ├── stage_intersection_cruise.cc
      │   │       │   │   │   └── traffic_light_protected_scenario.cc
      │   │       │   │   ├── unprotected_left_turn
      │   │       │   │   │   ├── stage_approach.cc
      │   │       │   │   │   ├── stage_creep.cc
      │   │       │   │   │   ├── stage_intersection_cruise.cc
      │   │       │   │   │   └── traffic_light_unprotected_left_turn_scenario.cc
      │   │       │   │   └── unprotected_right_turn
      │   │       │   │       ├── stage_creep.cc
      │   │       │   │       ├── stage_intersection_cruise.cc
      │   │       │   │       ├── stage_stop.cc
      │   │       │   │       └── traffic_light_unprotected_right_turn_scenario.cc
      │   │       │   ├── util
      │   │       │   │   └── util.cc
      │   │       │   └── yield_sign
      │   │       │       ├── stage_approach.cc
      │   │       │       ├── stage_creep.cc
      │   │       │       └── yield_sign_scenario.cc
      │   │       ├── tasks
      │   │       │   ├── deciders
      │   │       │   │   ├── creep_decider
      │   │       │   │   │   └── creep_decider.cc
      │   │       │   │   ├── decider.cc
      │   │       │   │   ├── lane_change_decider
      │   │       │   │   │   └── lane_change_decider.cc
      │   │       │   │   ├── open_space_decider
      │   │       │   │   │   ├── open_space_fallback_decider.cc
      │   │       │   │   │   ├── open_space_pre_stop_decider.cc
      │   │       │   │   │   └── open_space_roi_decider.cc
      │   │       │   │   ├── path_assessment_decider
      │   │       │   │   │   └── path_assessment_decider.cc
      │   │       │   │   ├── path_bounds_decider
      │   │       │   │   │   └── path_bounds_decider.cc
      │   │       │   │   ├── path_decider
      │   │       │   │   │   └── path_decider.cc
      │   │       │   │   ├── path_lane_borrow_decider
      │   │       │   │   │   └── path_lane_borrow_decider.cc
      │   │       │   │   ├── path_reference_decider
      │   │       │   │   │   └── path_reference_decider.cc
      │   │       │   │   ├── path_reuse_decider
      │   │       │   │   │   └── path_reuse_decider.cc
      │   │       │   │   ├── rss_decider
      │   │       │   │   │   └── rss_decider.cc
      │   │       │   │   ├── rule_based_stop_decider
      │   │       │   │   │   └── rule_based_stop_decider.cc
      │   │       │   │   ├── speed_bounds_decider
      │   │       │   │   │   ├── speed_bounds_decider.cc
      │   │       │   │   │   ├── speed_limit_decider.cc
      │   │       │   │   │   └── st_boundary_mapper.cc
      │   │       │   │   ├── speed_decider
      │   │       │   │   │   └── speed_decider.cc
      │   │       │   │   ├── st_bounds_decider
      │   │       │   │   │   ├── st_bounds_decider.cc
      │   │       │   │   │   ├── st_driving_limits.cc
      │   │       │   │   │   ├── st_guide_line.cc
      │   │       │   │   │   └── st_obstacles_processor.cc
      │   │       │   │   └── utils
      │   │       │   │       └── path_decider_obstacle_utils.cc
      │   │       │   ├── learning_model
      │   │       │   │   ├── learning_model_inference_task.cc
      │   │       │   │   └── learning_model_inference_trajectory_task.cc
      │   │       │   ├── optimizers
      │   │       │   │   ├── open_space_trajectory_generation
      │   │       │   │   │   ├── open_space_trajectory_optimizer.cc
      │   │       │   │   │   └── open_space_trajectory_provider.cc
      │   │       │   │   ├── open_space_trajectory_partition
      │   │       │   │   │   └── open_space_trajectory_partition.cc
      │   │       │   │   ├── path_optimizer.cc
      │   │       │   │   ├── path_time_heuristic
      │   │       │   │   │   ├── dp_st_cost.cc
      │   │       │   │   │   ├── gridded_path_time_graph.cc
      │   │       │   │   │   ├── path_time_heuristic_optimizer.cc
      │   │       │   │   │   └── st_graph_point.cc
      │   │       │   │   ├── piecewise_jerk_path
      │   │       │   │   │   ├── piecewise_jerk_path_ipopt_solver.cc
      │   │       │   │   │   └── piecewise_jerk_path_optimizer.cc
      │   │       │   │   ├── piecewise_jerk_speed
      │   │       │   │   │   ├── piecewise_jerk_speed_nonlinear_ipopt_interface.cc
      │   │       │   │   │   ├── piecewise_jerk_speed_nonlinear_optimizer.cc
      │   │       │   │   │   └── piecewise_jerk_speed_optimizer.cc
      │   │       │   │   ├── road_graph
      │   │       │   │   │   ├── dp_road_graph.cc
      │   │       │   │   │   ├── trajectory_cost.cc
      │   │       │   │   │   └── waypoint_sampler.cc
      │   │       │   │   ├── speed_optimizer.cc
      │   │       │   │   └── trajectory_optimizer.cc
      │   │       │   ├── task.cc
      │   │       │   ├── task_factory.cc
      │   │       │   └── utils
      │   │       │       └── st_gap_estimator.cc
      │   │       ├── traffic_rules
      │   │       │   ├── backside_vehicle.cc
      │   │       │   ├── crosswalk.cc
      │   │       │   ├── destination.cc
      │   │       │   ├── keep_clear.cc
      │   │       │   ├── reference_line_end.cc
      │   │       │   ├── rerouting.cc
      │   │       │   ├── stop_sign.cc
      │   │       │   ├── traffic_decider.cc
      │   │       │   ├── traffic_light.cc
      │   │       │   └── yield_sign.cc
      │   │       └── tuning
      │   │           ├── autotuning_mlp_net_model.cc
      │   │           ├── autotuning_raw_feature_generator.cc
      │   │           └── speed_model
      │   │               ├── autotuning_speed_feature_builder.cc
      │   │               └── autotuning_speed_mlp_model.cc
      │   ├── apollo_routing
      │   │   ├── CMakeLists.txt
      │   │   ├── conf
      │   │   │   ├── adapter.conf
      │   │   │   ├── routing.conf
      │   │   │   └── routing_config.pb.txt
      │   │   ├── include
      │   │   │   └── apollo_routing
      │   │   │       ├── common
      │   │   │       │   └── routing_gflags.h
      │   │   │       ├── core
      │   │   │       │   ├── black_list_range_generator.h
      │   │   │       │   ├── navigator.h
      │   │   │       │   └── result_generator.h
      │   │   │       ├── graph
      │   │   │       │   ├── node_with_range.h
      │   │   │       │   ├── range_utils.h
      │   │   │       │   ├── sub_topo_graph.h
      │   │   │       │   ├── topo_graph.h
      │   │   │       │   ├── topo_node.h
      │   │   │       │   ├── topo_range.h
      │   │   │       │   ├── topo_range_manager.h
      │   │   │       │   └── topo_test_utils.h
      │   │   │       ├── routing_component.h
      │   │   │       ├── strategy
      │   │   │       │   ├── a_star_strategy.h
      │   │   │       │   └── strategy.h
      │   │   │       └── topo_creator
      │   │   │           ├── edge_creator.h
      │   │   │           ├── graph_creator.h
      │   │   │           └── node_creator.h
      │   │   ├── launch
      │   │   │   ├── routing.launch
      │   │   │   └── topo_creator.launch
      │   │   ├── package.xml
      │   │   ├── README_cn.md
      │   │   ├── README.md
      │   │   └── src
      │   │       ├── common
      │   │       │   └── routing_gflags.cc
      │   │       ├── core
      │   │       │   ├── black_list_range_generator.cc
      │   │       │   ├── navigator.cc
      │   │       │   └── result_generator.cc
      │   │       ├── graph
      │   │       │   ├── node_with_range.cc
      │   │       │   ├── sub_topo_graph.cc
      │   │       │   ├── topo_graph.cc
      │   │       │   ├── topo_node.cc
      │   │       │   ├── topo_range.cc
      │   │       │   └── topo_range_manager.cc
      │   │       ├── routing_component.cc
      │   │       ├── strategy
      │   │       │   └── a_star_strategy.cc
      │   │       └── topo_creator
      │   │           ├── edge_creator.cc
      │   │           ├── graph_creator.cc
      │   │           ├── node_creator.cc
      │   │           └── topo_creator.cc
      │   └── apollo_simulator
      │       ├── cfg
      │       │   └── FakePredictor.cfg
      │       ├── CHANGELOG.rst
      │       ├── CMakeLists.txt
      │       ├── conf
      │       │   └── adapter.conf
      │       ├── icons
      │       │   └── classes
      │       │       └── fake_prediction_tool.png
      │       ├── include
      │       │   └── apollo_simulator
      │       │       ├── fake_predictor.h
      │       │       ├── hdmap_visualizer.h
      │       │       ├── sim_control.h
      │       │       ├── sim_pnc.h
      │       │       └── vehicle_sim_model
      │       │           ├── sim_model_constant_acceleration.h
      │       │           ├── sim_model_ideal.h
      │       │           ├── sim_model_interface.h
      │       │           ├── sim_model_time_delay.h
      │       │           └── sim_model_util.h
      │       ├── launch
      │       │   ├── lexus.launch
      │       │   ├── simulation.launch
      │       │   └── simulator.launch
      │       ├── package.xml
      │       ├── param
      │       │   └── sim_pnc_params.yaml
      │       ├── plugin_description.xml
      │       ├── README.md
      │       ├── rviz
      │       │   └── simulation.rviz
      │       ├── src
      │       │   ├── fake_predictor.cpp
      │       │   ├── hdmap_visualizer.cpp
      │       │   ├── main.cpp
      │       │   ├── rviz_plugin
      │       │   │   ├── fake_prediction_tool.cpp
      │       │   │   └── fake_prediction_tool.h
      │       │   ├── sim_control.cpp
      │       │   ├── sim_pnc.cpp
      │       │   └── vehicle_sim_model
      │       │       ├── sim_model_constant_acceleration.cpp
      │       │       ├── sim_model_ideal.cpp
      │       │       ├── sim_model_interface.cpp
      │       │       ├── sim_model_time_delay.cpp
      │       │       └── sim_model_util.cpp
      │       └── urdf
      │           └── lexus
      │               ├── lexus.dae
      │               ├── lexus.jpg
      │               └── lexus.urdf
      └── README.md
    
  • 启动容器:启动成功后,显示如下图所示:

    cd apollo.ros-7.0.0/							# 返回工程主目录
    ./docker/scripts/docker_start.sh	# 启动容器
    

    在这里插入图片描述

    注意

    • 执行./docker/scripts/docker_start.sh指令启动容器前,一定要返回工程主目录
    • 如果此终端关闭后会导致启动容器退出
    • 重新启动容器需要重新编译代码
  • 编译代码:编译成功后,显示如下图所示:

    cd apollo_ros_ws/	# 进入工作空间
    catkin build			# 开始编译
    

    在这里插入图片描述

  • 进入容器:如果容器已经启动,想新开一个终端进去,可使用以下指令:

    cd apollo.ros-7.0.0/						# 返回工程主目录 
    ./docker/scripts/docker_into.sh	# 进入容器
    

仿真测试

仿真模式

目前仿真测试支持两种模式:

  • sim_controlroutingplanning模块仿真测试,移植于原apollo中的dreamview
  • sim_pncroutingplanningcontrol模块仿真测试,移植于autoware.universe中的simple_planning_simulator

仿真模式设置在modules/apollo_simulator/launch/simulation.launch文件中:

  • use_sim_ctrl设置为true时,为sim_control仿真模式
  • use_sim_ctrl设置为false时,为sim_pnc仿真模式
<?xml version="1.0" encoding="UTF-8"?>
<launch>
  <arg name="map_name" default="demo"/>
  <arg name="use_sim_ctrl" default="true"/>

  <include file="$(find apollo_routing)/launch/routing.launch">
    <arg name="map_name" value="$(arg map_name)"/>
  </include>

  <include file="$(find apollo_planning)/launch/planning.launch">
    <arg name="map_name" value="$(arg map_name)"/>
  </include>

  <group unless="$(arg use_sim_ctrl)">
    <include file="$(find apollo_control)/launch/control.launch"/>
  </group>

  <include file="$(find apollo_simulator)/launch/simulator.launch">
    <arg name="map_name" value="$(arg map_name)"/>
    <arg name="use_sim_ctrl" value="$(arg use_sim_ctrl)"/>
  </include>
</launch>

仿真测试

  • 启动仿真程序:启动成功后可以看到rviz显示如下图所示

    cd apollo_ros_ws/
    source devel/setup.bash	
    roslaunch apollo_simulator simulation.launch
    

    在这里插入图片描述

  • 初始化车辆位姿:在rviz软件显示窗口上,点击2D Pose Estimate按钮在高精度地图上相应位置进行车辆位姿初始化

    在这里插入图片描述

  • 下发导航目标点:在rviz软件显示窗口上,点击2D Nav Goal按钮在高精度地图上相应位置进行导航目标点下发

    在这里插入图片描述

  • 增加障碍物:

    • 障碍物的增加可通过在rviz软件显示窗口上,点击Apollo Fake Prediction按钮在高精度地图上相应位置进行动/静态障碍物设置

      在这里插入图片描述

    • 障碍物速度清除、数量和速度设置,可使用ros中的rqt_reconfigure工具进行更改

      在这里插入图片描述

      • 在显示界面中勾选obstacle_clear按钮即可进行设置障碍物清除
      • 障碍物速度设置只需在在显示界面obstacle_speed输入栏中输入对应速度即可
      • 障碍物数量设置只需在在显示界面obstacle_max_size输入栏中输入对应数量即可
    • 设置静态障碍物:在rviz软件显示窗口上,点击Apollo Fake Prediction按钮在高精度地图上相应位置进行静态障碍物设置

      注意:此时障碍物速度必须设置为0

      在这里插入图片描述

    • 设置动态障碍物:在rviz软件显示窗口上,点击Apollo Fake Prediction按钮在高精度地图上相应位置进行动态障碍物设置

      注意:

      • 此时障碍物速度必须设置>0
      • 障碍物前方蓝色轨迹为障碍物预测轨迹

      在这里插入图片描述

  • 成功运行效果:如果程序启动正常,车辆位姿和导航目标都设置正确的话,可在rviz上看到正常运行的效果,如下图所示

    在这里插入图片描述

  • 更换测试地图:仿真测试时,默认启动的地图是modules/apollo_map/data/demo,如果想更换成modules/apollo_map/data/目录下其他地图,可在启动仿真程序时,根据想使用的地图的名称,将启动指令更换成以下指令即可:

    roslaunch apollo_simulator simulation.launch map_name:=cube_town
    

高精度地图

仿真测试时,所使用的高精度地图放在modules/apollo_map/data/目录下,项目中已有的地图有:

.
├── autonomou_stuff
├── borregas_ave
├── cube_town
├── demo
├── go_mentum_dtl
├── modern_city
├── san_francisco
├── san_mateo
├── sunnyvale_big_loop
├── sunnyvale_loop
└── sunnyvale_with_two_offices

如果想添加新的高精度地图,则需要按照以下步骤进行:

  • modules/apollo_map/data/目录下新建以添加地图名字命名的文件夹,这里以test为例:

    cd apollo.ros-7.0.0/modules/apollo_map/data/
    mkdir test
    
  • 将高精度地图test的地图文件base_map.bin放到刚刚创建的目录apollo.ros-7.0.0/modules/apollo_map/data/test

    • 高精度地图文件base_map.bin是由高精度地图绘制工具绘制得来,常用的工具有Roadrunner,不过是收费的
    • 本项目的高精度地图均是在LGSVL仿真平台下载

    注意apollo.ros-7.0.0只支持apollo7.0百度OpenDRIVE格式规范

  • 生成routing所需的拓扑地图:以下指令中的test为第一步在modules/apollo_map/data/目录下新建的文件夹名称

    cd apollo_ros_ws/
    source devel/setup.bash	
    roslaunch apollo_routing topo_creator.launch map_name:=test
    

    执行成功后终端显示如下图所示,同时在apollo.ros-7.0.0/modules/apollo_map/data/test目录下还会多出routing_map.binrouting_map.txt两个文件

    在这里插入图片描述

  • 到达此步骤,添加新的高精度地图流程已完成,在仿真测试时,选择对应的地图进行测试即可

维护者

Forrest

猜你喜欢

转载自blog.csdn.net/Forrest_Z/article/details/128521187