Apollo:目录分析

apollo

目录名称目录作用
cyber消息中间件,替换ros作为消息层
dockerdocker有关的文件,如启动docker脚本,进入docker容器脚本
docs文档模块,有完整英文文档和部分中文文档
modules自动驾驶模块,主要的定位,预测,感知,规划都在这里
scripts脚本
third_party第三方库
tools编译相关配置文件
.github/ISSUE_TEMPLATE目录记录的文档
.vscode的一些参数配置
  • Apollo项目是用Bazel来做为代码编译工具,相当于java中的maven.

  • 每个源码文件夹下都有一个 BUILD文件即bazel的编译配置文件。

apollo/cyber

官方文档: apollo/docs/cyber

目录名称目录作用
base/高性能线程安全基础库 主要有原子哈希表、原子读写锁、有界队列、并发对象池、对象池、可重入读写锁、信号、线程池、线程安全队列、无界队列、等待策略等Apollo内部使用的基础设施。------这些接口的封装使得开发者能够轻松处理并发环境下的数据使用、同步问题,提高代码的健壮性
blocker/消息管道容器,和data模块有一定的近似,面向开发者的接口
class_loader/类加载器,用于加载组件的库文件。Apollo中存在多个Component,这些组件将会以库文件的方式编译生成
common公共的test、proto转*文件、其他工具
component组件基类、外部的modules需要继承该component
conf配置文件
croutine协程类及协程工厂,是调度单元
data传感器数据的读取和写入
doxy-docs一些文档
event事件类
example示例
ioepoll+io
logger日志器
mainboardApollo系统的启动入口
message消息类
node节点定义
parameter参数及参数服务器
protoproto文件夹
pythonpythonAPI
record消息记录
scheduler调度模块
service
service_discovery
sysmo就是 system monitor
task任务 启动调度
time时钟与rate
timer单例定时器 管理task
tools一大堆工具channel launch
transport多进程通信,为上层封装了底层数据传输的细节

apollo/ modules

目录名称目录作用
audio
bridge
calibration校准,主要用于传感器坐标的校准,用于感知模块做传感器融合。现在已经实现自动校准的功能
canbus通讯总线,工业领域的标准总线
canbus_vehicle
common公共源码模块如日志,工厂模式的实现,日志系统,监控模块,数学算法等
contrib
control控制模块,根据planning生成的路径对车辆轨迹进行控制,再底层就是发送命令到can总线,实现车辆的控制。
data地图等生成好的数据放在这里
dreamview仿真,能够对自动驾驶过程中的数据进行回放
drivers雷达,lidar,GPS, canbus,camera等驱动
guardian监护进程,主要是为了安全
localization定位,获取汽车的当前位置: 输入GPS和IMU信息输出自车定位信息
map高精地图模块,输出结构化地图信息,如车道线,十字路口等
monitor监控模块,主要是监控汽车状态,同时把状态发给hmi,并且记录,用于故障定位,健康检查等
perception感知,获取汽车当前的环境,行人,车辆,红绿灯等,给planning模块规划线路
planning规划,针对感知到的情况,对路径做规划,短期规划,只规划100-200M的距离, 生成好的路径给control模块
prediction预测,属于感知模块,对运动物体的轨迹做预测
routing导航线路,就是百度地图上查询2点之间的线路,生成的线路短期规划还是planning模块
storytelling
task_manager
third_party_perception第三方感知模块
tools
transform
v2x顾名思义就vehicle-to-everything,其希望实现车辆与一切可能影响车辆的实体实现信息交互, 目的是减少事故发生,减缓交通拥堵,降低环境污染以及提供其他信息服务.

apollo/modules/guardian

目录名称目录作用
BUILD
conf
cyberfile.xml
dag
guardian.BUILD
guardian_component.cc
launch
proto

apollo/modules/monitor

目录名称目录作用
BUILD
common
cyberfile.xml
dag
hardware
launch
monitor.BUILD
monitor.cc
README.md
software

apollo/modules/routing

目录名称目录作用
BUILD
common
conf
core
cyberfile.xml
dag
graph
launch
proto
README_cn.md
README.md
routing.BUILD
routing.cc
routing_component.cc
routing.h
strategy
tools
topo_creator

apollo/ modules / perception

目录名称目录作用
base基础类
BUILD
camera相机相关
common公共目录
cyberfile.xml
data相机的内参和外参
fusion传感器融合
inference深度学习推理模块
lib一些基础的库,包括线程、文件配置等
lidar激光雷达相关
map地图
onboard各个子模块的入口
perception.BUILD
Perception_README_3_5.md
pipeline
production感知模块入口 — 通过cyber启动子模块
proto数据格式,protobuf
radar毫米波雷达
README.md
README_paddle3D_CN.md
testdata几个模块的测试数据
tool离线测试工具

16 director

apollo/modules / planning

