Files
ParkingRobot/.task8-sweep/ParkrobTrajplanner/Initial_plan/AMR_轨迹规划技术路线_Agent版.md
T

17 KiB
Raw Blame History

AMR 非结构化道路轨迹规划技术路线(面向 Agent)

1. 项目目标

开发一套面向非结构化道路四舵轮 AMR 的轨迹规划系统。

第一阶段采用车式运动模型,具体边界如下:

  • 支持前进、倒车和换向;
  • 暂不支持蟹行、纯横移和原地旋转;
  • 车体航向始终表示车头朝向;
  • 规划结果必须满足完整车体无碰撞、最大曲率约束和目标位姿要求;
  • 最终输出可供底盘控制器跟踪的带时间轨迹。

整体技术路线分为四个主要阶段:

flowchart LR
    A[输入与地图构建] --> B[Hybrid A* 粗路径规划]
    B --> C[路径平滑与可行性处理]
    C --> D[SQP 轨迹优化]
    D --> E[输出可跟踪轨迹]

2. 总体模块划分

Module 1:输入与地图构建
Module 2Hybrid A* 粗路径规划
Module 3:路径平滑与可行性处理
Module 4SQP 轨迹优化
Module 5:轨迹输出与底盘接口

各模块必须通过明确的数据结构传递结果,不允许后级模块直接读取前级模块内部状态。


3. Module 1:输入与地图构建

3.1 模块目标

根据起点、终点、车辆参数和环境障碍物信息,构建一张供全局搜索使用的任务级二维栅格地图。

地图范围至少覆盖:

  • AMR 起点;
  • 目标位置;
  • 起点与目标之间的规划区域;
  • 周围必要的安全边界。

当前阶段继续使用已有 GridMapData 作为地图数据来源,并通过适配器转换为 Hybrid A* 使用的规划地图。


3.2 输入数据

3.2.1 起点位姿

StartPose:
    X
    Y
    Heading
    StartDirection
    StartVehicleCurvature

字段定义:

  • X、Y:AMR 几何中心在世界坐标系中的位置;
  • Heading:车头航向;
  • StartDirectionForwardReverseBoth
  • StartVehicleCurvature:车辆当前转向曲率,未提供时默认为 0。

3.2.2 终点位姿

GoalPose:
    X
    Y
    Heading
    GoalDirectionConstraint

目标进入方向约束:

Any
Forward
Reverse

其中:

  • GoalHeading 始终表示目标车头朝向;
  • GoalDirectionConstraint 只约束最后一个连续运动段的运动方向。

3.2.3 车辆参数

VehicleParameters:
    VehicleLength
    VehicleWidth
    MaxVehicleCurvature
    MinTurningRadius

第一阶段车辆参考点统一采用 AMR 几何中心。


3.2.4 环境障碍物

当前已接入:

TwoLegDetect 两腿检测结果

后续扩展:

点云障碍物
激光雷达障碍物
静态障碍物
动态障碍物
禁行区域

3.2.5 地图配置

MapConfiguration:
    GridResolution
    MapMarginX
    MapMarginY
    ObstacleInflation
    MaximumCellCount

3.3 当前地图构建逻辑

flowchart TD
    A[读取 AMR 位姿与车身尺寸] --> B[读取目标位置与地图参数]
    B --> C[计算任务级地图边界]
    C --> D[创建 GridMapData]
    D --> E[读取 TwoLegDetect 障碍物]
    E --> F[车体系坐标转世界坐标]
    F --> G[圆形障碍物栅格化]
    G --> H[输出环境占据栅格]

当前地图边界由起点与目标位置共同决定:

XMin = min(StartX, GoalX) - MapMarginX
XMax = max(StartX, GoalX) + MapMarginX

YMin = min(StartY, GoalY) - MapMarginY
YMax = max(StartY, GoalY) + MapMarginY

栅格尺寸:

Cols = ceil((XMax - XMin) / Resolution)
Rows = ceil((YMax - YMin) / Resolution)

3.4 当前地图适配要求

现有地图格式为:

单位:mm
数组:Cells[row, col]
状态:0 = 未标记占据,1 = Occupied

Hybrid A* 内部统一使用:

单位:m
角度:rad
曲率:1/m

因此需要增加:

PlanningMapAdapter

适配流程:

flowchart TD
    A[GridMapData] --> B[校验边界、尺寸与分辨率]
    B --> C[深拷贝 Occupancy]
    C --> D[毫米转换为米]
    D --> E[生成障碍物距离场]
    E --> F[输出 PlanningGridMap]

