Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
6a2bced
redmin
liuhuatao123 May 8, 2026
3842b01
readme
liuhuatao123 May 17, 2026
9393b1e
Merge branch 'OpenHUTB:main' into main
liuhuatao123 Jun 9, 2026
966ecb9
feat: 实现 CARLA 连接与仿真主循环
liuhuatao123 May 25, 2026
f0e4628
docs: 添加 vision_based_parking 模块文档
liuhuatao123 Jun 6, 2026
c767112
feat: 重命名入口文件为 main.py,符合项目约定
liuhuatao123 Jun 9, 2026
46b91ae
docs: 完善 vision_based_parking 模块文档,添加 mkdocs 导航和首页链接
liuhuatao123 Jun 9, 2026
8e28998
readme
liuhuatao123 Jun 11, 2026
6e61622
删除旧项目
liuhuatao123 Jun 11, 2026
313d11f
同步
liuhuatao123 Jun 11, 2026
50269f2
同步
liuhuatao123 Jun 11, 2026
93bc028
同步
liuhuatao123 Jun 11, 2026
943bf0c
同步更改
liuhuatao123 Jun 11, 2026
2010d45
Merge branch 'main' into main
liuhuatao123 Jun 11, 2026
8e6a193
Merge branch 'main' into main
liuhuatao123 Jun 12, 2026
01679e2
期末文档
liuhuatao123 Jun 12, 2026
6d1917e
Merge branch 'main' of https://github.com/liuhuatao123/liuhuatao
liuhuatao123 Jun 12, 2026
7c62e2a
同步
liuhuatao123 Jun 12, 2026
51f25a4
同步
liuhuatao123 Jun 12, 2026
9122693
Merge branch 'main' into main
liuhuatao123 Jun 12, 2026
fecc74b
同步
liuhuatao123 Jun 12, 2026
94919b7
同步
liuhuatao123 Jun 12, 2026
59f2a0d
同步
liuhuatao123 Jun 12, 2026
697f016
Merge branch 'main' of https://github.com/liuhuatao123/liuhuatao
liuhuatao123 Jun 12, 2026
c1845b7
同步
liuhuatao123 Jun 12, 2026
b66c682
同步
liuhuatao123 Jun 12, 2026
3d27e17
同步
liuhuatao123 Jun 12, 2026
78e30bc
Merge branch 'main' into main
liuhuatao123 Jun 12, 2026
83fe7ec
同步
liuhuatao123 Jun 15, 2026
f1afc92
同步
liuhuatao123 Jun 15, 2026
cf7af80
同步
liuhuatao123 Jun 15, 2026
3bfea52
同步
liuhuatao123 Jun 15, 2026
38f73dc
同步
liuhuatao123 Jun 15, 2026
7fd35f0
同步
liuhuatao123 Jun 15, 2026
9bfe17c
同步
liuhuatao123 Jun 15, 2026
860f754
同步
liuhuatao123 Jun 15, 2026
20228b9
Update index.md
liuhuatao123 Jun 15, 2026
35396b9
Update index.md
liuhuatao123 Jun 15, 2026
c6ae66e
Update index.md
liuhuatao123 Jun 15, 2026
3940b07
Merge branch 'main' into main
liuhuatao123 Jun 15, 2026
9a827d5
同步mkdocs
liuhuatao123 Jun 21, 2026
0fbd7b3
同步
liuhuatao123 Jun 21, 2026
7a53b5a
同步mkdocs
liuhuatao123 Jun 21, 2026
9f996e9
同步
liuhuatao123 Jun 21, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
101 changes: 101 additions & 0 deletions docs/driving_reward_analysis/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
# 自动驾驶奖励函数分析系统

## 1. 项目简介
本项目实现了一套完整的自动驾驶奖励函数建模与可视化分析系统。通过数学建模方式定义速度跟踪、距离控制、舒适性三类核心奖励函数,支持参数化配置、批量仿真与可视化输出,无需任何模拟器即可独立运行。

系统可广泛应用于:
- 强化学习自动驾驶算法的奖励设计
- 自适应巡航控制(ACC)策略评估
- 自动驾驶决策系统的安全性与舒适性权衡分析

## 2. 选题说明
- **技术方案**: 基于纯 Python + NumPy + Matplotlib 的奖励函数建模与可视化
- **设计思路**: 将自动驾驶中的核心评价指标抽象为数学函数,通过参数化配置实现灵活的奖励设计,支持单场景分析与批量对比实验
- **独特价值**: 无需 CARLA、AirSim 等重型模拟器,纯代码即可生成专业级分析图表