目录名称目录作用
common轨迹合成,拼接。。。。。
conf与模块启动相关的配置,模块配置
constraint_checker约束检查和碰撞检查
dag与模块启动相关的配置,默认建图文件是dag/planning.dag,内部实现模块节点间的通讯配置,构建DAG(有向无环图),dag中再设置了config中的相关配置文件
data
images
integration_tests
lattice
launch与模块启动相关的配置:默认启动文件是launch/planning.launch,它是cyber系统的luanch命令启动相关配置,内部决定了模块间的通讯配置建图文件(*.dag)
learning_based
math曲线求解,优化等
planning_component.cc组件入口
planning_base.ccplanning模块主体
on_lane_planning.ccplanning模块主体
navi_planning.ccplanning模块主体
planner调度器和规划器
scenarios场景管理

apollo/modules/planning/planner

目录名称目录作用
planner.h规划器的基类,里面定义了planning和PlannerWithReferenceLine两个虚类
planner_dispatcher.cc规划分配器
on_lane_planner_dispatcher.cc继承了PlannerDispatcher
navi_planner_dispatcher.cc继承了PlannerDispatcher
lattice
navi
public_road
rtk

.
├── BUILD
├── lattice
├── navi
├── planner_dispatcher.h
├──
├── public_road
└──

apollo/ modules / map

目录名称目录作用
BUILD
cyberfile.xml
data生成好的地图
hdmap高清地图模块,类似一个库,不像其他模块使用发布与订阅机制,它频繁被调用用来检索相关道路的结构信息
map.BUILD
pnc_map给规划控制模块用的地图
relative_map相对地图
testdata/ 测试数据?
tools/ 工具

data

目录名称目录作用
borregas_ave
BUILD
demo
README.md

modules/map/hdmap

目录名称目录作用
adapter从xml文件读取地图(opendrive保存格式为xml)
BUILD
hdmap.cc
hdmap_common.cc
hdmap_impl.cc主要实现了一系列的api来查找道路中的元素。
hdmap_util.cc
test-data

modules/map/hdmap/adapter

目录名称目录作用
BUILD
opendrive_adapter.cc加载opendrive格式地图
proto_organizer.cc
xml_parser, xml_parserxml_parser将会针对道路的不同元素做相应解析

只需要知道map模块的主要功能是“加载opendrive格式的地图,并且提供一系列的API给其他模块使用”。然后再根据具体的场景来了解地图各个部分的作用,就算是对map模块比较了解了。

  • apollo的高精度地图采用了opendrive格式,opendrive是一个统一的地图标准,这样保证了地图的通用性。其中map模块主要提供的功能是读取高精度地图,并且转换成apollo程序中的Map对象。直白一点就是说把xml格式的opendrive高精度地图,读取为程序能够识别的格式。

apollo/ modules / perception

.
├── base  //基础类
├── BUILD
├── camera  //相机检测相关(比如车道线,障碍物检测,红绿灯检测)
├── common  //公共目录
├── cyberfile.xml  
├── data   //相机的参数定义(内参和外参)
├── fusion //传感器融合
├── inference //深度学习推理模块
├── lib  //基础的库,包括线程,时间注册灯
├── lidar //激光雷达相关代码
├── map //地图
├── onboard //每个子模块入口
├── perception.BUILD
├── Perception_README_3_5.md
├── pipeline //流水线代码和统一配置文件
├── production //感知模块入口
├── proto //数据格式
├── radar //毫米级雷达
├── README.md
├── README_paddle3D_CN.md
├── testdata //模块的测试数据
└── tool  //离线测试工具

感知模块主要功能是识别周围环境树木,人,路面,交通灯灯信息,为后面路径规划,控制等做辅助。感知模块主要包含两个子模块:

  • 障碍物检测(3D obstacles perception).
  • 交通信号灯检测(Traffic light perception).

感知模块输入来源于汽车物理感知设备,主要包含激光雷达点云数据,视觉摄像头数据。同时,交通信号灯检测也依赖于其他模块提供的数据,包含定位模块数据,高精地图数据(信号灯实时检测是不可行的或者说是不合理不必要的,原因在于太过耗费计算资源,实际只需要定位与高精度地图模块提供相应的位置信息,指示感知模块在什么时间段与路面段做信号灯检测),E.g.路口需要启动信号灯检测,中间路段只需要障碍物检测,不存在信号灯。

