/****************Apollo源码分析****************************
Copyright 2018 The File Authors & zouyu. All Rights Reserved. Contact with: 1746430162@qq.com 181663309504源码主要是c++实现的,也有少量python,git下载几百兆,其实代码不太多,主要是地图和数据了大量空间,主要程序
在apollo/modules目录中, 我们把它分成以下几部分(具体说明见各目录下的modules): 感知:感知当前位置,速度,障碍物等等 Apollo/modules/perception 预测:对场景下一步的变化做出预测 Apollo/modules/prediction 规划: (1) 全局路径规划:通过起点终点计算行驶路径 Apollo/modules/routing (2) 规划当前轨道:通过感知,预测,路径规划等信息计算轨道 Apollo/modules/planning (3) 规划转换成命令:将轨道转换成控制汽车的命令(加速,制动,转向等) Apollo/modules/control 其它 (1) 输入输出 i. Apollo/modules/drivers 设备驱动 ii. Apollo/modules/localization 位置信息 iii. Apollo/modules/monitor 监控模块 iv. Apollo/modules/canbus 与汽车硬件交互 v. Apollo/modules/map 地图数据 vi. Apollo/modules/third_party_perception 三方感知器支持 (2) 交互 i. Apollo/modules/dreamview 可视化模块 ii. Apollo/modules/hmi 把汽车当前状态显示给用户 (3) 工具 i. Apollo/modules/calibration 标注工具 ii. Apollo/modules/common 支持其它模块的公共工具 iii. Apollo/modules/data 数据工具 iv. Apollo/modules/tools 一些Python工具 (4) 其它 i. Apollo/modules/elo 高精度定位系统,无源码,但有文档 ii. Apollo/modules/e2e 收集传感器数据给PX2,ROS
自动驾驶系统先通过起点终点规划出整体路径(routing);然后在行驶过程中感知(perception)当前环境
(识别车辆行人路况标志等),并预测下一步发展;然后把已知信息都传入规划模块(planning),规划出之后的轨道;
控制模块(control)将轨道数据转换成对车辆的控制信号,通过汽车交互模块(canbus)控制汽车. 我觉得这里面算法技术含量最高的是感知perception和规划planning,具体请见本博客中各模块的分析代码。 /****************************************************************************************
下面这个文件是一个比较重要的数据结构文件,它定义了车辆的很多初始化配置。
syntax = "proto2"; package apollo.common; import "modules/common/proto/header.proto"; import "modules/common/proto/geometry.proto"; message Transform { optional bytes source_frame = 1; // Also known as "frame_id." optional bytes target_frame = 2; // Also known as "child_frame_id." // Position of target in the source frame. optional Point3D translation = 3; // Activate rotation from the source frame to the target frame. optional Quaternion rotation = 4; } message Extrinsics { repeated Transform tansforms = 1; } // Vehicle parameters shared among several modules. // By default, all are measured with the SI units (meters, meters per second, // etc.). message VehicleParam { // Car center point is car reference point, i.e., center of rear axle. optional double front_edge_to_center = 1; optional double back_edge_to_center = 2; optional double left_edge_to_center = 3; optional double right_edge_to_center = 4; optional double length = 5; optional double width = 6; optional double height = 7; optional double min_turn_radius = 8; optional double max_acceleration = 9; optional double max_deceleration = 10; // The following items are used to compute trajectory constraints in planning. // vehicle max steer angle optional double max_steer_angle = 11; // vehicle max steer rate; how fast can the steering wheel turn. optional double max_steer_angle_rate = 12; // ratio between the turn of steering wheel and the turn of wheels optional double steer_ratio = 13; // the distance between the front and back wheels optional double wheel_base = 14; // Tire effective rolling radius (vertical distance between the wheel center // and the ground). optional double wheel_rolling_radius = 15; } message VehicleConfig { optional apollo.common.Header header = 1; optional VehicleParam vehicle_param = 2; optional Extrinsics extrinsics = 3; }
syntax = "proto2";package apollo.common;import "modules/common/proto/header.proto";import "modules/common/proto/geometry.proto";message Transform { optional bytes source_frame = 1; // Also known as "frame_id."大框架ID optional bytes target_frame = 2; // Also known as "child_frame_id."子框架 // Position of target in the source frame. optional Point3D translation = 3;//3D点云 // Activate rotation from the source frame to the target frame. optional Quaternion rotation = 4;}message Extrinsics { repeated Transform tansforms = 1;}// Vehicle parameters shared among several modules.// By default, all are measured with the SI units (meters, meters per second,// etc.).message VehicleParam { // Car center point is car reference point, i.e., center of rear axle.汽车的中心,上 下 左 右 这个很重要。 optional double front_edge_to_center = 1; optional double back_edge_to_center = 2; optional double left_edge_to_center = 3; optional double right_edge_to_center = 4; optional double length = 5; optional double width = 6; optional double height = 7; optional double min_turn_radius = 8; optional double max_acceleration = 9; optional double max_deceleration = 10; // The following items are used to compute trajectory constraints in planning. // vehicle max steer angle optional double max_steer_angle = 11; // vehicle max steer rate; how fast can the steering wheel turn. optional double max_steer_angle_rate = 12; // ratio between the turn of steering wheel and the turn of wheels optional double steer_ratio = 13; // the distance between the front and back wheels optional double wheel_base = 14; // Tire effective rolling radius (vertical distance between the wheel center // and the ground). optional double wheel_rolling_radius = 15;}message VehicleConfig { optional apollo.common.Header header = 1; optional VehicleParam vehicle_param = 2; optional Extrinsics extrinsics = 3;}