## 3. 开发运行环境
- **操作系统**: Windows 10/11, Ubuntu 20.04/22.04, macOS
- **编程语言**: Python 3.8+
- **核心依赖**: NumPy, Matplotlib
- **开发工具**: Visual Studio Code / PyCharm / Jupyter Notebook

## 4. 模块结构与入口
- 本模块的所有核心代码存放于 `src/driving_reward_analysis` 目录下
- 模块的主程序入口为 `main.py`[text](../../src/driving_reward_analysis/README.md)
- 奖励函数定义位于 `rewards.py`
- 可视化工具位于 `visualizer.py`

---

# driving_reward_analysis: 自动驾驶奖励函数分析系统

## 1. 模块功能
本模块实现了自动驾驶奖励函数的完整建模与分析流程:

- **速度跟踪奖励**: 基于高斯分布建模,车辆速度越接近目标速度奖励越高,支持自定义目标速度和容忍度
- **距离控制奖励**: 分段线性函数建模,保持安全距离时获得最大奖励,过近时惩罚急剧增加
- **舒适性奖励**: 基于加速度的二次函数建模,零加速度时奖励最高,剧烈加减速时惩罚增加
- **批量仿真**: 支持多组参数配置的批量实验,生成对比分析图表
- **可视化输出**: 自动生成专业的奖励函数曲线图,支持保存为 PNG 格式

## 2. 运行指南

### 步骤 1:安装依赖
```bash
pip install numpy matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple
```

### 步骤 2:运行主程序
在项目根目录下执行:
```bash
python src/driving_reward_analysis/main.py
```

程序将自动生成 `outputs/` 目录,并保存以下效果图:
- `reward_func_analysis.png` — 三类奖励函数综合分析图
- `reward_comparison.png` — 不同参数下的奖励函数对比图

### 步骤 3:自定义参数
编辑 `config.yaml` 文件调整奖励函数参数:
```yaml
speed_reward:
target_speed: 25.0 # 目标速度 (m/s)
tolerance: 5.0 # 速度容忍度

distance_reward:
safe_distance: 15.0 # 安全距离 (m)
critical_distance: 5.0 # 临界距离 (m)

comfort_reward:
max_acceleration: 2.0 # 最大加速度 (m/s²)
```

## 3. 模块文件说明
| 文件 | 功能 |
|------|------|
| `main.py` | 主入口,执行奖励函数建模与可视化 |
| `rewards.py` | 奖励函数定义:速度、距离、舒适性 |
| `visualizer.py` | 可视化工具:绘制奖励函数曲线 |
| `config.yaml` | 配置文件:奖励函数参数 |
| `utils.py` | 工具函数:数据生成、文件保存 |

## 4. 奖励函数数学定义

### 速度跟踪奖励
$$R_{speed}(v) = -\left(\frac{v - v_{target}}{\sigma}\right)^2$$

其中 $v_{target}$ 为目标速度,$\sigma$ 为容忍度参数。

### 距离控制奖励
$$R_{dist}(d) = \begin{cases} -100 & d < d_{critical} \\ -10 \times (d_{safe} - d) & d_{critical} \leq d < d_{safe} \\ 0 & d \geq d_{safe} \end{cases}$$

### 舒适性奖励
$$R_{comfort}(a) = -a^2$$

其中 $a$ 为加速度,零加速度时奖励最高。