(1) 感知模块输入数据

  • Point cloud data/点云数据 (ROS topic /apollo/sensor/velodyne64/comensator/pointCloud2)
  • Radar data/雷达数据 (ROS topic /apollo/sensor/conti_radar)
  • Image data/图像数据 (ROS topic /apollo/sensor/camera/traffic/image_long & /apollo/sensor/camera/traffic/image_short)
  • Coordinate frame transformation information over time/坐标系转换数据 (ROS topic /tf)
  • HDMap/高精地图
  • Extrinsic parameters of LiDAR sensor calibration/激光雷达传感器矫正外参 (ROS topic /tf_static)
  • Extrinsic parameters of radar sensor calibration/雷达传感器矫正外参 (来自外部YAML文件)
  • Extrinsic and Intrinsic parameters of all camera calibration/所有相机/长焦+短焦相机的内参和外参 (来自外部YAML文件)
  • Velocity of host vehicle/主车体速度 (ROS topic /apollo/localization/pos)

(2) 感知模块输出数据

  • 3D障碍物跟踪的方向,速度以及树,人,车辆等分类信息
  • 交通信号灯的标定框以及信号灯状态信息

预测模块: Prediction

预测模块主要功能为从感知模块获取障碍物信息,包括位置,方向,速度,加速度等。最终预测障碍物未来时刻的运动轨迹。当感知模块发布障碍物信息时,自动触发预测模块。

(1) 预测模块输入数据

  • Obstacles from perception module/感知模块障碍物信息
  • Localization from localization module/定位模块信息

(2) 预测模块输出数据

  • Obstacles additionally with predicted trajectories/障碍物预测轨迹

预测模块函数和功能

  • Contrainer/容器
    • Contrainer存储来自ROS订阅的输入数据,目前版本支持存储感知障碍物(perception onstacles),车辆定位(vehicle localization),车辆轨迹规划(vehicle planning)
  • Evaluator/评估器
    • Evaluator对视野中的每个障碍物独立评估路径和速度。
    • 评估器通过使用保存在prediction/data下的模型数据来对每个车道序列进行路径评估,输出车辆在每个车道的概率
  • Predictor/预测器
    • Predictor最终生成障碍物的预测轨迹,目前支持的预测器有:
      • Lane sequence: 障碍物沿着车道线运动
      • Move sequence: 障碍物遵循汽车动态模式,沿车道线运动
      • Free movement: 障碍物自由运动
      • Regional movement: 障碍物在一定区域内运动

路由模块: Routing

路由模块根据请求(起始地和目的地)生成高层的导航信息,通过一系列的车道线和车道信息,指示车辆如何抵达目的地

(1) 路由模块输入数据

  • Map data/地图数据
  • Routing request/路由请求,包含起始地与目的地位置信息。

(2) 路由模块输出数据

  • 路由导航信息

控制模块: Control

控制模块通过生成诸如节流阀,制动器,转向的控制指令给CanBus模块,执行来自规划模块的时空轨迹命令。

(1) 控制模块输入数据

  • Planning trajectory/规划路径
  • Car status/车辆状态
  • Localization/定位信息
  • Dreamview AUTO mode change request/模式切换请求

(2) 控制模块输出数据

  • control command (steering, throttle, brake) to canbus/具体的控制指令

控制区域网络模块: CanBus

类似于下位机,控制区域网络模块讲来自于控制模块的具体控制指令传递给汽车硬件,同时向上层软件反馈车辆硬件信息。

(1) 控制区域网络模块输入数据

  • Control command/控制指令

(2) 控制区域网络模块输出数据

  • Chassis status/机箱状态
  • Chassis detail status/机箱具体状态

定位模块: Localization

定位模块从不同的信息源,比如GPS(经纬度),LiDAR(距离)和IMU(加速度等)来评估车辆当前的信息。常用的定位技术有两类:

  • 基于RTK(Real-Time Kinematic, 实时动态载波相位差分技术)定位。由OnTimer函数以一定频率触发定位。
  • 多传感器融合(Multiple Sensor Fusion, MSF)定位。由一系列传感器触发函数触发。

(1) 定位模块输入数据

  • RTK-base method.
    • GPS - Global Position System/全球定位系统
    • IMU - Interial Measurement Unit/惯性测量单元
  • MSF method.
    • GPS - Global Position System/全球定位系统
    • IMU - Interial Measurement Unit/惯性测量单元
    • LiDAR - Light Detection And Ranging Sensor/光检测和测距传感器,激光雷达

proto分析

Apollo项目中的很多数据结构都是通过Protocol Buffers定义的。所以你看不到这些类的C++文件,因为C++需要的相关文件是在编译时通过proto文件自动生成的。

Protocol Buffers是Google的开源项目。它具有语言无关,平台无关的特性,并且有很好的可扩展性。Protocol Buffers通常用于序列化结构化数据。

Apollo使用Protocol Buffers的一个很重要的作用是,用它来将结构化数据导出到物理文件中,并且也可以很方便的从物理文件中读取信息。例如,Routing模块需要的Topo地图就是proto结构导出的。另外,如果导出的是文本形式的文件,也可以方便的进行人为的修改。例如,上面提到的routing_config.pb.txt。

proto文件都位于名称为proto的文件夹中,你可以通常下面这条命令在apollo源码的根目录下找到所有的proto文件夹:

