基于RRT算法的含运动力学约束路径规划仿真
项目概述
本项目在 MATLAB 环境中实现了一个基于快速扩展随机树(RRT)的高级路径规划系统。不同于传统的几何路径规划(仅连接直线),本项目核心在于处理非完整约束系统(Non-holonomic Constraints)。算法采用了自行车运动学模型进行节点扩展,确保生成的路径不仅无碰撞,而且符合机器人的物理运动特性(如最小转弯半径),生成的轨迹是一系列连续的平滑曲线。
功能特性
- 运动学约束规划:摒弃了简单的直线连接,通过积分车辆运动学方程生成可行轨迹,符合阿克曼转向几何。
- 非完整约束扩展:在树的生长过程中,通过离散化控制输入(转向角),寻找最符合随机采样方向的控制量。
- 实时避障系统:在轨迹生成的每一个积分步长中进行精确的碰撞检测,有效避开矩形障碍物。
- 目标偏向采样:引入 Goal Bias 策略,以一定概率直接向目标点采样,加速收敛过程。
- 全过程可视化:动态展示 RRT 树的生长过程、探索区域以及最终生成的平滑路径和车辆姿态。
系统要求
- MATLAB (推荐 R2016b 及以上版本)
- 不需要额外的工具箱(Toolbox),代码纯原生实现。
使用方法
- 确保代码环境整洁,直接运行主脚本。
- 程序将弹出一个名为 "RRT Kinodynamic Path Planning" 的窗口。
- 窗口将实时显示搜索树(青色线条)的扩展过程。
- 搜索完成后,若成功找到路径,将用深蓝色粗线绘制最终轨迹,并沿途显示机器人的朝向姿态;若失败,控制台将输出提示信息。
详细功能与算法实现逻辑
本项目的主程序逻辑高度集成,主要包含参数定义、RRT主循环、运动学仿真及碰撞检测模块。
1. 环境与模型参数设置
- 地图环境:定义了 100x100 的二维工作空间,并在其中布置了四个矩形障碍物。
- 机器人模型:采用自行车模型参数,定义了轴距(L)、最大转向角(max_steer)、恒定行驶速度(v)。
- 仿真步长:通过积分时间步长(dt)和单次扩展步数(step_size)控制轨迹生长的精细度。
- 算法参数:设定了最大迭代次数、目标采样概率以及判断到达目标的距离容差。
2. RRT 核心生长逻辑
程序通过以下循环步骤构建路径树:
算法会在地图范围内随机生成采样点。为了提高效率,设有 10% 的概率直接将采样点设为目标点(Goal Bias),引导树向终点生长。
遍历当前的 RRT 树,计算树中所有节点与采样点之间的欧氏距离,选取距离最近的节点作为父节点(
q_nearest)。
这是本算法区别于普通 RRT 的关键步骤。算法不会直接连接父节点和采样点,而是:
1. 将机器人的转向控制输入在
[-max_steer, max_steer] 范围内离散化为 5 个具体的转向角。
2. 对每一个转向角进行
前向积分仿真,模拟机器人行驶一段固定时间后的状态。
3. 采用贪心策略,比较这 5 条模拟轨迹的终点,选择离随机采样点最近的那条轨迹作为新的树枝。
在选定最佳轨迹后,如果该轨迹全程未触碰障碍物且未越界,则将仿真终点作为新节点加入树中,并记录从父节点到该节点的详细轨迹点用于绘图。
3. 运动学仿真模型 (simulate_holonomic)
- 该模块实现了机器人的状态更新方程。
- 输入当前状态
[x, y, theta] 和控制量(转向角)。 - 利用欧拉积分法,根据恒定速度和当前航向角更新位置,根据轴距和转向角更新航向角。
- 在每个积分微步中,都会调用碰撞检测函数,一旦检测到碰撞立即标记该轨迹无效。
4. 碰撞检测机制 (check_collision)
- 边界检测:判断机器人是否驶出地图边界。
- 障碍物检测:将机器人简化为一个圆形(基于设定的安全半径
safe_dist)。 - 计算机器人圆心到每个矩形障碍物的最短距离(点到矩形距离算法)。若距离平方小于安全半径平方,则判定为碰撞。
5. 路径回溯与可视化
- 动态绘图:在搜索过程中,每迭代一定次数刷新绘图,展示探索树的生长。
- 路径回溯:一旦新节点与目标点的距离小于设定容差,搜索结束。代码从终点节点开始,通过父节点索引反向追踪直至起点,提取完整的状态序列。
- 结果展示:绘制所有探索过的树枝(灰色),高亮显示最终优选路径(蓝色),并沿途绘制三角形图例以展示机器人的航向变化。