## 5. 参考
- [强化学习奖励设计](https://spinningup.openai.com/en/latest/spinningup/rl_intro.html)
- [自适应巡航控制](https://en.wikipedia.org/wiki/Adaptive_cruise_control)
- [NumPy 文档](https://numpy.org/doc/)
- [Matplotlib 文档](https://matplotlib.org/stable/)
6 changes: 5 additions & 1 deletion mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -51,14 +51,18 @@ nav:
- 自动驾驶感知系统: 'carla_yolo_detection/README.md'
- 自动驾驶车辆语义分割: 'auto_drive_seg/README.md'
- 无人机路径学习: 'drone_path_learning/README.md'
- 自动驾驶奖励分析: 'driving_reward_analysis/README.md'
- 双足人形机器人SAC步态仿真: 'mujoco_running/running.md'
- 人形机器人项目: mujoco_hci_sim/README.md
- 车辆自动驾驶辅助功能: 'vehicle_autonomous_core/README.md'
- RL-ACC: 'rl_acc/README.md'
- CARLA天气鲁棒性测试: 'carla_weather_robustness/README.md'
- CARLA多传感器自动驾驶仿真平台: 'carla_multisensor_platform/carla_multisensor_platform.md'
- 无人机飞行控制程序: 'drone_flight_sim/README.md'
- 交通拥堵仿真与智能调控: 'lidar_project/README.md'

# - mdx_math 用于行内公式显示
markdown_extensions:
- admonition
- mdx_math
- tables
- tables
101 changes: 101 additions & 0 deletions src/driving_reward_analysis/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
# 自动驾驶奖励函数分析系统

## 1. 项目简介
本项目实现了一套完整的自动驾驶奖励函数建模与可视化分析系统。通过数学建模方式定义速度跟踪、距离控制、舒适性三类核心奖励函数,支持参数化配置、批量仿真与可视化输出,无需任何模拟器即可独立运行。

系统可广泛应用于:
- 强化学习自动驾驶算法的奖励设计
- 自适应巡航控制(ACC)策略评估
- 自动驾驶决策系统的安全性与舒适性权衡分析

## 2. 选题说明
- **技术方案**: 基于纯 Python + NumPy + Matplotlib 的奖励函数建模与可视化
- **设计思路**: 将自动驾驶中的核心评价指标抽象为数学函数,通过参数化配置实现灵活的奖励设计,支持单场景分析与批量对比实验
- **独特价值**: 无需 CARLA、AirSim 等重型模拟器,纯代码即可生成专业级分析图表

## 3. 开发运行环境
- **操作系统**: Windows 10/11, Ubuntu 20.04/22.04, macOS
- **编程语言**: Python 3.8+
- **核心依赖**: NumPy, Matplotlib
- **开发工具**: Visual Studio Code / PyCharm / Jupyter Notebook

## 4. 模块结构与入口
- 本模块的所有核心代码存放于 `src/driving_reward_analysis` 目录下
- 模块的主程序入口为 `main.py`
- 奖励函数定义位于 `rewards.py`
- 可视化工具位于 `visualizer.py`

---

# driving_reward_analysis: 自动驾驶奖励函数分析系统

## 1. 模块功能
本模块实现了自动驾驶奖励函数的完整建模与分析流程:

- **速度跟踪奖励**: 基于高斯分布建模,车辆速度越接近目标速度奖励越高,支持自定义目标速度和容忍度
- **距离控制奖励**: 分段线性函数建模,保持安全距离时获得最大奖励,过近时惩罚急剧增加
- **舒适性奖励**: 基于加速度的二次函数建模,零加速度时奖励最高,剧烈加减速时惩罚增加
- **批量仿真**: 支持多组参数配置的批量实验,生成对比分析图表
- **可视化输出**: 自动生成专业的奖励函数曲线图,支持保存为 PNG 格式

## 2. 运行指南

### 步骤 1:安装依赖
```bash
pip install numpy matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple
```

### 步骤 2:运行主程序
在项目根目录下执行:
```bash
python src/driving_reward_analysis/main.py
```

程序将自动生成 `outputs/` 目录,并保存以下效果图:
- `reward_func_analysis.png` — 三类奖励函数综合分析图
- `reward_comparison.png` — 不同参数下的奖励函数对比图

### 步骤 3:自定义参数
编辑 `config.yaml` 文件调整奖励函数参数:
```yaml
speed_reward:
target_speed: 25.0 # 目标速度 (m/s)
tolerance: 5.0 # 速度容忍度

distance_reward:
safe_distance: 15.0 # 安全距离 (m)
critical_distance: 5.0 # 临界距离 (m)

comfort_reward:
max_acceleration: 2.0 # 最大加速度 (m/s²)
```

## 3. 模块文件说明
| 文件 | 功能 |
|------|------|
| `main.py` | 主入口,执行奖励函数建模与可视化 |
| `rewards.py` | 奖励函数定义:速度、距离、舒适性 |
| `visualizer.py` | 可视化工具:绘制奖励函数曲线 |
| `config.yaml` | 配置文件:奖励函数参数 |
| `utils.py` | 工具函数:数据生成、文件保存 |

## 4. 奖励函数数学定义

### 速度跟踪奖励
$$R_{speed}(v) = -\left(\frac{v - v_{target}}{\sigma}\right)^2$$

其中 $v_{target}$ 为目标速度,$\sigma$ 为容忍度参数。

### 距离控制奖励
$$R_{dist}(d) = \begin{cases} -100 & d < d_{critical} \\ -10 \times (d_{safe} - d) & d_{critical} \leq d < d_{safe} \\ 0 & d \geq d_{safe} \end{cases}$$

### 舒适性奖励
$$R_{comfort}(a) = -a^2$$

其中 $a$ 为加速度,零加速度时奖励最高。

## 5. 参考
- [强化学习奖励设计](https://spinningup.openai.com/en/latest/spinningup/rl_intro.html)
- [自适应巡航控制](https://en.wikipedia.org/wiki/Adaptive_cruise_control)
- [NumPy 文档](https://numpy.org/doc/)
- [Matplotlib 文档](https://matplotlib.org/stable/)
17 changes: 17 additions & 0 deletions src/driving_reward_analysis/config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# 自动驾驶奖励函数分析系统 - 配置文件

speed_reward:
target_speed: 25.0 # 目标速度 (m/s)
tolerance: 5.0 # 速度容忍度 (m/s)

distance_reward:
safe_distance: 15.0 # 安全距离 (m)
critical_distance: 5.0 # 临界距离 (m)

comfort_reward:
max_acceleration: 2.0 # 最大加速度 (m/s²)

visualization:
fig_size: [12, 10] # 图表尺寸
dpi: 100 # 输出分辨率
output_dir: "outputs" # 输出目录
110 changes: 110 additions & 0 deletions src/driving_reward_analysis/main.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
"""自动驾驶奖励函数分析系统 - 主入口.

运行方式:
python main.py # 执行完整分析
python main.py --mode plot # 仅绘制理论曲线
python main.py --mode sim # 仅运行仿真分析
"""

import sys
import argparse
from utils import load_config, generate_scenario_data, compute_rewards, ensure_output_dir
from visualizer import (
plot_reward_curves,
plot_scenario_rewards,
plot_speed_reward_comparison,
plot_distance_reward_comparison,
)


def run_analysis(output_dir: str) -> None:
"""执行完整分析流程."""
print("=" * 60)
print(" 自动驾驶奖励函数分析系统")
print("=" * 60)

# 1. 加载配置
config = load_config()
print(f"\n[Config] 目标速度: {config['speed_reward']['target_speed']} m/s")
print(f"[Config] 安全距离: {config['distance_reward']['safe_distance']} m")
print(f"[Config] 临界距离: {config['distance_reward']['critical_distance']} m")
print(f"[Config] 最大加速度: {config['comfort_reward']['max_acceleration']} m/s²")

# 2. 绘制理论奖励曲线
print("\n[Plot] 生成奖励函数理论曲线...")
plot_reward_curves(output_dir, config)

# 3. 生成场景数据
print("\n[Sim] 生成仿真场景数据...")
scenario = generate_scenario_data(num_steps=200, dt=0.1)

# 4. 计算奖励值
print("[Sim] 计算奖励值...")
rewards = compute_rewards(scenario, config)

# 5. 输出统计信息
print("\n[Stats] 奖励统计:")
for name, key in [
("速度跟踪奖励", "speed_reward"),
("距离控制奖励", "distance_reward"),
("舒适性奖励", "comfort_reward"),
("总奖励", "total_reward"),
]:
vals = rewards[key]
print(f" {name}: mean={vals.mean():.3f}, std={vals.std():.3f}, "
f"min={vals.min():.3f}, max={vals.max():.3f}")

# 6. 绘制场景奖励变化图
print("\n[Plot] 生成场景仿真奖励曲线...")
plot_scenario_rewards(rewards, output_dir)

# 7. 参数对比图
print("\n[Plot] 生成参数对比图...")
plot_speed_reward_comparison(output_dir, config)
plot_distance_reward_comparison(output_dir, config)

print(f"\n{'=' * 60}")
print(f" 分析完成!效果图已保存至: {output_dir}")
print(f"{'=' * 60}")


def main() -> None:
"""主函数."""
parser = argparse.ArgumentParser(description="自动驾驶奖励函数分析系统")
parser.add_argument(
"--mode",
choices=["all", "plot", "sim"],
default="all",
help="运行模式: all=全部, plot=仅绘图, sim=仅仿真 (default: all)",
)
args = parser.parse_args()

output_dir = ensure_output_dir("outputs")

if args.mode in ("all", "plot"):
config = load_config()
plot_reward_curves(output_dir, config)
plot_speed_reward_comparison(output_dir, config)
plot_distance_reward_comparison(output_dir, config)

if args.mode in ("all", "sim"):
config = load_config()
scenario = generate_scenario_data()
rewards = compute_rewards(scenario, config)
plot_scenario_rewards(rewards, output_dir)

print("\n[Stats] 奖励统计:")
for name, key in [
("速度跟踪奖励", "speed_reward"),
("距离控制奖励", "distance_reward"),
("舒适性奖励", "comfort_reward"),
("总奖励", "total_reward"),
]:
vals = rewards[key]
print(f" {name}: mean={vals.mean():.3f}, std={vals.std():.3f}")

print(f"\n完成!输出目录: {output_dir}")


if __name__ == "__main__":
main()
Loading