apollo$ find . -name proto

role_attributes.proto

SocketAddr

数据类型定义说明
optional stringip = 1;ip地址
optional uint32port = 2;端口

RoleAttributes

数据类型定义说明
optional stringhost_name = 1;common::GlobalData::Instance()->HostName()
optional stringhost_ip = 2;common::GlobalData::Instance()->HostIp()
optional int32process_id = 3;common::GlobalData::Instance()->ProcessId()
optional stringnode_name = 4;当前所属节点名
optional uint64node_id = 5;hash ( node_name)
optional stringchannel_name = 6;当前所关联的管道的名
optional uint64channel_id = 7;hash ( channel_name)
optional stringmessage_type = 8;管道中存放的消息类型
optional bytesproto_desc = 9;protobuf的描述
optional uint64id = 10common::GlobalData::RegisterNode(node_name);
optional QosProfileqos_profile = 11;
optional SocketAddrsocket_addr = 12;reserved for socket communication
optional stringservice_name = 13;
optional uint64service_id = 14;hash value of service_name

parameter.proto

cyber/proto/parameter.proto

参数是节点和节点之间共享的数据

ParamType

定义了参数服务器支持的参数类型

Parameter typeC++ data typeprotobuf data type
apollo::cyber::proto::ParamType::INTint64_tint64
apollo::cyber::proto::ParamType::DOUBLEdoubledouble
apollo::cyber::proto::ParamType::BOOLboolbool
apollo::cyber::proto::ParamType::STRINGstd::stringstring
apollo::cyber::proto::ParamType::PROTOBUFstd::stringstring
apollo::cyber::proto::ParamType::NOT_SET默认值

Param

参数的一些属性

数据类型定义说明
optional stringname = 1;
  • 名称,参数由其“名称”标识
optional  ParamTypetype = 2;
  • 参数类型
optional stringtype_name = 3;
  • type对应的名称
  • 比如ParamType::BOOL对应BOOL
oneofoneof_value
  • 参数值(这是一个枚举)
optional bytesproto_desc = 8;

Params

数据类型定义说明
repeated Paramparam = 1;

NodeName

数据类型定义说明
optional stringvalue = 1;

ParamName

数据类型定义说明
optional stringvalue = 1;

BoolResult

数据类型定义说明
optional bool value = 1;

poi.proto

modules/common_msgs/routing_msgs/poi.proto

Landmark

地图上的一个点,包含了名称和位置信息。

数据类型定义说明
optional stringname = 1;名称
repeated LaneWaypointwaypoint = 2;道路上的路径点,包含了id,长度和位置点信息。
optional stringparking_space_id = 3 [deprecated = true];
optional apollo.routing.ParkingInfoparking_info = 4;

POI

Point of interest的缩写,一个POI中可以包含多个Landmark

数据类型定义说明
repeated Landmarklandmark = 1;

routing_config.proto

modules/routing/proto/routing_config.proto

TopicConfig

数据类型定义说明
optional stringrouting_response_topic = 1;
optional stringrouting_response_history_topic = 2

RoutingConfig

描述了Routing模块的配置信息,routing_gflags.cc中提到的routing_conf_file文件(routing_config.pb.txt)就是这个格式的。

数据类型定义说明
optional doublebase_speed = 1;节点创建者的基本速度[m/s]
optional doubleleft_turn_penalty = 2;节点创建者的左转惩罚[m]
optional doubleright_turn_penalty = 3;节点创建者的右转惩罚[m]
optional doubleuturn_penalty = 4;节点创建者的左转惩罚[m]
optional doublechange_penalty = 5;边缘创建者的更改惩罚[m]
optional doublebase_changing_length =6;边缘创建者的基本更改长度惩罚[m]
optional TopicConfigtopic_config = 7;主题信息配置

routing.proto

modules/common_msgs/routing_msgs/routing.proto

类型名称描述
LaneWaypoint道路上的路径点,包含了id,长度和位置点信息。
LaneSegment道路的一段,包含了id和起止点信息。
RoutingRequest描述了路由请求的信息,一次路由请求可以包含多个路径点。详细结构见下文。
Measurement描述测量的距离。
ChangeLaneType道路的类型,有FORWARD,LEFT,RIGHT三种取值。
Passage一段通路,其中可以包含多个LaneSegment,以及ChangeLaneType。
RoadSegment道路的一段,拥有一个id,并可以包含多个Passage。
RoutingResponse路由请求的响应结果,可以包含多个RoadSegment,距离等信息。

LaneWaypoint

道路上的路径点

数据类型定义说明
optional stringid = 1;
optional doubles = 2;长度
optional apollo.common.PointENUpose = 3;位置点信息
optional doubleheading = 4;当开发人员在dreamview路线编辑上选择一个点时,可以通过拖动鼠标指定方向。dreamview基于此计算航向,以支持构建带有航向的车道点

