引言
apollo自动驾驶框架是优秀的开源工程。作为自动驾驶开发人员,无论是架构设计还是算法细节的完善,apollo都有很多值得学习的地方。但是按照官方提供的GDB环境配置来看,复杂导致实际的调试效率低下。本文带你快速用vscode搭建起一个debug环境,快速上手使用apollo!
1.安装环境
主机系统:18.04.5 LTS(Bionic Beaver)
运行内存:16G
显卡:NVIDIA GTX 2080 8G
apollo 6.02.前置安装
2.1 安装apollo的环境
这部分安装的相关教程可以参考官方文档,或者参考以下链接的文章
自动驾驶开发者说| 框架 |如何快准狠的安装apollo6.0? - 冯偲的文章 - 知乎
2.2 vscode 插件安装--Remote - Containers
Remote - Containers可以进入docker容器里,结合vscode使用可以实现容器内的代码修改和调试。在vscode扩展功能中可以搜索并安装。
2.3 启动Apollo环境
cd apollo/
bash docker/scripts/dev_start.sh 完成启动之后使用docker ps查看所有的apollo镜像完成启动
![]()
图1 apollo docker列表
3. 在vscode中进入容器
完成所有前置安装和准备工作后,我们可以通过Remote-Containers这个工具进入Apollo的docker中了。步骤如下:
![]()
图 2 Remote-Containers 使用
完成之后,在新弹出的vscode界面中的左下角会显示当前的docker容器信息。
![]()
图3 进入docker内的vscode界面
4. 进行Remote-Containers在容器内的配置
如图3 中在命令窗口中,选择Open Container Configuration File,打开容器配置文件,配置进入容器后的一些环境变量,用户等,参考配置如下:注意:"remoteUser"需要修改成远程调试的用户名。
{
"extensions": [
"BazelBuild.vscode-bazel",
"DamianKoper.gdb-debug",
"eamodio.gitlens",
"GitHub.vscode-pull-request-github",
"Gruntfuggly.todo-tree",
"jeff-hykin.better-cpp-syntax",
"mhutchie.git-graph",
"MS-CEINTL.vscode-language-pack-zh-hans",
"ms-vscode-remote.remote-containers",
"ms-vscode-remote.remote-ssh",
"ms-vscode-remote.remote-ssh-edit",
"ms-vscode-remote.remote-wsl",
"ms-vscode.cmake-tools",
"ms-vscode.cpptools",
"ms-vscode.cpptools-extension-pack",
"ms-vscode.cpptools-themes",
"ms-vsliveshare.vsliveshare",
"twxs.cmake"
],
"workspaceFolder": "/apollo",
"remoteUser": "fc",
"remoteEnv": {
"HISTFILE": "/apollo/.dev_bash_hist"
}
}
5. 开始调试
1. 进入Apollo的目录, 重新编译Apollo代码,生成可调式的可执行文件。
bash apollo.sh build_dbg2. 配置vscode的调试文件launch.json,参考如下
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "g++ - 生成和调试活动文件",
"type": "cppdbg",
"request": "launch",
"program": "/apollo/bazel-bin/cyber/mainboard",
"args": ["-d","/apollo/modules/perception/production/dag/dag_streaming_perception.dag"],
"stopAtEntry": false,
"cwd": "/apollo",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
// "preLaunchTask": "C/C++: g++ 生成活动文件",
"miDebuggerPath": "/usr/bin/gdb"
}
]
}参数解释:
"program":是可执行文件的的路径,在这个调试配置中,调用的是mainboard可执行文件,该可执行程序可以加载相关模块的dag文件,完成模块的启动和运行。
"args" :设置可执行文件的输入参数 "-d"为mainboard的参数,表明输入dag文件式,"/apollo/modules/perception/production/dag/dag_streaming_perception.dag为需要调试的dag文件,这个文件可以根据你自己的需要更改。
3. 打断点,按下F5调试。
![]()
图4 调试界面
6. 总结:
上述步骤完成之后便可以深入浅出的学习和了解Apollo各个模块的详细设计了,祝你在自动驾驶的路上越走越远,也希望无人驾驶的那个时代更快到来。
往期回顾:
往期回顾:
自动驾驶开发者说| 仿真 | 如何利用开源的自动驾驶仿真环境?
自动驾驶开发者说|仿真|如何安装配置lgsvl-apollo联调环境?
自动驾驶开发者说|框架|如何找到apollo感知模块的爽点?
自动驾驶开发者说| 框架 |如何快准狠的安装apollo6.0?
自动驾驶开发者说|行业|如何看待特斯拉传感器的部署?
自动驾驶开发者说|行业|如何看待无人驾驶汽车的发展?
自动驾驶开发者说 | 数据集 | 如何使用KITTI数据?
自动驾驶开发者说 | 前沿|如何进行LiDAR-Camera(雷达-相机)的联合标定?
自动驾驶开发者说|前沿|如何用360度全景图来深度估计?
自动驾驶开发者说|前沿|如何进行多传感器的融合? |
|