3.5 地图构建阶段的关键规则

3.5.1 规划地图不得包含 AMR 自身占据层

AMR 自身不能写入环境占据地图,否则 Hybrid A* 起点会直接被判定为碰撞。

正确关系:

环境地图:
    只包含外部障碍物

AMR 自身:
    通过 VehiclePose、VehicleLength、VehicleWidth 单独描述

3.5.2 障碍物膨胀量必须明确

建议将:

SafetyMarginMm

改为:

ObstacleInflationMm

其唯一含义是:

障碍物写入地图前向外膨胀的距离。

必须避免:

障碍物已经膨胀
+
车辆碰撞矩形再次增加同样余量

3.5.3 区分地图创建成功与地图可用于规划

Succeeded:
    地图数据结构是否创建成功

PlanningReady:
    当前地图是否满足规划输入要求

PlanningBlockReason
    地图为何不能用于规划

例如:

TwoLegDetect 正常:
    Succeeded = true
    PlanningReady = true

TwoLegDetect 无结果:
    Succeeded = true
    PlanningReady = false

3.6 地图输出

PlanningGridMap:
    XMin
    XMax
    YMin
    YMax
    Resolution
    Rows
    Cols
    Occupancy[row, col]
    ObstacleDistance[row, col]
    ObstacleInflation
    InputSource
    PlanningReady
    MapVersion

当前第一版状态定义:

Occupancy = 0
    当前地图层未标记为占据

Occupancy = 1
    占据

地图外部:
    按占据处理

4. Module 2Hybrid A* 粗路径规划

4.1 模块目标

在任务级栅格地图中搜索一条:

  • 从起点到目标附近;
  • 完整车体无碰撞;
  • 满足最大曲率限制;
  • 支持前进、倒车和换向;
  • 具有正确绕障拓扑;
  • 可作为后续平滑和 SQP 优化初值;

的空间粗路径。

Hybrid A* 负责决定:

从哪里走
绕障碍物哪一侧走
什么时候前进
什么时候倒车
在哪里换向
以什么车头航向接近目标

Hybrid A* 不负责:

速度
加速度
角速度
时间戳
舵轮角度
轮速

4.2 搜索状态

连续状态:

State:
    x
    y
    theta
    direction
    curvatureIndex

字段定义:

  • x、yAMR 几何中心位置;
  • theta:车头航向;
  • directionForwardReverse
  • curvatureIndex:当前离散车辆曲率等级。

Closed Set 键:

GridKey:
    ix
    iy
    iHeading
    direction
    curvatureIndex

4.3 运动模型

定义:

directionSign = +1Forward
directionSign = -1Reverse

运动积分:

dx/ds = directionSign × cos(theta)
dy/ds = directionSign × sin(theta)
dtheta/ds = directionSign × VehicleCurvature

其中:

Heading
    始终表示车头朝向

ArcLength:
    始终非负并单调增加

4.4 运动原语

第一版离散曲率集合:

-kappaMax
-0.5 × kappaMax
0
+0.5 × kappaMax
+kappaMax

每个曲率均支持:

Forward
Reverse

第一版建议参数:

PrimitiveLength = 0.50 m
IntegrationStep = 0.05 m

每条原语按 0.05 m 步长积分,并在每个内部积分点执行完整车体碰撞检测。


4.5 搜索约束

每个候选原语必须检查:

地图边界
Occupied 栅格
完整车辆矩形碰撞
安全净空
最大车辆曲率
允许的运动方向
曲率等级切换规则
目标进入方向

第一阶段暂不直接约束:

速度
加速度
曲率时间变化率
舵轮转向速度

但需要通过代价项减少极端曲率跳变。


4.6 搜索代价

g =
    路径长度代价
  + 倒车代价
  + 换向代价
  + 曲率代价
  + 曲率变化代价
  + 障碍物距离代价

启发函数:

h = max(h2D, hRS)

其中:

h2D
    基于二维 Dijkstra 的绕障距离

hRS
    基于 ReedsShepp 模型的非完整约束距离

节点排序:

f = g + HeuristicWeight × h

4.7 终点附近 ReedsShepp 连接

flowchart TD
    A[当前节点接近目标] --> B[生成 Reeds-Shepp 候选]
    B --> C[按 0.05 m 采样]
    C --> D[完整车体碰撞检查]
    D --> E[最大曲率与目标方向检查]
    E -->|成功| F[精确连接目标]
    E -->|失败| G[继续 Hybrid A* 搜索]