LaneSegment

道路的一段

数据类型定义说明
optional stringid = 1;
optional doublestart_s = 2;起止点
optional doubleend_s = 3;

ParkingSpaceType

停车类型

enum ParkingSpaceType定义说明
VERTICAL_PLOT = 0;
PARALLEL_PARKING = 1;

DeadEndRoutingType

enum DeadEndRoutingType定义说明
ROUTING_OTHER = 0;
ROUTING_IN = 1;
ROUTING_OUT = 2;

topo_graph.proto

类型名称描述
CurvePoint曲线上的一个点。
CurveRange曲线上的一段。
Node车道上的一个节点,包含了所属车道,道路,长度,曲线起止点,中心线等信息。
Edge连接车道之间的边,包含了起止车道id,代价和方向等信息。
Graph完整地图的Topo结构,这其中包含了多个Node和Edge。

geometry.proto

PointENU

描述了地图上的一个点(map reference frame)。

数据类型定义说明
optional doublex = 1 [default = nan];East from the origin, in meters.
optional doubley = 2 [default = nan];North from the origin, in meters.
optional doublez = 3 [default = 0.0];Up from the WGS-84 ellipsoid, in meters.

在这里插入图片描述

PointLLH

描述了地图上的一个点(global reference frame.)。

数据类型定义说明
optional doublelon = 1 [default = nan];Longitude in degrees, ranging from -180 to 180.
optional doublelat = 2 [default = nan];Latitude in degrees, ranging from -90 to 90.
optional doubleheight = 3 [default = 0.0];WGS-84 ellipsoid height in meters.

Point2D

二维平面上的一个点。其含义和单位取决于上下文,必须在代码中注释补充。

数据类型定义说明
optional doublex = 1 [default = nan];
optional doubley = 2 [default = nan];

Point3D

三维平面上的一个点。其含义和单位取决于上下文,必须在代码中注释补充。

数据类型定义说明
optional doublex = 1 [default = nan];
optional doubley = 2 [default = nan];
optional doublez = 3 [default = nan];

Quaternion

四元数:旋转,应该是三种坐标变换——缩放、旋转和平移,中最复杂的一种了。大家应该都听过,有一种旋转的表示方法叫四元数。

数据类型定义说明
optional doubleqx = 1 [default = nan];
optional doubleqy = 2 [default = nan];
optional doubleqz = 3 [default = nan];
optional doubleqw = 4 [default = nan];

Polygon

map_lane.proto

Lane

  • 车道是道路的一部分,指定供单行车辆使用。
  • 大多数公共道路(包括高速公路)有两条以上的车道。
数据类型定义说明
optional Idid = 1;
optional Curvecentral_curve = 2;作为reference轨迹的中心车道,不必是几何中心。
optional LaneBoundaryleft_boundary = 3;左车道边界,一般是曲线(直线是特殊的曲线)
optional LaneBoundaryright_boundary = 4;右车道边界,一般是曲线
optional doublelength = 5;长度,单位m
optional doublespeed_limit = 6;当前车道上的速度限制,单位m/s
repeated Idoverlap_id = 7;重叠区域id
repeated Idpredecessor_id = 8;所有均可驶入(或驶出)的车道,前任id
repeated Idleft_neighbor_forward_lane_id = 10;同一方向上的相邻车道:左边相邻前方车道id
repeated Idright_neighbor_forward_lane_id = 11;同一方向上的相邻车道:右边相邻前方车道id
optional LaneTypetype = 12;车道类型
optional LaneTurnturn = 13;转弯类型
repeated Idleft_neighbor_reverse_lane_id = 14;左边相邻反方向车道id
repeated Idright_neighbor_reverse_lane_id = 15;右边相邻反方向车道id
optional Idjunction_id = 16;
repeated LaneSampleAssociationleft_sample = 17;中心点与最近左边界之间的关联
repeated LaneSampleAssociationright_sample = 18;中心点与最近右边界之间的关联
optional LaneDirectiondirection = 19车道方向
repeated LaneSampleAssociationleft_road_sample = 20;中心点与最近左路边界之间的关联
repeated LaneSampleAssociationright_road_sample = 21;中心点与最近右路边界之间的关联
enum LaneType车道类型
NONE = 1;
CITY_DRIVING = 2;城市道路
BIKING = 3;自行车
SIDEWALK = 4;人行道
PARKING = 5;停车
enum LaneTurn转弯类型
NO_TURN = 1;直行
LEFT_TURN = 2;左转弯
RIGHT_TURN = 3;右转弯
U_TURN = 4;掉头
enum LaneDirection车道方向
FORWARD = 1;
BACKWARD = 2;
BIDIRECTION = 3;双向

在这里插入图片描述

map_stop_sign.proto

停止信号

