本文链接地址: 使用VSCode 调试Apollo无人车代码 - 慢慢的回味
深入研究Apollo的代码是学习自动驾驶的很好途径。很多前沿科技,比如图像识别,激光雷达,多传感器融合,路径规划都可以直接完整的学习。能够直接调试代码是比读代码更能加深理解。本文就介绍怎么去调试Apollo的代码。
Content:
- 下载代码
- 安装Docker
- 安装无线网卡驱动(可选)
- 安装Nvidia驱动
- 安装Nvidia Docker
- 启动Apollo项目
- 调试一个车道线识别程序
下载代码
系统使用Ubuntu 18.04版本。
https://gitee.com/ApolloAuto/apollo.git
比如目录为~/apollo。
安装Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
systemctl daemon-reload
systemctl restart docker
|
安装无线网卡驱动(可选)
下载驱动:https://codeload.github.com/gnab/rtl8812au/zip/refs/heads/master
make dkms_install
echo 8812au | sudo tee -a /etc/modules
insmod 8812au.ko
|
安装Nvidia驱动
本人的显卡为GTX1060。Apollo项目需要Nvidia显卡,否则大部分模块无法编译。
sudo apt-get install linux-headers-$(uname -r)
distribution=$(. /etc/os-release;echo $ID$VERSION_ID | sed -e 's/\.//g')
wget https://developer.download.nvidia.com/compute/cuda/repos/$distribution/x86_64/cuda-$distribution.pin
sudo mv cuda-$distribution.pin /etc/apt/preferences.d/cuda-repository-pin-600
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/$distribution/x86_64/7fa2af80.pub
echo "deb http://developer.download.nvidia.com/compute/cuda/repos/$distribution/x86_64 /" | sudo tee /etc/apt/sources.list.d/cuda.list
sudo apt-get update
sudo apt-get -y install cuda-drivers
export PATH=$PATH:/usr/local/cuda-11.2/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.2/lib64:/usr/local/cuda/cuda/lib64
|
安装完成后,如下命令可以查看显卡信息。
安装Nvidia Docker
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) && curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - && curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
sudo apt-get install -y nvidia-docker2
sudo systemctl restart docker
|
安装完成后,可启动示例Dockers程序查看。
sudo docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi
|
启动Apollo项目
在源码目录~/apollo中,执行如下命令,进入Apollo Docker:
./docker/scripts/dev_start.sh
./docker/scripts/dev_into.sh
|
以后进入,直接启动已有的Docker即可:
docker ps -a
docker start 671567b64765
./docker/scripts/dev_into.sh
|
调试一个车道线识别程序
创建一个Bazel编译配置:
~/apollo/modules/perception/camera/test/BUILD
内容为:
load("@rules_cc//cc:defs.bzl", "cc_library", "cc_test")
load("//tools:cpplint.bzl", "cpplint")
package(default_visibility = ["//visibility:public"])
cc_test(
name = "camera_lib_lane_detector_darkscnn_lane_detector_test",
size = "medium",
srcs = ["camera_lib_lane_detector_darkscnn_lane_detector_test.cc"],
deps = [
"//cyber",
"//modules/perception/base",
"//modules/perception/camera/lib/lane/detector/darkSCNN:darkSCNN_lane_detector",
"//modules/perception/common/io:io_util",
"@com_google_googletest//:gtest_main",
"@opencv//:core",
],
)
cpplint()
|
现在可以编译Apollo程序了:
启动GDB Server,供Docker外面的VS Code进行远程调试:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/libtorch_gpu/lib/
apt update
apt install gdbserver
gdbserver 127.0.0.1:2222 bazel-bin/modules/perception/camera/test/camera_lib_lane_detector_darkscnn_lane_detector_test
|
启动VS Code,安装C++插件,然后点击Debug,添加如下配置即可调试Docker里面刚才启动的程序:(注意修改program的路径)
{
"version": "0.2.0",
"configurations": [
{
"name": "gdb Remote camera_lib_lane_postprocessor_darkscnn_lane_postprocessor_test",
"type": "cppdbg",
"request": "launch",
"program": "~/apollo/.cache/bazel/540135163923dd7d5820f3ee4b306b32/execroot/apollo/bazel-out/k8-dbg/bin/modules/perception/camera/test/camera_lib_lane_detector_darkscnn_lane_detector_test",
"args": ["myarg1", "myarg2", "myarg3"],
"stopAtEntry": true,
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "gdb",
"miDebuggerArgs": "gdb",
"linux": {
"MIMode": "gdb",
"miDebuggerPath": "/usr/bin/gdb",
"miDebuggerServerAddress": "127.0.0.1:2222",
},
"logging": {
"moduleLoad": false,
"engineLogging": false,
"trace": false
},
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"cwd": "${workspaceFolder}",
}
]
}
|