支持模式:

Disabled
Opportunistic
RequiredNearGoal

停车、钻入和精确泊入任务优先使用:

RequiredNearGoal

4.8 Hybrid A* 输出

CoarsePathPoint:
    X
    Y
    Heading
    UnwrappedHeading
    ArcLength
    Direction
    VehicleCurvature
    GeometricCurvature
    BodyClearance
    IsGearSwitchPoint
    Source

路径按运动方向拆分:

PathSegment:
    SegmentIndex
    Direction
    StartIndex
    EndIndex
    StartsAtGearSwitch
    EndsAtGearSwitch

5. Module 3:路径平滑与可行性处理

5.1 模块目标

消除 Hybrid A* 粗路径中的离散折线和不连续曲率,生成更平滑的空间参考路径。

该阶段只优化几何形状,不进行时间参数化。

不得改变:

绕障侧
前进与倒车顺序
换向次数
方向段拓扑
目标进入方向

5.2 处理流程

flowchart TD
    A[Hybrid A* 稠密粗路径] --> B[删除重复点]
    B --> C[按 Forward/Reverse 分段]
    C --> D[保留关键点]
    D --> E[按弧长重采样]
    E --> F[几何平滑]
    F --> G[完整可行性检查]
    G --> H[平滑空间路径]

5.3 必须保留的关键点

起点
终点
换向点
曲率等级切换点
直线与弯道切换点
Reeds–Shepp 连接点
局部最小净空点
明显航向变化点

禁止跨换向点进行单条曲线拟合。


5.4 平滑方法

5.4.1 贝塞尔曲线

适用于:

局部短转角
折线拐点快速平滑
局部连接

特点:

实现简单
计算速度快
局部形状易控制

5.4.2 五次多项式

适用于:

末端短距离连接
具有明确起终点位置、航向和曲率的局部段

特点:

可同时约束位置、航向和曲率
适合末端姿态调整

5.4.3 B 样条

适用于:

较长的普通路径段
多点连续平滑
降低局部折线感

建议采用三次 B 样条作为第一版普通路径段的主平滑方法。


5.5 可行性检查

平滑后的路径必须重新检查:

完整车体碰撞
地图边界
Unknown / Occupied
最小安全净空
最大车辆曲率
路径位置连续性
路径切线连续性
换向结构
目标进入方向

若平滑失败:

局部重新调整
    ↓
局部 QP 兜底
    ↓
仍失败则回退原始可行粗路径

5.6 输出

SmoothedPathPoint:
    X
    Y
    Heading
    ArcLength
    Direction
    VehicleCurvature
    GeometricCurvature
    BodyClearance
    Source

该输出仍然不包含:

速度
加速度
时间戳

6. Module 4SQP 轨迹优化

6.1 模块目标

以平滑空间路径作为参考线,通过 Frenet 坐标系和 SQP 优化,联合完成:

  • 横向几何调整;
  • 曲率优化;
  • 纵向速度规划;
  • 加速度约束;
  • 换向停车约束;
  • 终点精确收敛;
  • 时间参数化。

最终生成可供车辆控制器跟踪的带时间轨迹。


6.2 Frenet 坐标转换

将平滑路径作为参考线,建立 Frenet 坐标系:

s:
    沿参考线的累计弧长

l:
    相对于参考线的横向偏移

转换后,将原二维路径问题分解为:

横向 l-s 问题
纵向 s-t 问题

6.3 横向 l-s 优化

主要优化变量:

横向偏移 l
横向一阶导数 dl/ds
横向二阶导数 d²l/ds²
曲率
曲率变化

优化目标:

尽量贴近参考线
避开障碍物
保持曲率平滑
满足最大曲率
满足安全走廊约束
精确到达目标横向位置

6.4 纵向 s-t 优化

主要优化变量:

s(t)
速度 v(t)
加速度 a(t)
加加速度 jerk(t)

优化目标:

满足速度上限
满足加速度约束
满足减速度约束
提高运动平顺性
减少总时间
在换向点停车
在终点停车

6.5 SQP 联合优化

SQP 负责迭代求解:

路径位置
航向
曲率
速度
加速度
角速度
时间戳

约束至少包括:

障碍物安全约束
车辆曲率约束
速度约束
加速度约束
角速度约束
换向点速度为 0
终点位置约束
终点航向约束
终点速度约束

SQP 不负责:

重新决定绕障侧
凭空新增换向
改变 Hybrid A* 已确定的拓扑结构

6.6 SQP 输出