数据类型定义说明
optional Idid = 1;编号
repeated Curvestop_line = 2;停止线,Curve曲线应该是基础类型
repeated Idoverlap_id = 3;重叠id
optional StopTypetype = 4;
  enum StopType {
    UNKNOWN = 0;        //未知
    ONE_WAY = 1;        //只有一车道可以停
    TWO_WAY = 2;
    THREE_WAY = 3;
    FOUR_WAY = 4;
    ALL_WAY = 5;
  };

在这里插入图片描述

map_yield_sign.proto

让行标志(美国才有)

数据类型定义说明
optional Idid = 1;编号
repeated Curvestop_line = 2;在哪里结束
repeated Idoverlap_id = 3;重叠id

在这里插入图片描述

map_overlap.proto

map_road.proto

道路的信息,是由一些RoadSection组成

在这里插入图片描述

map_speed_bump.proto

减速带

数据类型定义说明
optional Idid = 1;编号
repeated Idoverlap_id = 2;重叠区域ID
repeated Curveposition = 3;曲线位置

在这里插入图片描述

map_parking.proto

停车区域

ParkingSpace

数据类型定义说明
optional Idid = 1;编号
optional Polygonpolygon = 2;
repeated Idoverlap_id = 3;
optional doubleheading = 4;

在这里插入图片描述

map_clear_area.proto

禁止停车

数据类型定义说明
optional Idid = 1;编号
repeated Idoverlap_id = 2;重叠区域ID
optional Polygonpolygon = 3;多边形

在这里插入图片描述

map_signal.proto

交通信号标志

message Subsignal {
  enum Type {
    UNKNOWN = 1;    //未知
    CIRCLE = 2;     //圈???
    ARROW_LEFT = 3;  //左边
    ARROW_FORWARD = 4;  //前面
    ARROW_RIGHT = 5;    //右边
    ARROW_LEFT_AND_FORWARD = 6;   //左前
    ARROW_RIGHT_AND_FORWARD = 7;  //右前
    ARROW_U_TURN = 8;   //掉头
  };

  optional Id id = 1;
  optional Type type = 2;

  // Location of the center of the bulb. now no data support.
  optional apollo.common.PointENU location = 3;    //也是基础类型?
}

message Signal {
  enum Type {
    UNKNOWN = 1;
    MIX_2_HORIZONTAL = 2;
    MIX_2_VERTICAL = 3;
    MIX_3_HORIZONTAL = 4;
    MIX_3_VERTICAL = 5;
    SINGLE = 6;
  };

  optional Id id = 1;
  optional Polygon boundary = 2;    //多边形
  repeated Subsignal subsignal = 3;   //子信号
  // TODO: add orientation. now no data support.
  repeated Id overlap_id = 4;   //重叠id
  optional Type type = 5;      //这里的类型是主要指交通标识的个数及位置??
  // stop line
  repeated Curve stop_line = 6;     //在哪里结束?
}

在这里插入图片描述

map_sidewalk.proto

路边的小路,或者行人走的路

map_crosswalk.proto

人行横道是为行人指定的横穿道路的地方。

在这里插入图片描述

Crosswalk

数据类型定义说明
optional Idid = 1;编号
optional Polygonpolygon = 2;多边形
repeated Idoverlap_id = 3;重叠ID

在这里插入图片描述

map_junction.proto

Junction

交叉点是两条或多条道路交叉的平面交叉点。

数据类型定义说明
optional Idid = 1;编号
optional Polygonpolygon = 2;多边形
repeated Idoverlap_id = 3;重叠id
optional Typetype = 4;
enum Type定义
UNKNOWN = 0;
IN_ROAD = 1;
CROSS_ROAD = 2;
FORK_ROAD = 3;
MAIN_SIDE = 4;
DEAD_END = 5;

在这里插入图片描述

map.proto

地图消息格式。

map.proto 分为地图头部信息和结构体

  • 头部信息主要介绍了地图的基本信息“版本,时间,投影方法,地图大小,厂家等”。
  • 结构体主要是道路的不同组成部分,包括“人行横道,路口区域,车道,停车观察,信号灯,让路标志,重叠区域,禁止停车,减速带,道路,停车区域,路边的小路,或者行人走的路”。

Projection

这条消息定义了我们如何将椭球地球表面投影到一个平面上。

数据类型定义说明
optional stringproj = 1;
  • Proj4是一个免费的GIS工具,它专注于地图投影的表达以及转换。采用一种非常简单明了的投影表达--PROJ4,比其它的投影定义简单,但很容易就能看到各种地理坐标系和地图投影的参数,同时它强大的投影转换功能,也是非常吸引人的。许多的 GIS软件中也将其集成在内。

Header

