Files
2026-07-13 10:26:43 +00:00

232 lines
8.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!-- WEHUB_ZH_README -->
> [!NOTE]
> 本文档由 WeHub 基于上游 README 翻译整理,属于社区翻译,非官方中文文档。
> [English](./README.en.md) · [原始项目](https://github.com/silverwingsbot/EasyCarla-RL) · [上游 README](https://github.com/silverwingsbot/EasyCarla-RL/blob/HEAD/README.md)
> 原作者、版权与许可证归属以原始项目及本仓库 LICENSE 文件为准。
🚀 [**新数据集已发布!**](#-download-dataset)
# EasyCarla-RL:基于 CARLA 模拟器构建的轻量级、新手友好的 OpenAI Gym 环境
## 概述
EasyCarla-RL 为 CARLA 模拟器提供了一个轻量、易用的 Gym 兼容接口,专为强化学习(RL)应用量身打造。它集成了激光雷达(LiDAR)扫描、自车状态、附近车辆信息和路点等核心观测组件。该环境支持带奖励与代价信号的安全感知学习、路点可视化,以及可自定义参数(包括交通设置、车辆数量和传感器范围)。EasyCarla-RL 旨在帮助研究人员和初学者在无需大量工程开销的情况下,高效训练与评估 RL 智能体。
<div align="center">
<table>
<tr>
<td><img src="assets/part1.gif" width="100%"/></td>
<td><img src="assets/part2.gif" width="100%"/></td>
<td><img src="assets/part3.gif" width="100%"/></td>
</tr>
</table>
</div>
## 安装
克隆仓库:
```bash
git clone https://github.com/silverwingsbot/EasyCarla-RL.git
cd EasyCarla-RL
```
安装所需依赖:
```bash
pip install -r requirements.txt
```
将 EasyCarla-RL 安装为本地 Python 包:
```bash
pip install -e .
```
请确保已运行与当前环境兼容的 [CARLA 模拟器](https://carla.org/) 服务端。
详细安装说明请参阅 [CARLA 官方文档](https://carla.readthedocs.io/en/0.9.13/start_quickstart/)
## 快速入门
运行一个简单演示,与环境交互:
```bash
python easycarla_demo.py
```
该脚本演示如何:
- 创建并重置环境
- 选择随机动作或自动驾驶(autopilot)动作
- 逐步推进环境并接收观测、奖励、代价与结束(done)信号
运行演示前,请确保 CARLA 服务端已启动。
## 进阶示例:使用 Diffusion Q-Learning 进行评估
进阶用法下,可在 EasyCarla-RL 环境中运行预训练的 [Diffusion Q-Learning](https://github.com/Zhendong-Wang/Diffusion-Policies-for-Offline-RL) 智能体:
```bash
cd example
python run_dql_in_carla.py
```
请确保已在 `example/params_dql/` 目录下下载或准备好训练好的模型检查点。
本示例演示:
- 加载预训练 RL 智能体
- 与 EasyCarla-RL 交互以进行评估
- 在模拟自动驾驶任务上评估真实 RL 模型的性能
## 📥 下载数据集
本仓库提供用于在 EasyCarla-RL 环境中训练与评估 RL 智能体的离线数据集。
该数据集包含超过 **7,000 条轨迹****110 万步时间步**,由专家策略与随机策略混合采集(专家与随机比例为 **8:2**),在 Town03 地图中记录。数据以 **HDF5 格式** 存储。
可从以下来源下载:
* [从 Hugging Face 下载(直链)](https://huggingface.co/datasets/silverwingsbot/easycarla/resolve/main/easycarla_offline_dataset.hdf5)
* [从百度网盘下载(提取码:2049](https://pan.baidu.com/s/1yhCFzl4RFHzxfszebYnOIg?pwd=2049)
文件名:`easycarla_offline_dataset.hdf5` 大小:\~2.76 GB 格式:HDF5
### 数据集结构(HDF5
数据集中每个样本包含以下字段:
```
/ (root)
├── observations → shape: [N, 307] # concatenated: ego_state + lane_info + lidar + nearby_vehicles + waypoints
├── actions → shape: [N, 3] # [throttle, steer, brake]
├── rewards → shape: [N] # scalar reward per step
├── costs → shape: [N] # safety-related cost signal per step
├── done → shape: [N] # 1 if episode ends
├── next_observations → shape: [N, 307] # next-step observations, same format as observations
├── info → dict containing:
│ ├── is_collision → shape: [N] # 1 if collision occurs
│ └── is_off_road → shape: [N] # 1 if vehicle leaves the road
```
* `N` 表示所有 episode 中的总时间步数(\~1.1 million)。
* `observations``next_observations` 是通过拼接得到的 307 维向量:
* `ego_state` (9) + `lane_info` (2) + `lidar` (240) + `nearby_vehicles` (20) + `waypoints` (36)
### 观测格式
数据集中每条观测以 **307 维扁平向量** 存储,按以下顺序拼接多个组件构成:
```python
# Flattening function used during data generation
def flatten_obs(obs_dict):
return np.concatenate([
obs_dict['ego_state'], # 9 dimensions
obs_dict['lane_info'], # 2 dimensions
obs_dict['lidar'], # 240 dimensions
obs_dict['nearby_vehicles'], # 20 dimensions
obs_dict['waypoints'] # 36 dimensions
]).astype(np.float32) # Total: 307 dimensions
```
该格式在保留关键空间与语义信息的同时,便于高效训练神经网络。
### 如何加载 HDF5 数据集并用于训练?
本示例展示如何加载离线数据集,并在典型的 RL 训练循环中使用。此处的模型仅为占位符——你可接入任意行为克隆(behavior cloning)、Q-learning 或 actor-critic 模型。
```python
import h5py
import torch
import numpy as np
# === Load dataset from HDF5 ===
with h5py.File('easycarla_offline_dataset.hdf5', 'r') as f:
observations = torch.tensor(f['observations'][:], dtype=torch.float32)
actions = torch.tensor(f['actions'][:], dtype=torch.float32)
rewards = torch.tensor(f['rewards'][:], dtype=torch.float32)
next_observations = torch.tensor(f['next_observations'][:], dtype=torch.float32)
dones = torch.tensor(f['done'][:], dtype=torch.float32)
# === (Optional) check shape info ===
print("observations:", observations.shape)
print("actions:", actions.shape)
# === Placeholder model example ===
class YourModel(torch.nn.Module):
def __init__(self, obs_dim, act_dim):
super().__init__()
# define your model here
pass
def forward(self, obs):
# define forward pass
return None
# === Training setup ===
model = YourModel(obs_dim=observations.shape[1], act_dim=actions.shape[1])
optimizer = torch.optim.Adam(model.parameters(), lr=3e-4)
loss_fn = torch.nn.MSELoss()
# === Offline RL training loop ===
for epoch in range(1, 11): # e.g. 10 epochs
for step in range(100): # e.g. 100 steps per epoch
# sample random batch
idx = np.random.randint(0, len(observations), size=256)
obs_batch = observations[idx]
act_batch = actions[idx]
rew_batch = rewards[idx]
next_obs_batch = next_observations[idx]
done_batch = dones[idx]
# forward, compute loss
pred = model(obs_batch) # e.g. predict action or Q-value
loss = loss_fn(pred, act_batch) # just an example
# backward and update
optimizer.zero_grad()
loss.backward()
optimizer.step()
print(f"[Epoch {epoch}] Loss: {loss.item():.4f} # Replace with your own logging or evaluation")
```
## 项目结构
```
EasyCarla-RL/
├── easycarla/ # Main environment module (Python package)
│ ├── envs/
│ │ ├── __init__.py
│ │ └── carla_env.py # Carla environment wrapper following the Gym API
│ └── __init__.py
├── example/ # Advanced example
│ ├── agents/
│ ├── params_dql/
│ ├── utils/
│ └── run_dql_in_carla.py # Script to run a pretrained RL model
├── easycarla_demo.py # Quick Start demo script (basic Gym-style environment interaction)
├── requirements.txt
├── setup.py
└── README.md
```
## 许可证
本项目采用 [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). 许可证授权。
## 作者
由 [SilverWings](https://github.com/silverwingsbot) 创建。
## 💓 致谢
本项目的实现离不开以下杰出的开源贡献:
- [CARLA](https://github.com/carla-simulator/carla)
- [gym-carla](https://github.com/cjy1992/gym-carla)
- [Diffusion Q-Learning](https://github.com/Zhendong-Wang/Diffusion-Policies-for-Offline-RL)