TrajectoryPoint:
    X
    Y
    Heading
    Time
    ArcLength
    Direction
    Velocity
    Acceleration
    AngularVelocity
    VehicleCurvature
    GeometricCurvature

该轨迹可以直接提供给后续底盘控制与轨迹跟踪模块。


7. Module 5:轨迹输出与底盘接口

7.1 输出内容

TrajectoryResult:
    PlanningStatus
    GoalReachType
    PathProcessingResult
    TrajectoryPoints
    DirectionSegments
    Diagnostics

7.2 底盘控制前的处理

轨迹规划器不直接输出四轮舵角和轮速。

底盘控制层负责:

轨迹点
    ↓
车辆状态误差计算
    ↓
轨迹跟踪控制
    ↓
底盘运动学逆解
    ↓
四轮舵角与轮速

8. Agent 开发顺序

阶段 M0:数据结构与公共工具

实现:

Pose2D
VehicleParameters
GoalPose
GridMapData Adapter
角度归一化
坐标变换
单位转换

完成标准:

单元测试通过
毫米与米转换无误
航向角定义统一

阶段 M1:地图适配与碰撞检测

实现:

PlanningMapAdapter
PlanningGridMap
距离场
旋转矩形碰撞检测
地图边界检测

完成标准:

AMR 自身不会出现在环境占据图中
不同航向下完整车体碰撞检测正确

阶段 M2:最小 Hybrid A*

实现:

只前进
无障碍
恒曲率运动原语
基础启发函数

完成标准:

稳定从起点搜索到目标

阶段 M3:障碍物、倒车和换向

实现:

Dijkstra 启发
Forward / Reverse
换向代价
方向分段

完成标准:

单障碍绕行成功
需要倒车的场景成功
换向点正确输出

阶段 M4:目标终止与 ReedsShepp

实现:

目标位置容差
目标航向容差
目标进入方向
Reeds–Shepp 三种模式

完成标准:

普通目标和狭窄目标场景均能正确终止

阶段 M5:路径后处理

实现:

父节点回溯
内部积分点恢复
关键点保留
弧长重采样

完成标准:

路径无断点
换向结构明确
方向段正确

阶段 M6:平滑与可行性检查

实现:

B 样条
贝塞尔曲线
五次多项式
完整碰撞复核
失败回退

完成标准:

路径曲率明显改善
不改变原有拓扑
平滑失败可回退

阶段 M7SQP 轨迹优化

实现:

Frenet 坐标转换
l-s 优化
s-t 优化
速度和加速度约束
换向停车约束
终点精确约束

完成标准:

输出带时间的可跟踪轨迹
终点位置与航向满足要求
换向点速度为 0

阶段 M8:性能优化

在前述流程完整跑通后再开展:

性能剖析
Open List 优化
Closed Set 优化
节点内存优化
地图裁剪
预计算运动原语
预计算碰撞模板
启发图复用
路径热启动
增量规划

9. 核心技术边界

Hybrid A* 负责

拓扑
绕障侧
前进与倒车结构
换向位置
基本运动学可行性
粗目标位姿接近

路径平滑负责

消除折线
改善局部曲率
保持拓扑不变
输出连续空间参考路径

SQP 负责

终点精确收敛
速度规划
加速度规划
角速度规划
时间参数化
动态可跟踪性

底盘控制负责

四轮舵角
四轮轮速
轨迹跟踪
执行器控制

10. 最终技术路线总结

起点位姿 + 目标位姿 + 车辆参数 + 障碍物数据
        ↓
构建任务级环境占据地图
        ↓
通过 PlanningMapAdapter 转换为规划地图
        ↓
Hybrid A* 搜索满足运动学约束的粗路径
        ↓
Reeds–Shepp 处理终点位姿连接
        ↓
回溯、重采样和路径方向分段
        ↓
B 样条 / 贝塞尔 / 五次多项式进行几何平滑
        ↓
重新执行完整车体碰撞和曲率检查
        ↓
建立 Frenet 参考坐标系
        ↓
横向 l-s 优化路径形状和曲率
        ↓
纵向 s-t 优化速度、加速度和停车决策
        ↓
SQP 联合求解可跟踪轨迹
        ↓
输出位置、航向、速度、加速度、角速度和时间戳
        ↓
底盘控制器进行四轮舵角和轮速逆解

该技术路线的核心原则是:

Hybrid A* 解决“怎么走”,路径平滑解决“走得是否顺”,SQP 解决“以什么速度和时间走”,底盘控制解决“四个舵轮和车轮如何执行”。