前言

本文的目标是在自动驾驶虚拟仿真环境 CARLA 上训练一个 强化学习(RL)的端到端(E2E)模型,并可以 CARLA 相关的驾驶类指标来评估该模型的性能。

技术选型:

安装依赖

  1. 安装 CARLA 0.9.14,参照 在Ubuntu上安装CARLA的过程

  2. 配置 Carla 环境变量,在 ~/.zshrc 中添加:

    1
    export CARLA_ROOT=<path to carla installation>
  3. 创建 conda 环境:

    1
    2
    conda create -n carla-sb3 python=3.8
    conda activate carla-sb3
  4. 拉取项目并安装依赖:

    1
    2
    3
    git clone https://github.com/raykr/CARLA-SB3-RL-Training-Environment
    cd CARLA-SB3-RL-Training-Environment
    pip install -r requirements.txt
原仓库 requirements.txt 安装时报错,请使用 fork 修改后的仓库地址: https://github.com/raykr/CARLA-SB3-RL-Training-Environment

训练模型

配置文件都在 config.py 中,有以下参数:

  • algorithm: 要使用的 RL 算法。支持 Stable Baselines 3 中的所有算法。
  • algoritm_params: 算法的参数。有关更多信息,请参阅 Stable Baselines 3 文档。
  • state: 用作 state 的列表。例如, steer, throttle, speed, angle_next_waypoint, maneuver, waypoints, rgb_camera, seg_camera, end_wp_vector, end_wp_fixed, distance_goal 有关更多信息,请参阅 “carla_env/state_commons.py” 文件。
  • vae_model: 要使用的 VAE 模型。此 repo 包含两个预训练模型:vae_64vae_64_augmentation。如果为 None,则不使用 VAE。
  • action_smoothing: 是否使用动作平滑。
  • reward_fn: 要使用的奖励函数。更多信息请参阅 carla_env/reward_functions.py 文件。
  • reward_params: 奖励函数的参数。
  • obs_res: 观察的分辨率。建议使用 (160, 80)
  • seed: 要使用的随机种子。
  • wrappers: 要使用的包装器列表。目前已实现两个:HistoryWrapperObsDictFrameSkip。有关更多信息,请参阅 carla_env/wrappers.py 文件。

执行训练:

1
2
# config 可以填写序号,对应config.py中各算法的配置序号
python train.py --config 1 --total_timesteps 1000000

查看 tensorboard:

1
tensorboard --logdir tensorboard

评估

如果要对训练完的模型进行评估,可以通过运行:

1
python eval.py --config <number of the config to use> --model <path to the model to evaluate>

例如:

1
python eval.py --config 1 --model tensorboard/PPO_1724383702_id1/model_400000_steps.zip
在运行 eval 时可能会遇到 swrast 报错,解决办法参照 解决 pygame 运行时找不到 swrast 和 GLIBCXX_3.4.30 的错误

结果展示

在 tensorboard 下训练日志目录下,会生成一个 eval 目录,里面会生成评测记录和导出的视频。