数据类型定义说明
optional bytesversion = 1;地图版本
optional bytesdate = 2;时间
optional Projectionprojection = 3;投影方法
optional bytesdistrict = 4;
optional bytesgeneration = 5;
optional bytesrev_major = 6;
optional bytesrev_minor = 7;
optional doubleleft = 8;
optional doubletop = 9;
optional doubleright = 10;
optional doublebottom = 11;
optional bytesvendor = 12;供应商

Map

数据类型定义说明
optional Headerheader = 1;定义了地图的基本信息
repeated Crosswalkcrosswalk = 2;人行横道
repeated Junctionjunction = 3;交叉路口
repeated Lanelane = 4;车道
repeated StopSignstop_sign = 5;停车标志,美国专用
repeated Signalsignal = 6;信号灯
repeated YieldSignyield = 7;让车标志,美国专用
repeated Overlapoverlap = 8;重叠区域
repeated ClearAreaclear_area = 9;禁止停车区域
repeated SpeedBumpspeed_bump = 10;减速带
repeated Roadroad = 11;道路
repeated ParkingSpaceparking_space = 12;停车区域
repeated PNCJunctionpnc_junction = 13;
repeated RSUrsu = 14;
  • (StopSign,YieldSign)是美国才有的,后来查看了下知乎发现对应到国内是(停,让),具体的含义都是一样,停车的意思是到路口先停止,看下有没有车,然后再开始启动,让车就是先让行,比如交汇路口,理应让直行的车辆先通过,然后再汇入道路。 [参考](国内为什么不能采用美国的stop sign制度在很多路口设置呢?)
  • overlap在注释里的解释是“任何一对在地图上重合的东西,包括(车道,路口,人行横道)”,比如路口的人行横道和道路是重叠的,还有一些交通标志和道路也是重叠的,这是创造的一个逻辑概念。

decision.proto

TargetLane

数据类型定义说明
optional stringid = 1;lane的id
optional doublestart_s = 2; // in meters起点
optional doubleend_s = 3; // in meters终点
optional doublespeed_limit = 4; // in m/s限制的速度

ObjectDecisionType

oneofobject_tag
oneof object_tag
ObjectIgnoreignore = 1;忽略
ObjectStopstop = 2;停止
ObjectFollowfollow = 3;跟随
ObjectYieldyield = 4;让行
ObjectOvertakeovertake = 5;超车
ObjectNudgenudge = 6;绕行???
ObjectAvoidavoid = 7;???
ObjectSidePassside_pass = 8;借道通过(从旁边超过)

nudge

在这里插入图片描述

各个行为安全性:

  • Lateral :nudge > ignore;
  • Longitudinal:stop > yield >= follow > overtake > ignore

ignore 是最不安全的,表示车辆并没有正在执行某种已知的行为。

ObjectDecision

optional stringid = 1;字符串的id,
optional int32perception_id = 2;感知目标的id
repeated ObjectDecisionTypeobject_decision = 3;目标的决策类型

ObjectDecisions

repeated ObjectDecisiondecision = 1;多个ObjectDecision

MainDecision

主任务

oneoftask当前的任务是哪个
repeated TargetLanetarget_lane = 5 [deprecated = true];
one task
MainCruisecruise = 1;
MainStopstop = 2;
MainEmergencyStopestop = 3;
MainChangeLanechange_lane = 4 [deprecated = true];
MainMissionCompletemission_complete = 6;
MainNotReadynot_ready = 7;
MainParkingparking = 8;

DecisionResult

optional MainDecisionmain_decision = 1;主要决策
optional ObjectDecisionsobject_decision = 2;目标决策
optional apollo.common.VehicleSignalvehicle_signal = 3;车辆信号

sl_boundary.proto

SLBoundary

/
// The start_s and end_s are longitudinal values.
// start_s <= end_s.
//
//              end_s
//                ^
//                |
//          S  direction
//                |
//            start_s
//
// The start_l and end_l are lateral values.
// start_l <= end_l. Left side of the reference line is positive,
// and right side of the reference line is negative.
//  end_l  <-----L direction---- start_l
/
optional doublestart_s = 1;
optional doubleend_s = 2;
optional doublestart_l = 3;
optional doubleend_l = 4;
repeated apollo.common.SLPointboundary_point = 5;

common/proto/pnc_point.proto

SLPoint

描述了Frenet坐标系上的一个点

数据类型定义说明
optional doubles = 1;s表示距离起点的纵向距离。 起点怎么定义???
optional doublel = 2;l表示距离中心线的侧向距离

PathPoint

数据类型定义说明
optional doublex = 1;坐标
optional doubley = 2;坐标
optional doublez = 3;坐标
optional doubletheta = 4;x-y平面上的方向
optional doublekappa = 5;x-y规划中的曲率
optional doubles = 6;距离路径起点的累积距离
optional doubledkappa = 7;kappa w.r.t s的导数。
optional doubleddkappa = 8;kappa w.r.t的导数。
optional stringlane_id = 9;路径点所在的车道ID
optional doublex_derivative = 10;CosThetareferenceline中x和y与参数t的导数
optional doubley_derivative = 11;CosThetareferenceline中x和y与参数t的导数

