apollo.ros-1.0.0
Hello,时隔不知道多久……我又回来了!这次给大家带来的是我之前学习apollo时开发的内容,主要是针对apollo 1.0.0版本进行了ros1的移植,具体介绍见下文。即上次开源机器人算法分享cpp_robotics后,这次分享也是开源的,需要下载见apollo.ros-1.0.0
PS:
- 基于ros1的 apollo 3.0.0规划控制算法已经发布,详情见apollo.ros-3.0.0
- 基于ros1的 apollo 7.0.0规划控制算法已经发布,详情见apollo.ros-7.0.0
简介
此工程为基于 apollo 1.0.0 的ros1移植版本,移植主要目的如下:
- 学习apollo框架设计
- 学习apollo中的控制算法
目前只针对apollo中主要模块进行了移植,移植模块有:
apollo_ros
├── apollo_common
├── apollo_control
├── apollo_decision
├── apollo_localization
├── apollo_msgs
├── apollo_planning
└── apollo_simulator
目前移植版本与原有版本改动点如下:
- 使用原生ros(基于noetic)替代apollo中更改的ros
- 使用ros pkg封装apollo中每个module
- 使用cmake进行编译
- 将protobuff版本提升到3.6.1
- 使用ros中的
std_msgs/String
替代apollo的pd_msgs/xxx
消息 - 增加pnc仿真工具
apollo_simulator
此移植版本,能很好的将自己的算法增加到框架中,应用于机器人或者无人驾驶中。
内容
.
├── apollo_common
│ ├── CMakeLists.txt
│ ├── data
│ │ └── mkz_config.pb.txt
│ ├── include
│ │ └── apollo_common
│ │ ├── adapters
│ │ │ ├── adapter_gflags.h
│ │ │ ├── adapter.h
│ │ │ ├── adapter_manager.h
│ │ │ └── message_adapters.h
│ │ ├── apollo_app.h
│ │ ├── configs
│ │ │ ├── config_gflags.h
│ │ │ └── vehicle_config_helper.h
│ │ ├── log.h
│ │ ├── macro.h
│ │ ├── math
│ │ │ ├── aabox2d.h
│ │ │ ├── aaboxkdtree2d.h
│ │ │ ├── angle.h
│ │ │ ├── box2d.h
│ │ │ ├── euler_angles_zxy.h
│ │ │ ├── integral.h
│ │ │ ├── kalman_filter.h
│ │ │ ├── linear_interpolation.h
│ │ │ ├── linear_quadratic_regulator.h
│ │ │ ├── line_segment2d.h
│ │ │ ├── math_utils.h
│ │ │ ├── matrix_operations.h
│ │ │ ├── polygon2d.h
│ │ │ ├── quaternion.h
│ │ │ ├── search.h
│ │ │ ├── sin_table.h
│ │ │ └── vec2d.h
│ │ ├── monitor
│ │ │ ├── monitor_buffer.h
│ │ │ └── monitor.h
│ │ ├── status
│ │ │ └── status.h
│ │ ├── time
│ │ │ └── time.h
│ │ ├── util
│ │ │ ├── factory.h
│ │ │ ├── file.h
│ │ │ ├── string_tokenizer.h
│ │ │ └── util.h
│ │ └── vehicle_state
│ │ └── vehicle_state.h
│ ├── package.xml
│ ├── README.md
│ └── src
│ ├── adapters
│ │ ├── adapter_gflags.cc
│ │ └── adapter_manager.cc
│ ├── apollo_app.cc
│ ├── configs
│ │ ├── config_gflags.cc
│ │ └── vehicle_config_helper.cc
│ ├── math
│ │ ├── aabox2d.cc
│ │ ├── angle.cc
│ │ ├── box2d.cc
│ │ ├── integral.cc
│ │ ├── linear_interpolation.cc
│ │ ├── linear_quadratic_regulator.cc
│ │ ├── line_segment2d.cc
│ │ ├── math_utils.cc
│ │ ├── polygon2d.cc
│ │ ├── search.cc
│ │ ├── sin_table.cc
│ │ └── vec2d.cc
│ ├── monitor
│ │ ├── monitor_buffer.cc
│ │ └── monitor.cc
│ ├── util
│ │ ├── file.cc
│ │ ├── string_tokenizer.cc
│ │ └── util.cc
│ └── vehicle_state
│ └── vehicle_state.cc
├── apollo_control
│ ├── CMakeLists.txt
│ ├── conf
│ │ ├── adapter.conf
│ │ ├── control.conf
│ │ ├── lincoln_062145.pb.txt
│ │ ├── lincoln_062146.pb.txt
│ │ ├── lincoln_062147.pb.txt
│ │ ├── lincoln_062546.pb.txt
│ │ ├── lincoln_062547.pb.txt
│ │ ├── lincoln_062845.pb.txt
│ │ └── lincoln.pb.txt
│ ├── include
│ │ └── apollo_control
│ │ ├── common
│ │ │ ├── base_types.h
│ │ │ ├── control_gflags.h
│ │ │ ├── definitions.h
│ │ │ ├── hysteresis_filter.h
│ │ │ ├── interpolation_2d.h
│ │ │ ├── pid_controller.h
│ │ │ └── trajectory_analyzer.h
│ │ ├── control.h
│ │ ├── controller
│ │ │ ├── controller_agent.h
│ │ │ ├── controller.h
│ │ │ ├── lat_controller.h
│ │ │ └── lon_controller.h
│ │ └── filters
│ │ ├── digital_filter_coefficients.h
│ │ ├── digital_filter.h
│ │ └── mean_filter.h
│ ├── launch
│ │ └── control.launch
│ ├── package.xml
│ ├── README.md
│ └── src
│ ├── common
│ │ ├── control_gflags.cc
│ │ ├── hysteresis_filter.cc
│ │ ├── interpolation_2d.cc
│ │ ├── pid_controller.cc
│ │ └── trajectory_analyzer.cc
│ ├── control.cc
│ ├── controller
│ │ ├── controller_agent.cc
│ │ ├── lat_controller.cc
│ │ └── lon_controller.cc
│ ├── filters
│ │ ├── digital_filter.cc
│ │ ├── digital_filter_coefficients.cc
│ │ └── mean_filter.cc
│ └── main.cc
├── apollo_decision
│ ├── CMakeLists.txt
│ ├── conf
│ │ ├── adapter.conf
│ │ └── decision.conf
│ ├── include
│ │ └── apollo_decision
│ │ ├── common
│ │ │ └── decision_gflags.h
│ │ └── decision.h
│ ├── launch
│ │ └── decision.launch
│ ├── package.xml
│ ├── README.md
│ └── src
│ ├── common
│ │ └── decision_gflags.cc
│ ├── decision.cc
│ └── main.cc
├── apollo_localization
│ ├── CMakeLists.txt
│ ├── conf
│ │ ├── camera_adapter.conf
│ │ ├── localization.conf
│ │ ├── localization_config.pb.txt
│ │ └── rtk_adapter.conf
│ ├── include
│ │ └── apollo_localization
│ │ ├── camera
│ │ │ └── camera_localization.h
│ │ ├── common
│ │ │ └── localization_gflags.h
│ │ ├── decision.h
│ │ ├── localization_base.h
│ │ ├── localization.h
│ │ └── rtk
│ │ └── rtk_localization.h
│ ├── launch
│ │ └── localization.launch
│ ├── package.xml
│ ├── README.md
│ └── src
│ ├── camera
│ │ └── camera_localization.cc
│ ├── common
│ │ └── localization_gflags.cc
│ ├── localization.cc
│ ├── main.cc
│ └── rtk
│ └── rtk_localization.cc
├── apollo_msgs
│ ├── CMakeLists.txt
│ ├── include
│ │ └── apollo_msgs
│ │ └── proto
│ │ ├── canbus
│ │ ├── common
│ │ ├── control
│ │ ├── decision
│ │ ├── localization
│ │ ├── perception
│ │ ├── planning
│ │ └── prediction
│ ├── package.xml
│ ├── proto
│ │ └── apollo_msgs
│ │ └── proto
│ │ ├── canbus
│ │ │ ├── chassis_detail.proto
│ │ │ └── chassis.proto
│ │ ├── common
│ │ │ ├── adapter_config.proto
│ │ │ ├── config_extrinsics.proto
│ │ │ ├── error_code.proto
│ │ │ ├── geometry.proto
│ │ │ ├── gnss_status.proto
│ │ │ ├── header.proto
│ │ │ ├── monitor.proto
│ │ │ └── vehicle_config.proto
│ │ ├── control
│ │ │ ├── calibration_table.proto
│ │ │ ├── control_cmd.proto
│ │ │ ├── control_conf.proto
│ │ │ ├── lat_controller_conf.proto
│ │ │ ├── lon_controller_conf.proto
│ │ │ └── pad_msg.proto
│ │ ├── decision
│ │ │ └── decision.proto
│ │ ├── localization
│ │ │ ├── camera_parameter.proto
│ │ │ ├── camera.proto
│ │ │ ├── gps.proto
│ │ │ ├── imu.proto
│ │ │ ├── localization_config.proto
│ │ │ ├── localization.proto
│ │ │ └── pose.proto
│ │ ├── perception
│ │ │ ├── perception_obstacle.proto
│ │ │ └── traffic_light_detection.proto
│ │ ├── planning
│ │ │ ├── planning_internal.proto
│ │ │ └── planning.proto
│ │ └── prediction
│ │ └── prediction_obstacle.proto
│ └── README.md
├── apollo_planning
│ ├── CMakeLists.txt
│ ├── conf
│ │ ├── adapter.conf
│ │ └── planning.conf
│ ├── data
│ │ └── garage.csv
│ ├── include
│ │ └── apollo_planning
│ │ ├── common
│ │ │ ├── base_types.h
│ │ │ └── planning_gflags.h
│ │ ├── planner
│ │ │ ├── planner.h
│ │ │ └── rtk_replay_planner.h
│ │ ├── planner_factory.h
│ │ ├── planning.h
│ │ └── planning_node.h
│ ├── launch
│ │ └── planning.launch
│ ├── package.xml
│ ├── README.md
│ └── src
│ ├── common
│ │ └── planning_gflags.cc
│ ├── main.cc
│ ├── planner
│ │ └── rtk_replay_planner.cc
│ ├── planner_factory.cc
│ ├── planning.cc
│ └── planning_node.cc
├── apollo_simulator
│ ├── CMakeLists.txt
│ ├── conf
│ │ └── adapter.conf
│ ├── include
│ │ └── apollo_simulator
│ │ ├── apollo_simulator.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
│ │ ├── simulation.launch
│ │ └── simulator.launch
│ ├── package.xml
│ ├── param
│ │ └── simulator_params.yaml
│ ├── README.md
│ ├── rviz
│ │ └── simulation.rviz
│ └── src
│ ├── apollo_simulator.cpp
│ ├── main.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
├── AUTHORS.md
├── LICENSE
└── README.md
安装
依赖
-
ros1(noetic,安装见ros官网)
-
eigen3
sudo apt install libeigen3-dev
-
glog
sudo apt install libgoogle-glog-dev
-
gflags
sudo apt install libgflags-dev
-
gtest
sudo apt install libgtest-dev
-
protobuff 3.6.1
wget https://github.com/google/protobuf/releases/download/v3.6.1/protobuf-cpp-3.6.1.tar.gz tar xzf protobuf-cpp-3.6.1.tar.gz pushd protobuf-3.6.1 ./configure --prefix=/usr make -j8 make install popd
编译
- 创建的ros工作空间
- 使用
catkin_make
或者catkin build
指令进行代码编译
测试
这里主要使用apollo_simulator
仿真工具进行规划控制(pnc)进行测试,测试指令如下:
roslaunch apollo_simulator simulation.launch
基于 apollo 1.0.0 的ros1移植版本