前言
最近在了解端到端自动驾驶,接触到了nuPlan数据集,在跑官方demo时遇到些坑,发现相关的资料不多,记录一下。
nuPlan介绍
最直接就是看nuplan官网的介绍,和paper。如果只想大概扫一眼这里还有篇中文翻译的自动驾驶轨迹规划之nuplan数据集。
一句话总结就是:和nuScenes同一家公司发布的,nuPlan是首个面向planning的大规模自动驾驶基准数据集,不仅包括大量的1200小时多城市的实车驾驶数据,还提供了一整套开环/闭环仿真、多种评价标准、ML规划器开发工具及可视化工具。
nuplan_v1.1数据量是1.8TB,这还不包括原始的传感器数据(摄像头、激光);它也有个mini版,nuplan_v1.1_mini,解压后是13g左右,7h的驾驶数据覆盖了大部分场景,但是原始传感器数据仍旧是非常大的。下图就是它的采集车(包含8个相机,5个激光,1个IMU)及数据可视化结果:
数据下载及环境安装
数据的使用基于官方的工具nuplan-devkit就行,数据下载直接上nuplan官网注册登陆后就能下载,学习只用nuplan_v1.1_mini版就够了,下载时选择Asia节点(国内会更快点)。如果是从头安装,具体的细节这部分有篇博客下载数据教程及环境配置_csdn中文写得很详细了,就不重复写了,感谢原博主X.ZHANG0825。另外官网也有对应环境安装和数据下载的教程nuplan-devkit Installation
以下仅记录一些重点内容和遇到的问题:
环境安装
conda安装nuplan-devkit
如果你电脑已经有conda环境,可以直接用以下命令安装
conda create -n nuplan python=3.9
conda activate nuplan
python -m pip install pip==24.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
git clone https://github.com/motional/nuplan-devkit.git && cd nuplan-devkit
pip install -e .
pip install -r ./requirements.txt
pip install -r requirements_torch.txt
错误问题记录
报错如下“No matching distribution found for omegaconf==2.1.0.rc1”
解决办法
#降级pip,如下版本
python -m pip install pip==24.0
torch版本
官方requirements_torch.txt已有torch版本,版本相对老点,要用新点的可以参考以下本人使用的torch版本
pip install torch==2.0.1 torchvision==0.15.2 pytorch-lightning==2.0.1
数据目录
记住nuplan文件夹存放目录,假设你就放在“HOME”目录下,则"~/nuplan/dataset"目录下就是放解压后的数据;
dataset同级目录下可以创一个exp文件夹,“~/nuplan/exp”,专门保存代码运行结果的,主要代码会访问"NUPLAN_EXP_ROOT"获取
推荐数据结构
nuplan
└── dataset
├── maps ## nuplan-maps-v1.0.zip 解压后的
│ ├── sg-one-north
│ │ └── 9.17.1964
│ ├── us-ma-boston
│ │ └── 9.12.1817
│ ├── us-nv-las-vegas-strip
│ │ └── 9.15.1915
│ └── us-pa-pittsburgh-hazelwood
│ └── 9.17.1937
└── nuplan-v1.1
└── splits ## 注意和之前教程不同,多个split文件夹
└── mini # nuplan-v1.1_mini.zip 解压后的
加入环境变量
按你自己存放的路径和对应的数据结构,将nuplan的数据路径加入系统环境变量,这样不用每次都export一下了。在~/.bashrc添加路径即可,记得添加nuplan-devkit的目录(如果是pip install -e .安装的可以不用);也可以在命令行中直接export;
# 以下路径根据自己存放的路径和对应的数据结构调整
export NUPLAN_DATA_ROOT="$HOME/nuplan/dataset/mini"
export NUPLAN_MAPS_ROOT="$HOME/nuplan/dataset/maps"
export NUPLAN_EXP_ROOT="$HOME/nuplan/exp"
export NUPLAN_DB_FILES="$HOME/nuplan/dataset/nuplan-v1.1/splits/mini"
备选,如果不想加入系统环境,也可以在代码里设置对应数据路径
import os
NUPLAN_DATA_ROOT = os.getenv('NUPLAN_DATA_ROOT', '$HOME/nuplan/dataset')
NUPLAN_MAPS_ROOT = os.getenv('NUPLAN_MAPS_ROOT', '$HOME/nuplan/dataset/maps')
NUPLAN_DB_FILES = os.getenv('NUPLAN_DB_FILES', '$HOME/nuplan/dataset/nuplan-v1.1/splits/mini')
NUPLAN_MAP_VERSION = os.getenv('NUPLAN_MAP_VERSION', 'nuplan-maps-v1.0')
跑通场景可视化
在官方github的tutorials有个关于数据可视化的-nuplan_scenario_visualization.ipynb,是jupyter跑的,所以需要安装对应环境
pip install jupyter notebook
打开jupyter
## 命令行输入如下,自动会打开浏览器,或者复制链接进入浏览器,建议chrome
jupyter notebook
可视化结果保存目录默认是在"/tmp/scenario_visualization",因为nuplan-devkit/tutorials/utils/tutorial_utils.py的216行默认写死了,可以自行修改
def visualize_scenario(scenario: NuPlanScenario, save_dir: str = '/tmp/scenario_visualization/', bokeh_port: int = 8899) -> None:
然后打开 nuplan-devkit/tutorials/nuplan_scenario_visualization.ipynb,不确定自己数据路径配置是否有问题的话,将第2个代码块内容替换为自己的数据路径:
import os
NUPLAN_DATA_ROOT = os.getenv('NUPLAN_DATA_ROOT', '$HOME/nuplan/dataset')
NUPLAN_MAPS_ROOT = os.getenv('NUPLAN_MAPS_ROOT', '$HOME/nuplan/dataset/maps')
NUPLAN_DB_FILES = os.getenv('NUPLAN_DB_FILES', '$HOME/nuplan/dataset/nuplan-v1.1/splits/mini')
NUPLAN_MAP_VERSION = os.getenv('NUPLAN_MAP_VERSION', 'nuplan-maps-v1.0')
然后依次执行各代码块或者run all cells
运行成功后在Scenario选择切换场景,因为是mini版数据,有些场景没有,可以选accelerating_at_traffic_light或者accelerating_at_crosswalk等测试,然后等待30s左右,成功渲染后如下就可以播放了:
达到上面效果基本就够了,但如果你还想把这个可视化结果保存下来,其实录屏也行。但如果你想完全白嫖官方的工具,可以点击Render video按键,视频默认是保存在"nuplan-devkit/tutorials/scenario_visualization/video_screenshot",看看有没有.avi文件。如果没有(大概率是没有),或者点了没反应则环境有问题,主要是selenium的锅,官方用的selenium应该是以前老版本,解决起来相对麻烦,如果有时间可以参考如下办法、
-
报错_init_() got an unexpected keyword argument ‘chrome_options’
需要修改 nuplan-devkit/nuplan/planning/nuboard/base/simulation_tile.py 445行
driver = webdriver.Chrome(chrome_options=chrome_options)
改为
driver = webdriver.Chrome(options=chrome_options)
-
继续报错 ‘chromedriver’ executable needs to be in PATH
需要安装chromedriver,而且要和chrom版本一致,可以参考这个链接解决:‘chromedriver’ executable needs to be in PATH
## 查看当前chrom版本,安装对应版本兼容的chromedriver google-chrome --version # 根据Chrome版本下载匹配的ChromeDriver版本 # 安装方法访问 https://developer.chrome.com/docs/chromedriver/downloads/version-selection?hl=zh-cn # 在此页面找到自己chrome版本的包下载http://chromedriver.storage.googleapis.com/index.html ## https://chromedriver.storage.googleapis.com/index.html?path=103.0.5060.134/ unzip chromedriver_linux64.zip cd chromedriver-linux64 sudo mv chromedriver /usr/bin/chromedriver sudo chown root:root /usr/bin/chromedriver sudo chmod +x /usr/bin/chromedriver
刚才修改的simulation_tile.py 445行改为
driver_path = "/usr/bin/chromedriver" driver = webdriver.Chrome(driver_path, options=chrome_options)
然后notebook中Restart Kernel并重新跑一遍代码,再次点击Render video就能保存视频了,其实就是将一帧帧的图片用opencv拼成一个视频,保存过程如下,默认路径是在"nuplan-devkit/tutorials/scenario_visualization/video_screenshot":