1 背景
在上一篇博文中介绍了Autoware的仿真,其中各模块的算法大家可以做些了解,但是和主流自驾公司还是有些区别,而且Apollo的算法相对来说还是更贴近量产方案的,因此本篇主要介绍Apollo最新版本8.0的安装调试。(本篇依然以PNC的角度进行仿真)
2 安装
系统环境依赖:Ubuntu20.04 + Docker + VSCode + Apollo8.0
这里就不去安装nvidia的显卡驱动了,调试Planning模块用处不是特别大,如果是感知模块的同学,可以考虑安装。
2.1 安装docker
仍然是参考官方文档,有详细介绍。
https://docs.docker.com/engine/install/ubuntu/
https://docs.docker.com/engine/install/linux-postinstall/
2.2 安装vscode
直接官网下载安装即可:Visual Studio Code。
2.3 下载Apollo8.0代码
因为笔者这里下载了最新的全量源码,所以在编译完成时的空间占用较多,且较为耗时,网上也有安装部分模块的文档,可以参考。(默认是master分支,可以切到release-8.0分支)
git clone https://github.com/ApolloAuto/apollo.git
2.4 启动docker容器
进入工作目录,然后启动docker
cd ~/apollo
bash docker/scripts/dev_start.sh
2.5 启动vscode绑定Apollo的docker
(1)在vscode的左侧栏中可以找到Apollo的container,Attach即可进入Apollo的工程,在vscode下面的命令窗口可进行下一步编译操作(推荐使用这种方式,个人体验后认为后续Debug调试更方便一些);
(2)也可在vscode外面的命令窗口进入docker环境(对于比较喜欢命令行的同学也可使用这种方式Debug)
bash docker/scripts/dev_into.sh
2.6 进入docker后,执行编译命令
sudo bash apollo.sh build
这个环节耗时比较久,第一次全量编译,会把整个Apollo工程都编译,后续可选编某一个模块,如planning模块的编译:
sudo bash apollo.sh build planning
3 仿真
3.1 启动DreamView
在docker中执行命令:
bash scripts/bootstrap.sh
在浏览器中网址栏输入:http://localhost:8888
3.2 DreamView配置
(1)配置Tasks
如上图所示,选择左侧竖栏标签“Tasks”,然后在右上角工具栏配置车型和地图场景,在下方的“Others”栏中选择“Sim Control”。
(2)配置Module Controller
如上图所示,选择左侧竖栏标签“Module Controller”,然后在下方的“Modules”栏中选择“Routing”和“Planning”。
(3)配置Route Editing
如上图所示,选择左侧竖栏标签“Route Editing”,在地图中先后选择起点和终点,然后点击上方的“Send Routing Request”。
随后会在图形界面出现换道的轨迹,并且车也会进行自动驾驶。
到此,完成了planning模块的仿真链路,后续如果换地图场景,可下载选配。
4 Debug调试
4.1 gdb命令调试
网上大部分都是老版本的debug调试,编译成功后会直接生成planning的可执行文件(老版本是有planning.cc的文件),从8.0的版本来看,编译完成后不再会生成planning整个模块的可执行文件,而是通过cyber里的mainboard来进行调度动态库的形式来运行程序。最终还是参考官方文档来进行debug的操作。(https://github.com/ApolloAuto/apollo/blob/r8.0.0/docs/14_Others/%E4%BB%A3%E7%A0%81%E5%AE%9E%E8%B7%B5/how_to_debug.md)
修改完代码且顺利编译后,在Docker内部使用gdb调试指令即可,主要操作如下:
# set break point
b modules/planning/tasks/optimizers/path_optimizer.cc:46
# run
r
# display break point
info b
# delete break point
d num
# continue
c
# one step run
n
# step into
s
# exit gdb debug
q
4.2 VScode中打断点debug
主要注意以下两点:
(1)编译时选择debug模式;
(2)写好launch.json文件;
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb)Launch Apollo Planning",
"type": "cppdbg",
"request": "launch",
"program": "/apollo/bazel-bin/cyber/mainboard/mainboard",
"args": [
"-d",
"/apollo/modules/planning/dag/planning.dag"
],
"stopAtEntry": false,
"cwd": "/apollo", //${workspaceFolder}
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "-enable-pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"miDebuggerPath": "/usr/bin/gdb"
}
]
}
最终呈现的效果如下:
5 总结
本篇文章主要参考了Apollo社区的安装使用文档以及项目中自带的debug帮助文档进行调试,vscode在这里扮演命令窗口和查看代码工具的功能。本篇文章并没有介绍如何在vscode中打断点进行debug的教程,其实原理是一样的,通过启动mainboard来加载planning模块,后续也会更新进来。
总体来说,Apollo的planning模块相对还是比较全的,对于即将从事或者已经从事自动驾驶行业的同学来说,使用这套工具来进行开发和优化自己想做的内容还是比较合适的。