# 快速开始：平滑路径生成器 🚀

## 一键生成所有路径

```bash
# 从项目根目录运行
./build/Debug/generate_smooth_path.exe
```

✅ 自动生成 6 个平滑路径 CSV 文件！

## 三步使用流程

### 第1步：编译（只需一次）

```bash
cd build
cmake --build . --target generate_smooth_path --config Debug
```

### 第2步：生成路径

```bash
cd ..
./build/Debug/generate_smooth_path.exe
```

### 第3步：在Qt GUI中查看

```bash
# 启动Qt GUI
./build/Debug/agv_qt_gui.exe

# 在界面中：
# 1. Path Type 选择 "Load from CSV"
# 2. 选择任意生成的 CSV 文件
# 3. 点击 "Generate Control"
```

## 生成的文件

| 文件名 | 描述 | 用途 |
|--------|------|------|
| `smooth_path.csv` | 默认平滑路径 | 基础测试 |
| `smooth_path_arc.csv` | 圆弧路径 | 转弯场景 |
| `smooth_path_scurve.csv` | S型曲线 | 避障场景 |
| `smooth_path_complex.csv` | 复杂路径 | 仓库导航 |
| `smooth_path_loop.csv` | 环形路径 | 循环巡逻 |
| `smooth_path_figure8.csv` | 8字形路径 | 复杂测试 |

## 代码调用示例

### 最简单的用法

```cpp
#include "path_curve.h"

int main() {
    // 创建路径
    PathCurve path;

    // 定义关键点
    std::vector<PathPoint> points = {
        PathPoint(0, 0),
        PathPoint(5, 2),
        PathPoint(10, 0)
    };

    // 生成样条曲线
    path.generateSpline(points, 200, 0.5);

    // 保存
    path.saveToCSV("my_path.csv");

    return 0;
}
```

### 使用封装类

```cpp
// 方法1: 生成S型曲线
SmoothPathGenerator::generateSCurve("scurve.csv", 0, 0, 10, 0);

// 方法2: 生成圆弧
SmoothPathGenerator::generateCircleArc("arc.csv", 5, 0, 5, 0, M_PI);

// 方法3: 生成自定义样条
std::vector<PathPoint> my_points = {
    PathPoint(0, 0), PathPoint(5, 3), PathPoint(10, 0)
};
SmoothPathGenerator::generateSpline("custom.csv", my_points, 200);
```

## 常用参数说明

| 参数 | 说明 | 推荐值 |
|------|------|--------|
| `num_points` | 路径点数量 | 200-300 |
| `tension` | 张力参数 | 0.3-0.5 |
| `radius` | 圆弧半径 | 3-10 米 |
| `control_offset` | S曲线控制点偏移 | 2-4 米 |

## 完整文档

📖 详细使用说明请查看：`SMOOTH_PATH_GENERATOR_README.md`

## 项目结构

```
examples/
  ├── generate_smooth_path.cpp    # 平滑路径生成器源码
  ├── qt_gui_demo.cpp             # Qt GUI（支持加载CSV）
  └── ...

build/Debug/
  ├── generate_smooth_path.exe    # 路径生成程序
  └── agv_qt_gui.exe              # Qt GUI程序

smooth_path*.csv                  # 生成的路径文件（项目根目录）
```

---

**提示**: 如果想只生成特定路径，可以直接调用对应的类方法，或修改 `main()` 函数。
