1195 lines
17 KiB
Markdown
1195 lines
17 KiB
Markdown
# AMR 非结构化道路轨迹规划技术路线(面向 Agent)
|
||||
|
|
|
|||
|
|
## 1. 项目目标
|
|||
|
|
|
|||
|
|
开发一套面向非结构化道路四舵轮 AMR 的轨迹规划系统。
|
|||
|
|
|
|||
|
|
第一阶段采用车式运动模型,具体边界如下:
|
|||
|
|
|
|||
|
|
- 支持前进、倒车和换向;
|
|||
|
|
- 暂不支持蟹行、纯横移和原地旋转;
|
|||
|
|
- 车体航向始终表示车头朝向;
|
|||
|
|
- 规划结果必须满足完整车体无碰撞、最大曲率约束和目标位姿要求;
|
|||
|
|
- 最终输出可供底盘控制器跟踪的带时间轨迹。
|
|||
|
|
|
|||
|
|
整体技术路线分为四个主要阶段:
|
|||
|
|
|
|||
|
|
```mermaid
|
|||
|
|
flowchart LR
|
|||
|
|
A[输入与地图构建] --> B[Hybrid A* 粗路径规划]
|
|||
|
|
B --> C[路径平滑与可行性处理]
|
|||
|
|
C --> D[SQP 轨迹优化]
|
|||
|
|
D --> E[输出可跟踪轨迹]
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 2. 总体模块划分
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
Module 1:输入与地图构建
|
|||
|
|
Module 2:Hybrid A* 粗路径规划
|
|||
|
|
Module 3:路径平滑与可行性处理
|
|||
|
|
Module 4:SQP 轨迹优化
|
|||
|
|
Module 5:轨迹输出与底盘接口
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
各模块必须通过明确的数据结构传递结果,不允许后级模块直接读取前级模块内部状态。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 3. Module 1:输入与地图构建
|
|||
|
|
|
|||
|
|
## 3.1 模块目标
|
|||
|
|
|
|||
|
|
根据起点、终点、车辆参数和环境障碍物信息,构建一张供全局搜索使用的任务级二维栅格地图。
|
|||
|
|
|
|||
|
|
地图范围至少覆盖:
|
|||
|
|
|
|||
|
|
- AMR 起点;
|
|||
|
|
- 目标位置;
|
|||
|
|
- 起点与目标之间的规划区域;
|
|||
|
|
- 周围必要的安全边界。
|
|||
|
|
|
|||
|
|
当前阶段继续使用已有 `GridMapData` 作为地图数据来源,并通过适配器转换为 Hybrid A* 使用的规划地图。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3.2 输入数据
|
|||
|
|
|
|||
|
|
### 3.2.1 起点位姿
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
StartPose:
|
|||
|
|
X
|
|||
|
|
Y
|
|||
|
|
Heading
|
|||
|
|
StartDirection
|
|||
|
|
StartVehicleCurvature
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
字段定义:
|
|||
|
|
|
|||
|
|
- `X、Y`:AMR 几何中心在世界坐标系中的位置;
|
|||
|
|
- `Heading`:车头航向;
|
|||
|
|
- `StartDirection`:`Forward`、`Reverse` 或 `Both`;
|
|||
|
|
- `StartVehicleCurvature`:车辆当前转向曲率,未提供时默认为 0。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 3.2.2 终点位姿
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
GoalPose:
|
|||
|
|
X
|
|||
|
|
Y
|
|||
|
|
Heading
|
|||
|
|
GoalDirectionConstraint
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
目标进入方向约束:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
Any
|
|||
|
|
Forward
|
|||
|
|
Reverse
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
其中:
|
|||
|
|
|
|||
|
|
- `GoalHeading` 始终表示目标车头朝向;
|
|||
|
|
- `GoalDirectionConstraint` 只约束最后一个连续运动段的运动方向。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 3.2.3 车辆参数
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
VehicleParameters:
|
|||
|
|
VehicleLength
|
|||
|
|
VehicleWidth
|
|||
|
|
MaxVehicleCurvature
|
|||
|
|
MinTurningRadius
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
第一阶段车辆参考点统一采用 AMR 几何中心。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 3.2.4 环境障碍物
|
|||
|
|
|
|||
|
|
当前已接入:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
TwoLegDetect 两腿检测结果
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
后续扩展:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
点云障碍物
|
|||
|
|
激光雷达障碍物
|
|||
|
|
静态障碍物
|
|||
|
|
动态障碍物
|
|||
|
|
禁行区域
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 3.2.5 地图配置
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
MapConfiguration:
|
|||
|
|
GridResolution
|
|||
|
|
MapMarginX
|
|||
|
|
MapMarginY
|
|||
|
|
ObstacleInflation
|
|||
|
|
MaximumCellCount
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3.3 当前地图构建逻辑
|
|||
|
|
|
|||
|
|
```mermaid
|
|||
|
|
flowchart TD
|
|||
|
|
A[读取 AMR 位姿与车身尺寸] --> B[读取目标位置与地图参数]
|
|||
|
|
B --> C[计算任务级地图边界]
|
|||
|
|
C --> D[创建 GridMapData]
|
|||
|
|
D --> E[读取 TwoLegDetect 障碍物]
|
|||
|
|
E --> F[车体系坐标转世界坐标]
|
|||
|
|
F --> G[圆形障碍物栅格化]
|
|||
|
|
G --> H[输出环境占据栅格]
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
当前地图边界由起点与目标位置共同决定:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
XMin = min(StartX, GoalX) - MapMarginX
|
|||
|
|
XMax = max(StartX, GoalX) + MapMarginX
|
|||
|
|
|
|||
|
|
YMin = min(StartY, GoalY) - MapMarginY
|
|||
|
|
YMax = max(StartY, GoalY) + MapMarginY
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
栅格尺寸:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
Cols = ceil((XMax - XMin) / Resolution)
|
|||
|
|
Rows = ceil((YMax - YMin) / Resolution)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3.4 当前地图适配要求
|
|||
|
|
|
|||
|
|
现有地图格式为:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
单位:mm
|
|||
|
|
数组:Cells[row, col]
|
|||
|
|
状态:0 = 未标记占据,1 = Occupied
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Hybrid A* 内部统一使用:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
单位:m
|
|||
|
|
角度:rad
|
|||
|
|
曲率:1/m
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
因此需要增加:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
PlanningMapAdapter
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
适配流程:
|
|||
|
|
|
|||
|
|
```mermaid
|
|||
|
|
flowchart TD
|
|||
|
|
A[GridMapData] --> B[校验边界、尺寸与分辨率]
|
|||
|
|
B --> C[深拷贝 Occupancy]
|
|||
|
|
C --> D[毫米转换为米]
|
|||
|
|
D --> E[生成障碍物距离场]
|
|||
|
|
E --> F[输出 PlanningGridMap]
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3.5 地图构建阶段的关键规则
|
|||
|
|
|
|||
|
|
### 3.5.1 规划地图不得包含 AMR 自身占据层
|
|||
|
|
|
|||
|
|
AMR 自身不能写入环境占据地图,否则 Hybrid A* 起点会直接被判定为碰撞。
|
|||
|
|
|
|||
|
|
正确关系:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
环境地图:
|
|||
|
|
只包含外部障碍物
|
|||
|
|
|
|||
|
|
AMR 自身:
|
|||
|
|
通过 VehiclePose、VehicleLength、VehicleWidth 单独描述
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 3.5.2 障碍物膨胀量必须明确
|
|||
|
|
|
|||
|
|
建议将:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
SafetyMarginMm
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
改为:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
ObstacleInflationMm
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
其唯一含义是:
|
|||
|
|
|
|||
|
|
> 障碍物写入地图前向外膨胀的距离。
|
|||
|
|
|
|||
|
|
必须避免:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
障碍物已经膨胀
|
|||
|
|
+
|
|||
|
|
车辆碰撞矩形再次增加同样余量
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 3.5.3 区分地图创建成功与地图可用于规划
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
Succeeded:
|
|||
|
|
地图数据结构是否创建成功
|
|||
|
|
|
|||
|
|
PlanningReady:
|
|||
|
|
当前地图是否满足规划输入要求
|
|||
|
|
|
|||
|
|
PlanningBlockReason:
|
|||
|
|
地图为何不能用于规划
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
例如:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
TwoLegDetect 正常:
|
|||
|
|
Succeeded = true
|
|||
|
|
PlanningReady = true
|
|||
|
|
|
|||
|
|
TwoLegDetect 无结果:
|
|||
|
|
Succeeded = true
|
|||
|
|
PlanningReady = false
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3.6 地图输出
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
PlanningGridMap:
|
|||
|
|
XMin
|
|||
|
|
XMax
|
|||
|
|
YMin
|
|||
|
|
YMax
|
|||
|
|
Resolution
|
|||
|
|
Rows
|
|||
|
|
Cols
|
|||
|
|
Occupancy[row, col]
|
|||
|
|
ObstacleDistance[row, col]
|
|||
|
|
ObstacleInflation
|
|||
|
|
InputSource
|
|||
|
|
PlanningReady
|
|||
|
|
MapVersion
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
当前第一版状态定义:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
Occupancy = 0:
|
|||
|
|
当前地图层未标记为占据
|
|||
|
|
|
|||
|
|
Occupancy = 1:
|
|||
|
|
占据
|
|||
|
|
|
|||
|
|
地图外部:
|
|||
|
|
按占据处理
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 4. Module 2:Hybrid A* 粗路径规划
|
|||
|
|
|
|||
|
|
## 4.1 模块目标
|
|||
|
|
|
|||
|
|
在任务级栅格地图中搜索一条:
|
|||
|
|
|
|||
|
|
- 从起点到目标附近;
|
|||
|
|
- 完整车体无碰撞;
|
|||
|
|
- 满足最大曲率限制;
|
|||
|
|
- 支持前进、倒车和换向;
|
|||
|
|
- 具有正确绕障拓扑;
|
|||
|
|
- 可作为后续平滑和 SQP 优化初值;
|
|||
|
|
|
|||
|
|
的空间粗路径。
|
|||
|
|
|
|||
|
|
Hybrid A* 负责决定:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
从哪里走
|
|||
|
|
绕障碍物哪一侧走
|
|||
|
|
什么时候前进
|
|||
|
|
什么时候倒车
|
|||
|
|
在哪里换向
|
|||
|
|
以什么车头航向接近目标
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Hybrid A* 不负责:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
速度
|
|||
|
|
加速度
|
|||
|
|
角速度
|
|||
|
|
时间戳
|
|||
|
|
舵轮角度
|
|||
|
|
轮速
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4.2 搜索状态
|
|||
|
|
|
|||
|
|
连续状态:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
State:
|
|||
|
|
x
|
|||
|
|
y
|
|||
|
|
theta
|
|||
|
|
direction
|
|||
|
|
curvatureIndex
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
字段定义:
|
|||
|
|
|
|||
|
|
- `x、y`:AMR 几何中心位置;
|
|||
|
|
- `theta`:车头航向;
|
|||
|
|
- `direction`:`Forward` 或 `Reverse`;
|
|||
|
|
- `curvatureIndex`:当前离散车辆曲率等级。
|
|||
|
|
|
|||
|
|
Closed Set 键:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
GridKey:
|
|||
|
|
ix
|
|||
|
|
iy
|
|||
|
|
iHeading
|
|||
|
|
direction
|
|||
|
|
curvatureIndex
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4.3 运动模型
|
|||
|
|
|
|||
|
|
定义:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
directionSign = +1:Forward
|
|||
|
|
directionSign = -1:Reverse
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
运动积分:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
dx/ds = directionSign × cos(theta)
|
|||
|
|
dy/ds = directionSign × sin(theta)
|
|||
|
|
dtheta/ds = directionSign × VehicleCurvature
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
其中:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
Heading:
|
|||
|
|
始终表示车头朝向
|
|||
|
|
|
|||
|
|
ArcLength:
|
|||
|
|
始终非负并单调增加
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4.4 运动原语
|
|||
|
|
|
|||
|
|
第一版离散曲率集合:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
-kappaMax
|
|||
|
|
-0.5 × kappaMax
|
|||
|
|
0
|
|||
|
|
+0.5 × kappaMax
|
|||
|
|
+kappaMax
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
每个曲率均支持:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
Forward
|
|||
|
|
Reverse
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
第一版建议参数:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
PrimitiveLength = 0.50 m
|
|||
|
|
IntegrationStep = 0.05 m
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
每条原语按 0.05 m 步长积分,并在每个内部积分点执行完整车体碰撞检测。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4.5 搜索约束
|
|||
|
|
|
|||
|
|
每个候选原语必须检查:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
地图边界
|
|||
|
|
Occupied 栅格
|
|||
|
|
完整车辆矩形碰撞
|
|||
|
|
安全净空
|
|||
|
|
最大车辆曲率
|
|||
|
|
允许的运动方向
|
|||
|
|
曲率等级切换规则
|
|||
|
|
目标进入方向
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
第一阶段暂不直接约束:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
速度
|
|||
|
|
加速度
|
|||
|
|
曲率时间变化率
|
|||
|
|
舵轮转向速度
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
但需要通过代价项减少极端曲率跳变。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4.6 搜索代价
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
g =
|
|||
|
|
路径长度代价
|
|||
|
|
+ 倒车代价
|
|||
|
|
+ 换向代价
|
|||
|
|
+ 曲率代价
|
|||
|
|
+ 曲率变化代价
|
|||
|
|
+ 障碍物距离代价
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
启发函数:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
h = max(h2D, hRS)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
其中:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
h2D:
|
|||
|
|
基于二维 Dijkstra 的绕障距离
|
|||
|
|
|
|||
|
|
hRS:
|
|||
|
|
基于 Reeds–Shepp 模型的非完整约束距离
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
节点排序:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
f = g + HeuristicWeight × h
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4.7 终点附近 Reeds–Shepp 连接
|
|||
|
|
|
|||
|
|
```mermaid
|
|||
|
|
flowchart TD
|
|||
|
|
A[当前节点接近目标] --> B[生成 Reeds-Shepp 候选]
|
|||
|
|
B --> C[按 0.05 m 采样]
|
|||
|
|
C --> D[完整车体碰撞检查]
|
|||
|
|
D --> E[最大曲率与目标方向检查]
|
|||
|
|
E -->|成功| F[精确连接目标]
|
|||
|
|
E -->|失败| G[继续 Hybrid A* 搜索]
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
支持模式:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
Disabled
|
|||
|
|
Opportunistic
|
|||
|
|
RequiredNearGoal
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
停车、钻入和精确泊入任务优先使用:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
RequiredNearGoal
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4.8 Hybrid A* 输出
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
CoarsePathPoint:
|
|||
|
|
X
|
|||
|
|
Y
|
|||
|
|
Heading
|
|||
|
|
UnwrappedHeading
|
|||
|
|
ArcLength
|
|||
|
|
Direction
|
|||
|
|
VehicleCurvature
|
|||
|
|
GeometricCurvature
|
|||
|
|
BodyClearance
|
|||
|
|
IsGearSwitchPoint
|
|||
|
|
Source
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
路径按运动方向拆分:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
PathSegment:
|
|||
|
|
SegmentIndex
|
|||
|
|
Direction
|
|||
|
|
StartIndex
|
|||
|
|
EndIndex
|
|||
|
|
StartsAtGearSwitch
|
|||
|
|
EndsAtGearSwitch
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 5. Module 3:路径平滑与可行性处理
|
|||
|
|
|
|||
|
|
## 5.1 模块目标
|
|||
|
|
|
|||
|
|
消除 Hybrid A* 粗路径中的离散折线和不连续曲率,生成更平滑的空间参考路径。
|
|||
|
|
|
|||
|
|
该阶段只优化几何形状,不进行时间参数化。
|
|||
|
|
|
|||
|
|
不得改变:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
绕障侧
|
|||
|
|
前进与倒车顺序
|
|||
|
|
换向次数
|
|||
|
|
方向段拓扑
|
|||
|
|
目标进入方向
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 5.2 处理流程
|
|||
|
|
|
|||
|
|
```mermaid
|
|||
|
|
flowchart TD
|
|||
|
|
A[Hybrid A* 稠密粗路径] --> B[删除重复点]
|
|||
|
|
B --> C[按 Forward/Reverse 分段]
|
|||
|
|
C --> D[保留关键点]
|
|||
|
|
D --> E[按弧长重采样]
|
|||
|
|
E --> F[几何平滑]
|
|||
|
|
F --> G[完整可行性检查]
|
|||
|
|
G --> H[平滑空间路径]
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 5.3 必须保留的关键点
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
起点
|
|||
|
|
终点
|
|||
|
|
换向点
|
|||
|
|
曲率等级切换点
|
|||
|
|
直线与弯道切换点
|
|||
|
|
Reeds–Shepp 连接点
|
|||
|
|
局部最小净空点
|
|||
|
|
明显航向变化点
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
禁止跨换向点进行单条曲线拟合。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 5.4 平滑方法
|
|||
|
|
|
|||
|
|
### 5.4.1 贝塞尔曲线
|
|||
|
|
|
|||
|
|
适用于:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
局部短转角
|
|||
|
|
折线拐点快速平滑
|
|||
|
|
局部连接
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
特点:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
实现简单
|
|||
|
|
计算速度快
|
|||
|
|
局部形状易控制
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 5.4.2 五次多项式
|
|||
|
|
|
|||
|
|
适用于:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
末端短距离连接
|
|||
|
|
具有明确起终点位置、航向和曲率的局部段
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
特点:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
可同时约束位置、航向和曲率
|
|||
|
|
适合末端姿态调整
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 5.4.3 B 样条
|
|||
|
|
|
|||
|
|
适用于:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
较长的普通路径段
|
|||
|
|
多点连续平滑
|
|||
|
|
降低局部折线感
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
建议采用三次 B 样条作为第一版普通路径段的主平滑方法。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 5.5 可行性检查
|
|||
|
|
|
|||
|
|
平滑后的路径必须重新检查:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
完整车体碰撞
|
|||
|
|
地图边界
|
|||
|
|
Unknown / Occupied
|
|||
|
|
最小安全净空
|
|||
|
|
最大车辆曲率
|
|||
|
|
路径位置连续性
|
|||
|
|
路径切线连续性
|
|||
|
|
换向结构
|
|||
|
|
目标进入方向
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
若平滑失败:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
局部重新调整
|
|||
|
|
↓
|
|||
|
|
局部 QP 兜底
|
|||
|
|
↓
|
|||
|
|
仍失败则回退原始可行粗路径
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 5.6 输出
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
SmoothedPathPoint:
|
|||
|
|
X
|
|||
|
|
Y
|
|||
|
|
Heading
|
|||
|
|
ArcLength
|
|||
|
|
Direction
|
|||
|
|
VehicleCurvature
|
|||
|
|
GeometricCurvature
|
|||
|
|
BodyClearance
|
|||
|
|
Source
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
该输出仍然不包含:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
速度
|
|||
|
|
加速度
|
|||
|
|
时间戳
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 6. Module 4:SQP 轨迹优化
|
|||
|
|
|
|||
|
|
## 6.1 模块目标
|
|||
|
|
|
|||
|
|
以平滑空间路径作为参考线,通过 Frenet 坐标系和 SQP 优化,联合完成:
|
|||
|
|
|
|||
|
|
- 横向几何调整;
|
|||
|
|
- 曲率优化;
|
|||
|
|
- 纵向速度规划;
|
|||
|
|
- 加速度约束;
|
|||
|
|
- 换向停车约束;
|
|||
|
|
- 终点精确收敛;
|
|||
|
|
- 时间参数化。
|
|||
|
|
|
|||
|
|
最终生成可供车辆控制器跟踪的带时间轨迹。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 6.2 Frenet 坐标转换
|
|||
|
|
|
|||
|
|
将平滑路径作为参考线,建立 Frenet 坐标系:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
s:
|
|||
|
|
沿参考线的累计弧长
|
|||
|
|
|
|||
|
|
l:
|
|||
|
|
相对于参考线的横向偏移
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
转换后,将原二维路径问题分解为:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
横向 l-s 问题
|
|||
|
|
纵向 s-t 问题
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 6.3 横向 l-s 优化
|
|||
|
|
|
|||
|
|
主要优化变量:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
横向偏移 l
|
|||
|
|
横向一阶导数 dl/ds
|
|||
|
|
横向二阶导数 d²l/ds²
|
|||
|
|
曲率
|
|||
|
|
曲率变化
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
优化目标:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
尽量贴近参考线
|
|||
|
|
避开障碍物
|
|||
|
|
保持曲率平滑
|
|||
|
|
满足最大曲率
|
|||
|
|
满足安全走廊约束
|
|||
|
|
精确到达目标横向位置
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 6.4 纵向 s-t 优化
|
|||
|
|
|
|||
|
|
主要优化变量:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
s(t)
|
|||
|
|
速度 v(t)
|
|||
|
|
加速度 a(t)
|
|||
|
|
加加速度 jerk(t)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
优化目标:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
满足速度上限
|
|||
|
|
满足加速度约束
|
|||
|
|
满足减速度约束
|
|||
|
|
提高运动平顺性
|
|||
|
|
减少总时间
|
|||
|
|
在换向点停车
|
|||
|
|
在终点停车
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 6.5 SQP 联合优化
|
|||
|
|
|
|||
|
|
SQP 负责迭代求解:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
路径位置
|
|||
|
|
航向
|
|||
|
|
曲率
|
|||
|
|
速度
|
|||
|
|
加速度
|
|||
|
|
角速度
|
|||
|
|
时间戳
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
约束至少包括:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
障碍物安全约束
|
|||
|
|
车辆曲率约束
|
|||
|
|
速度约束
|
|||
|
|
加速度约束
|
|||
|
|
角速度约束
|
|||
|
|
换向点速度为 0
|
|||
|
|
终点位置约束
|
|||
|
|
终点航向约束
|
|||
|
|
终点速度约束
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
SQP 不负责:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
重新决定绕障侧
|
|||
|
|
凭空新增换向
|
|||
|
|
改变 Hybrid A* 已确定的拓扑结构
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 6.6 SQP 输出
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
TrajectoryPoint:
|
|||
|
|
X
|
|||
|
|
Y
|
|||
|
|
Heading
|
|||
|
|
Time
|
|||
|
|
ArcLength
|
|||
|
|
Direction
|
|||
|
|
Velocity
|
|||
|
|
Acceleration
|
|||
|
|
AngularVelocity
|
|||
|
|
VehicleCurvature
|
|||
|
|
GeometricCurvature
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
该轨迹可以直接提供给后续底盘控制与轨迹跟踪模块。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 7. Module 5:轨迹输出与底盘接口
|
|||
|
|
|
|||
|
|
## 7.1 输出内容
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
TrajectoryResult:
|
|||
|
|
PlanningStatus
|
|||
|
|
GoalReachType
|
|||
|
|
PathProcessingResult
|
|||
|
|
TrajectoryPoints
|
|||
|
|
DirectionSegments
|
|||
|
|
Diagnostics
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 7.2 底盘控制前的处理
|
|||
|
|
|
|||
|
|
轨迹规划器不直接输出四轮舵角和轮速。
|
|||
|
|
|
|||
|
|
底盘控制层负责:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
轨迹点
|
|||
|
|
↓
|
|||
|
|
车辆状态误差计算
|
|||
|
|
↓
|
|||
|
|
轨迹跟踪控制
|
|||
|
|
↓
|
|||
|
|
底盘运动学逆解
|
|||
|
|
↓
|
|||
|
|
四轮舵角与轮速
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 8. Agent 开发顺序
|
|||
|
|
|
|||
|
|
## 阶段 M0:数据结构与公共工具
|
|||
|
|
|
|||
|
|
实现:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
Pose2D
|
|||
|
|
VehicleParameters
|
|||
|
|
GoalPose
|
|||
|
|
GridMapData Adapter
|
|||
|
|
角度归一化
|
|||
|
|
坐标变换
|
|||
|
|
单位转换
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
完成标准:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
单元测试通过
|
|||
|
|
毫米与米转换无误
|
|||
|
|
航向角定义统一
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 阶段 M1:地图适配与碰撞检测
|
|||
|
|
|
|||
|
|
实现:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
PlanningMapAdapter
|
|||
|
|
PlanningGridMap
|
|||
|
|
距离场
|
|||
|
|
旋转矩形碰撞检测
|
|||
|
|
地图边界检测
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
完成标准:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
AMR 自身不会出现在环境占据图中
|
|||
|
|
不同航向下完整车体碰撞检测正确
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 阶段 M2:最小 Hybrid A*
|
|||
|
|
|
|||
|
|
实现:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
只前进
|
|||
|
|
无障碍
|
|||
|
|
恒曲率运动原语
|
|||
|
|
基础启发函数
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
完成标准:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
稳定从起点搜索到目标
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 阶段 M3:障碍物、倒车和换向
|
|||
|
|
|
|||
|
|
实现:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
Dijkstra 启发
|
|||
|
|
Forward / Reverse
|
|||
|
|
换向代价
|
|||
|
|
方向分段
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
完成标准:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
单障碍绕行成功
|
|||
|
|
需要倒车的场景成功
|
|||
|
|
换向点正确输出
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 阶段 M4:目标终止与 Reeds–Shepp
|
|||
|
|
|
|||
|
|
实现:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
目标位置容差
|
|||
|
|
目标航向容差
|
|||
|
|
目标进入方向
|
|||
|
|
Reeds–Shepp 三种模式
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
完成标准:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
普通目标和狭窄目标场景均能正确终止
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 阶段 M5:路径后处理
|
|||
|
|
|
|||
|
|
实现:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
父节点回溯
|
|||
|
|
内部积分点恢复
|
|||
|
|
关键点保留
|
|||
|
|
弧长重采样
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
完成标准:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
路径无断点
|
|||
|
|
换向结构明确
|
|||
|
|
方向段正确
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 阶段 M6:平滑与可行性检查
|
|||
|
|
|
|||
|
|
实现:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
B 样条
|
|||
|
|
贝塞尔曲线
|
|||
|
|
五次多项式
|
|||
|
|
完整碰撞复核
|
|||
|
|
失败回退
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
完成标准:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
路径曲率明显改善
|
|||
|
|
不改变原有拓扑
|
|||
|
|
平滑失败可回退
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 阶段 M7:SQP 轨迹优化
|
|||
|
|
|
|||
|
|
实现:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
Frenet 坐标转换
|
|||
|
|
l-s 优化
|
|||
|
|
s-t 优化
|
|||
|
|
速度和加速度约束
|
|||
|
|
换向停车约束
|
|||
|
|
终点精确约束
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
完成标准:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
输出带时间的可跟踪轨迹
|
|||
|
|
终点位置与航向满足要求
|
|||
|
|
换向点速度为 0
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 阶段 M8:性能优化
|
|||
|
|
|
|||
|
|
在前述流程完整跑通后再开展:
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
性能剖析
|
|||
|
|
Open List 优化
|
|||
|
|
Closed Set 优化
|
|||
|
|
节点内存优化
|
|||
|
|
地图裁剪
|
|||
|
|
预计算运动原语
|
|||
|
|
预计算碰撞模板
|
|||
|
|
启发图复用
|
|||
|
|
路径热启动
|
|||
|
|
增量规划
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 9. 核心技术边界
|
|||
|
|
|
|||
|
|
## Hybrid A* 负责
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
拓扑
|
|||
|
|
绕障侧
|
|||
|
|
前进与倒车结构
|
|||
|
|
换向位置
|
|||
|
|
基本运动学可行性
|
|||
|
|
粗目标位姿接近
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 路径平滑负责
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
消除折线
|
|||
|
|
改善局部曲率
|
|||
|
|
保持拓扑不变
|
|||
|
|
输出连续空间参考路径
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## SQP 负责
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
终点精确收敛
|
|||
|
|
速度规划
|
|||
|
|
加速度规划
|
|||
|
|
角速度规划
|
|||
|
|
时间参数化
|
|||
|
|
动态可跟踪性
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 底盘控制负责
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
四轮舵角
|
|||
|
|
四轮轮速
|
|||
|
|
轨迹跟踪
|
|||
|
|
执行器控制
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# 10. 最终技术路线总结
|
|||
|
|
|
|||
|
|
```text
|
|||
|
|
起点位姿 + 目标位姿 + 车辆参数 + 障碍物数据
|
|||
|
|
↓
|
|||
|
|
构建任务级环境占据地图
|
|||
|
|
↓
|
|||
|
|
通过 PlanningMapAdapter 转换为规划地图
|
|||
|
|
↓
|
|||
|
|
Hybrid A* 搜索满足运动学约束的粗路径
|
|||
|
|
↓
|
|||
|
|
Reeds–Shepp 处理终点位姿连接
|
|||
|
|
↓
|
|||
|
|
回溯、重采样和路径方向分段
|
|||
|
|
↓
|
|||
|
|
B 样条 / 贝塞尔 / 五次多项式进行几何平滑
|
|||
|
|
↓
|
|||
|
|
重新执行完整车体碰撞和曲率检查
|
|||
|
|
↓
|
|||
|
|
建立 Frenet 参考坐标系
|
|||
|
|
↓
|
|||
|
|
横向 l-s 优化路径形状和曲率
|
|||
|
|
↓
|
|||
|
|
纵向 s-t 优化速度、加速度和停车决策
|
|||
|
|
↓
|
|||
|
|
SQP 联合求解可跟踪轨迹
|
|||
|
|
↓
|
|||
|
|
输出位置、航向、速度、加速度、角速度和时间戳
|
|||
|
|
↓
|
|||
|
|
底盘控制器进行四轮舵角和轮速逆解
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
该技术路线的核心原则是:
|
|||
|
|
|
|||
|
|
> Hybrid A* 解决“怎么走”,路径平滑解决“走得是否顺”,SQP 解决“以什么速度和时间走”,底盘控制解决“四个舵轮和车轮如何执行”。
|