端到端自动驾驶nuPlan数据集-入门使用

前言

最近在了解端到端自动驾驶,接触到了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":

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值