Path

数据类型定义说明
optional stringname = 1;
repeated PathPointpath_point = 2;一个路径是由很多路径上的点组成的

TrajectoryPoint

轨迹点

  • ”轨迹“不同于“路径”,“轨迹”不仅仅包含了行驶路线,还要包含每个时刻的车辆的速度,加速度,方向转向等信息。
  • 就和高精地图通过一系列的点来描述道路的中心线一样,车辆的行驶轨迹也是由一系列的点来描述的。

轨迹中的点通过TrajectoryPoint这个结构来描述。它的字段说明如下:

数据类型定义说明
optional PathPointpath_point = 1;
  • 描述了一个点的位置,曲率,朝向,所属车道等信息。
optional doublev = 2;
  • [m/s],线速度,描述车辆的速度。
  • 物体上任一点对定轴作圆周运动时的速度称为“线速度”|
optional doublea = 3;
  • 线性加速度。描述车辆的加速度。
optional doublerelative_time = 4;
  • 描述车辆达到该点的相对时间(以轨迹的开始为起点)。
optional doubleda = 5;
  • 纵向加速度,是加速度的导数
optional doublesteer = 6;
  • 车辆前轮与车辆纵轴之间的角度
optional GaussianInfogaussian_info = 7;
  • 高斯概率信息。表示车辆的前轮方向。

TrajectoryPoint仅仅是一个点。而一条轨迹一定是由许多个点构成的。因此,描述轨迹的类DiscretizedTrajectory继承自std::vector< common::TrajectoryPoint>。如下所示:

class DiscretizedTrajectory : public std::vector<common::TrajectoryPoint>

Trajectory

optional stringname = 1;
repeated TrajectoryPointtrajectory_point = 2;

VehicleMotionPoint

车辆移动点

optional TrajectoryPointtrajectory_point = 1;轨迹点
optional doublesteer = 2;车辆前轮与车辆纵轴之间的角度

VehicleMotion

optional stringname = 1;
repeated VehicleMotionPointvehicle_motion_point = 2;

GaussianInfo

optional doublesigma_x = 1;高斯分布信息
optional doublesigma_y = 2;高斯分布信息
optional doublecorrelation = 3;高斯分布信息
optional doublearea_probability = 4;代表性不确定区域信息
optional doubleellipse_a = 5;代表性不确定区域信息
optional doubleellipse_b = 6;代表性不确定区域信息
optional doubletheta_a = 7;代表性不确定区域信息

TaskStats

在planning.proto中定义;

optional stringname = 1;任务的名字
optional doubletime_ms = 2;运行时间

LatencyStats

潜在的状态, 在planning.proto中定义;

optional doubletotal_time_ms = 1;总时间
repeated TaskStatstask_stats = 2;任务的状态
optional doubleinit_frame_time_ms = 3;初始frame的时间

ADCTrajectory

ADCTrajectory的字面意思地自动驾驶车的轨迹, 在planning.proto中定义;

apollo.common.Headerheader = 1;
optional doubletotal_path_length = 2;总路径的长度, 单位是米meters;
optional doubletotal_path_time = 3;总路径的时间, 单位是seconds;
optional EStopestop = 6;是否有紧急停车
optional apollo.planning_internal.Debugdebug = 8;
optional boolis_replan = 9 [default = false];是否重新规划i\
optional apollo.canbus.Chassis.GearPositiongear = 10;具体的档位位置
repeated apollo.common.TrajectoryPointtrajectory_point = 12;重复的轨迹点
repeated apollo.common.PathPointpath_point = 13;路径点PathPoint(没有速度信息)。
optional apollo.planning.DecisionResultdecision = 14;planning的决策结果
optional LatencyStats latency_stats = 15;潜在的状态
optional apollo.common.Headerrouting_header = 16;
optional RightOfWayStatusright_of_way_status = 17;道路右边的状态;
repeated apollo.hdmap.Idlane_id = 18;沿车道中线参考线的lane ID;
optional apollo.common.EngageAdviceengage_advice = 19;根据当前的计划结果设置engage的建议; – 这是一个遇到critical时才给予的运行时建议。
optional CriticalRegioncritical_region = 20;致命区域
optional TrajectoryTypetrajectory_type = 21 [default = UNKNOWN];轨迹的类型:不知道是什么类型, 正常的类型, 路径反馈的类型, 速度反馈的类型;

optional string replan_reason = 22;

// lane id along target reference line
repeated apollo.hdmap.Id target_lane_id = 23;

// complete dead end flag
optional bool car_in_dead_end = 24;

// output related to RSS
optional RSSInfo rss_info = 100;

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值