apollo.ros-7.0.0
上次给大家带来了之前学习apollo时开发的内容apollo.ros-1.0.0和apollo.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 |
简介
此项目为基于ros1
的apollo7.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
目前移植版本能实现车辆在高精度地图下进行routing
、planning
和control
仿真测试,与原有版本改动点如下:
- 使用原生
ros
(基于noetic
)替代apollo
中的CyberRT
- 使用
ros pkg
封装apollo
中的module
- 使用
cmake
进行编译 - 将
protobuff
版本提升到3.6.1
- 增加
sim_control
和sim_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_control
:routing
和planning
模块仿真测试,移植于原apollo
中的dreamview
sim_pnc
:routing
、planning
和control
模块仿真测试,移植于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.bin
和routing_map.txt
两个文件 -
到达此步骤,添加新的高精度地图流程已完成,在仿真测试时,选择对应的地图进行测试即可
维护者
Forrest