/****************Apollo源码分析****************************
Copyright 2018 The File Authors & zouyu. All Rights Reserved.
Contact with: 1746430162@qq.com 181663309504
源码主要是c++实现的,也有少量python,git下载几百兆,其实代码不太多,主要是地图和数据了大量空间,主要程序
在apollo/modules目录中,
在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)控制汽车.
(识别车辆行人路况标志等),并预测下一步发展;然后把已知信息都传入规划模块(planning),规划出之后的轨道;
控制模块(control)将轨道数据转换成对车辆的控制信号,通过汽车交互模块(canbus)控制汽车.
我觉得这里面算法技术含量最高的是感知perception和规划planning,具体请见本博客中各模块的分析代码。
/****************************************************************************************
/******************************************************************************
* Copyright 2017 The Apollo Authors. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*****************************************************************************/
#include "modules/perception/obstacle/base/object_supplement.h"
namespace apollo {
namespace perception {
/**RadarFrameSupplement implementation*/
RadarFrameSupplement::RadarFrameSupplement() {}
RadarFrameSupplement::~RadarFrameSupplement() {}
RadarFrameSupplement::RadarFrameSupplement(const RadarFrameSupplement& rhs) {}
RadarFrameSupplement& RadarFrameSupplement::operator=(
const RadarFrameSupplement& rhs) {
return (*this);
}
void RadarFrameSupplement::clone(const RadarFrameSupplement& rhs) {}
/**CameraFrameSupplement implementation*/
CameraFrameSupplement::CameraFrameSupplement() {}
CameraFrameSupplement::~CameraFrameSupplement() {}
CameraFrameSupplement::CameraFrameSupplement(const CameraFrameSupplement& rhs) {
rhs.depth_map.copyTo(depth_map);
rhs.label_map.copyTo(label_map);
rhs.lane_map.copyTo(lane_map);
}
CameraFrameSupplement& CameraFrameSupplement::operator=(
const CameraFrameSupplement& rhs) {
rhs.depth_map.copyTo(depth_map);
rhs.label_map.copyTo(label_map);
rhs.lane_map.copyTo(lane_map);
return (*this);
}
void CameraFrameSupplement::clone(const CameraFrameSupplement& rhs) {
rhs.depth_map.copyTo(depth_map);
rhs.label_map.copyTo(label_map);
rhs.lane_map.copyTo(lane_map);
}
/**RadarSupplement implementation*/
RadarSupplement::RadarSupplement() {}
RadarSupplement::~RadarSupplement() {}
RadarSupplement::RadarSupplement(const RadarSupplement& rhs) {
range = rhs.range;
angle = rhs.angle;
relative_radial_velocity = rhs.relative_radial_velocity;
relative_tangential_velocity = rhs.relative_tangential_velocity;
radial_velocity = rhs.radial_velocity;
}
RadarSupplement& RadarSupplement::operator=(const RadarSupplement& rhs) {
range = rhs.range;
angle = rhs.angle;
relative_radial_velocity = rhs.relative_radial_velocity;
relative_tangential_velocity = rhs.relative_tangential_velocity;
radial_velocity = rhs.radial_velocity;
return (*this);
}
void RadarSupplement::clone(const RadarSupplement& rhs) {
range = rhs.range;
angle = rhs.angle;
relative_radial_velocity = rhs.relative_radial_velocity;
relative_tangential_velocity = rhs.relative_tangential_velocity;
radial_velocity = rhs.radial_velocity;
}
/**CameraSupplement implementation*/
CameraSupplement::CameraSupplement() {}
CameraSupplement::~CameraSupplement() {}
CameraSupplement::CameraSupplement(const CameraSupplement& rhs) {
upper_left = rhs.upper_left;
lower_right = rhs.lower_right;
local_track_id = rhs.local_track_id;
alpha = rhs.alpha;
pts8.assign(rhs.pts8.begin(), rhs.pts8.end());
front_upper_left = rhs.front_upper_left;
front_lower_right = rhs.front_lower_right;
back_upper_left = rhs.back_upper_left;
back_lower_right = rhs.back_lower_right;
}
CameraSupplement& CameraSupplement::operator=(const CameraSupplement& rhs) {
upper_left = rhs.upper_left;
lower_right = rhs.lower_right;
local_track_id = rhs.local_track_id;
alpha = rhs.alpha;
pts8.assign(rhs.pts8.begin(), rhs.pts8.end());
front_upper_left = rhs.front_upper_left;
front_lower_right = rhs.front_lower_right;
back_upper_left = rhs.back_upper_left;
back_lower_right = rhs.back_lower_right;
return (*this);
}
void CameraSupplement::clone(const CameraSupplement& rhs) {
upper_left = rhs.upper_left;
lower_right = rhs.lower_right;
local_track_id = rhs.local_track_id;
alpha = rhs.alpha;
pts8.assign(rhs.pts8.begin(), rhs.pts8.end());
front_upper_left = rhs.front_upper_left;
front_lower_right = rhs.front_lower_right;
back_upper_left = rhs.back_upper_left;
back_lower_right = rhs.back_lower_right;
}
} // namespace perception
} // namespace apollo
/******************************************************************************
* Copyright 2017 The Apollo Authors. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*****************************************************************************/
#include
"modules/perception/obstacle/base/object_supplement.h"
namespace
apollo
{
namespace
perception
{
/**RadarFrameSupplement implementation*/
RadarFrameSupplement::RadarFrameSupplement
() {}
RadarFrameSupplement::~RadarFrameSupplement
() {}
RadarFrameSupplement::RadarFrameSupplement
(
const
RadarFrameSupplement
&
rhs) {}
RadarFrameSupplement
&
RadarFrameSupplement::
operator
=
(
const
RadarFrameSupplement
&
rhs) {
return
(
*
this
);
}
void
RadarFrameSupplement::clone
(
const
RadarFrameSupplement
&
rhs) {}
/**CameraFrameSupplement implementation*/
CameraFrameSupplement::CameraFrameSupplement
() {}
CameraFrameSupplement::~CameraFrameSupplement
() {}
CameraFrameSupplement::CameraFrameSupplement
(
const
CameraFrameSupplement
&
rhs) {
rhs.
depth_map
.
copyTo
(depth_map);
rhs.
label_map
.
copyTo
(label_map);
rhs.
lane_map
.
copyTo
(lane_map);
}
CameraFrameSupplement
&
CameraFrameSupplement::
operator
=
(
const
CameraFrameSupplement
&
rhs) {
rhs.
depth_map
.
copyTo
(depth_map);
rhs.
label_map
.
copyTo
(label_map);
rhs.
lane_map
.
copyTo
(lane_map);
return
(
*
this
);
}
void
CameraFrameSupplement::clone
(
const
CameraFrameSupplement
&
rhs) {
rhs.
depth_map
.
copyTo
(depth_map);
rhs.
label_map
.
copyTo
(label_map);
rhs.
lane_map
.
copyTo
(lane_map);
}
/**RadarSupplement implementation*/
RadarSupplement::RadarSupplement
() {}
RadarSupplement::~RadarSupplement
() {}
RadarSupplement::RadarSupplement
(
const
RadarSupplement
&
rhs) {
range
=
rhs.
range
;
angle
=
rhs.
angle
;
relative_radial_velocity
=
rhs.
relative_radial_velocity
;
relative_tangential_velocity
=
rhs.
relative_tangential_velocity
;
radial_velocity
=
rhs.
radial_velocity
;
}
RadarSupplement
&
RadarSupplement::
operator
=
(
const
RadarSupplement
&
rhs) {
range
=
rhs.
range
;
angle
=
rhs.
angle
;
relative_radial_velocity
=
rhs.
relative_radial_velocity
;
relative_tangential_velocity
=
rhs.
relative_tangential_velocity
;
radial_velocity
=
rhs.
radial_velocity
;
return
(
*
this
);
}
void
RadarSupplement::clone
(
const
RadarSupplement
&
rhs) {
range
=
rhs.
range
;
angle
=
rhs.
angle
;
relative_radial_velocity
=
rhs.
relative_radial_velocity
;
relative_tangential_velocity
=
rhs.
relative_tangential_velocity
;
radial_velocity
=
rhs.
radial_velocity
;
}
/**CameraSupplement implementation*/
CameraSupplement::CameraSupplement
() {}
CameraSupplement::~CameraSupplement
() {}
CameraSupplement::CameraSupplement
(
const
CameraSupplement
&
rhs) {
upper_left
=
rhs.
upper_left
;
lower_right
=
rhs.
lower_right
;
local_track_id
=
rhs.
local_track_id
;
alpha
=
rhs.
alpha
;
pts8.
assign
(rhs.
pts8
.
begin
(), rhs.
pts8
.
end
());
front_upper_left
=
rhs.
front_upper_left
;
front_lower_right
=
rhs.
front_lower_right
;
back_upper_left
=
rhs.
back_upper_left
;
back_lower_right
=
rhs.
back_lower_right
;
}
CameraSupplement
&
CameraSupplement::
operator
=
(
const
CameraSupplement
&
rhs) {
upper_left
=
rhs.
upper_left
;
lower_right
=
rhs.
lower_right
;
local_track_id
=
rhs.
local_track_id
;
alpha
=
rhs.
alpha
;
pts8.
assign
(rhs.
pts8
.
begin
(), rhs.
pts8
.
end
());
front_upper_left
=
rhs.
front_upper_left
;
front_lower_right
=
rhs.
front_lower_right
;
back_upper_left
=
rhs.
back_upper_left
;
back_lower_right
=
rhs.
back_lower_right
;
return
(
*
this
);
}
void
CameraSupplement::clone
(
const
CameraSupplement
&
rhs) {
upper_left
=
rhs.
upper_left
;
lower_right
=
rhs.
lower_right
;
local_track_id
=
rhs.
local_track_id
;
alpha
=
rhs.
alpha
;
pts8.
assign
(rhs.
pts8
.
begin
(), rhs.
pts8
.
end
());
front_upper_left
=
rhs.
front_upper_left
;
front_lower_right
=
rhs.
front_lower_right
;
back_upper_left
=
rhs.
back_upper_left
;
back_lower_right
=
rhs.
back_lower_right
;
}
}
// namespace perception
}
// namespace apollo