文章目录
简介
本篇记录了从2021.09-2021.11.21以来, 在复现论文AVFI Fault Injection for Autonomous Vehicles
的过程中遇到的所有问题, 以及对应的解决方案.
注意: 本文侧重记录分享所有我踩过的坑, 各位碰到相似问题可以参考, 复现的过程仅简要描述
需要环境
Ubuntu18.04
UnrealEngine
, 推荐版本4.26Carla Server
和Carla Client
, 作者建议均使用0.8.1
版本的, 但是我实测0.8.1
版本的Client和0.9.13
版本的Server也可以成功运行.AVFI
项目代码- 其余的一些系统和python依赖
其中, 作者给出的AVFI/Dockerfile_x86
可以安装Carla Client 0.8.1
和依赖, 因此需要我们手动去安装的只有UnrealEngine
和Carla Server
我的环境
Ubuntu9.3.0-KylinV2
UnrealEngine 4.26
Carla Server 0.9.13
,Carla Client 0.8.1
这里最大的隐患就是这个系统, 虽然麒麟系统底层也是Ubuntu, 但是这个Ubuntu版本太低了, 而且很多apt-repository是不支持麒麟系统的.
安装
Docker
第一步, 安装docker, 具体步骤不再赘述, 请参考其他博客.
唯一需要注意的是, 务必安装Docker 20
之后的版本, 更早的版本是不支持--runtime
和--gpus
两个参数的.
修改Dockerfile_x86
安装完毕之后, cd AVFI/
进入AVFI
的根目录. 先重命名Dockerfile_x86
:
mv Dockerfile_x86 Dockerfile
如果你不能"科学上网"的话, 需要在里面做一些修改, 不然有些依赖安装不了. (可以科学上网的话, 请跳过这一步).
使用文本编辑器打开Dockerfile
, 在所有pip
安装的位置加上-i https://pypi.tuna.tsinghua.edu.cn/simple
, 指定使用清华源, 加速下载. 修改完后的部分如下:
建立镜像
用以下的命令建立avfi_carla
镜像:
(sudo) docker build -t avfi_carla .
此过程可能比较耗时.
此部分完成后, Carla Client 0.8.1
已经成功安装. 但是需要在docker
环境下运行.
UnrealEngine&Carla Server
此处作者建议同样使用0.8.1
版本的, 但是这个版本太老, 已经找不到这个版本的官方文档. 因此我安装了0.9.13
版本的. 也能跑通.
请按照官方文档的描述安装
部分系统无法添加apt-r
这里有些坑记录一下. 在Kylin
系统中, 官方的文档中, 以下两行命令是执行不了的
sudo add-apt-repository ppa:ubuntu-toolchain-r/test &&
sudo apt-add-repository "deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-8 main" &&
既然连repo都没办法添加, 那么后续的sudo apt update
也就不必要了.
幸运的是, 这不影响后续依赖的安装, 官方的文档中, 以下所有依赖都是可以正常安装的
UnrealEngine的github repo
UnrealEngine
的github repo不是公开的, 需要在Epic注册账号, 然后和github账号做一个connection, 这一步可能需要重复多次才能成功. 尝试一两次发现还是进不去repo是正常的.
patchelf
按照官方文档进行到Part Two: Build CARLA -> Get Assets
的时候, 在运行./Update
时可能以下错误
cp: unable to reach /path/to/carla/Build/patchelf-install/bin/patchelf: no such file or directory
这里并不是说patchelf
没有安装, 而是被安装在了别的路径, 因此执行以下命令即可解决, 作用是新建一个连接指向patchelf
真正被安装的路径.
cd /path/to/carla/Build/patchelf-install
(sudo) mkdir bin
cd bin
(sudo) ln -s patchelf $(whereis patchelf)
系统版本检查
最后在Build Carla -> Compile the Python API client
这一步的make PythonAPI
时, 会报错(具体信息记不清了), 是PythonClient/setup.py
文件里面某一行的一个if
判断, 如下
# 原来的
if liinux_distro_lower() in ['ubuntu', 'debian', 'deepin']:
# 把这一行注释掉, 修改为
if True:
简单来说就是去掉这个版本检查, 我这里程序能够顺利照常进行.
read-only filesystem
一开始在另一台Ubuntu18.04的机子上跑的时候, 一直报这个错误, 花了两周实在解决不了…
因此才换了上述这台Kylin的…
致谢
感谢这两个月来对这个项目工作提供很大帮助的: 刘老师, 董老师, 陈老师, 李老师, 吴老师和毕老师.