👨🎓个人主页
💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
💥1 概述
RRT算法生长并维护一棵树,树的每个节点都是工作空间中的一个节点(状态)。算法所探索的区域即为树所占据的区域。算法最初以一棵以起始节点为唯一节点的树开始。在每次迭代时,通过选择一个随机状态并向该状态扩展树来扩展树。扩展是通过将树中距离最近的节点向选定的随机状态扩展一小步来完成的,如图2所示。算法运行,直到某个扩展使树足够靠近目标。
编辑
一、越野驾驶风险因素与规避需求
越野环境的非结构化特性(如陡坡、泥沼、沙地)和高动态障碍物(落石、动物)导致传统路径规划失效。主要风险包括:
- 车辆物理风险:高重心导致翻车、轮胎打滑/陷车、涉水熄火。
- 环境风险:地形突变(如沙丘背面陡坡,)、能见度低(暴雨/暴雪,)。
- 人为风险:年轻驾驶员经验不足(44%事故率,)、超速(18%事故主因)及未佩戴防护装备(41%,)。
编辑
规避核心需求:需融合地形风险评估、实时车辆状态监控(倾角、速度)及动态障碍物响应。
二、运动规划算法分类及越野适应性
现有算法可分为五类,其特点与越野适用性对比如下:
编辑
编辑
| 类别 | 代表算法 | 越野优势 | 局限性 |
| 图搜索 | A*、Dijkstra | 全局最优路径 | 动态障碍响应差、计算效率低 |
| 采样规划 | RRT、PRM | 高维环境适应性 | 路径不平滑、忽略风险量化 |
| 生物启发 | PSO、GA | 多目标优化(避障+能耗,) | 易陷局部最优、实时性差 |
| 机器学习 | 神经网络、DRL | 动态环境在线学习 | 需大量训练数据 |
| 势场法 | APF | 实时避障 | 局部极小值问题 |
编辑
注:A* 因其平衡效率与最优性,常作为全局规划基础;DWA(动态窗口法)因实时避障能力成为局部规划主流。
三、动态避障与路径优化关键技术
1. 算法融合策略
- A + DWA*:
- 改进A*的启发函数(融合曼哈顿/欧氏距离)提升搜索效率(路径长度↓17.2%,节点数↓62.3%),再以DWA处理动态障碍。
- 应用案例:AGV在越野场景实时避障。
- A + APF*:
- A*全局规划后,APF局部优化路径(规避随机障碍)。
2. 路径优化技术
- 冗余节点删除:修剪A*路径中的冗余转折点。
- 最小快照平滑:生成车辆可执行的平滑轨迹。
四、环境感知技术对风险规避的影响
感知精度直接决定风险评估有效性:
- 多传感器融合:激光雷达(3D地形建模)+摄像头(纹理识别)+IMU(车辆姿态)实现98.65%地形分类精度。
- 关键感知任务:
- 可通行区域检测:识别泥沼/沙地等危险地表。
- 障碍物跨模态识别:定位非标准障碍(如灌木丛中岩石,)。
- 挑战:剧烈环境变化(如突然塌方)可能导致感知失效,需结合先验知识增强鲁棒性。
五、运动规划与风险规避的协同框架
1. 分层规划架构
- 全局层:改进A*(如Coarse2fine A*)生成风险最小路径。
- 局部层:基于DWA或改进RRT实时避障,集成车辆动力学约束。
2. 风险量化融合
- 风险地图构建:量化坡度(>15°翻车风险)、曲率、粗糙度。
- 控制策略:根据实时倾角调整速度/转向角。
3. 实时验证案例
- UGV平台:部署Coarse2fine A* + 风险感知局部规划器,通过陡坡/沟渠场景验证。
- MPC框架:结合物理约束(防翻车/沟渠失效),实现激进驾驶下的安全控制。
六、性能评估指标
算法需兼顾安全性与效率:
| 指标类型 | 具体指标 | 说明 |
| 安全性 | 最大侧倾角、坡度阈值 | 超过阈值即风险 |
| 路径质量 | 路径长度、平滑度(曲率变化率) | 缩短行程且车辆可执行 |
| 实时性 | 规划时间/帧率 | 满足动态障碍响应需求 |
| 鲁棒性 | 环境突变下的成功率 | 如暴雨中感知退化时的稳定性 |
| 多目标优化 | 风险值+能耗+时间加权评分 | 综合最优 |
注:AAE(平均绝对误差)、AMV(平均速度误差)用于轨迹预测评估。
编辑
七、挑战与未来方向
- 环境适应性:需强化感知-规划闭环对极端天气的鲁棒性。
- 计算效率:嵌入式设备上部署复杂算法(如DRL)的优化。
- 人机协同:透明座舱设计,实时风险可视化辅助驾驶员决策。
- 端到端学习:基于大模型的端到端感知-规划框架。
总结:当前最有效方案为 分层融合框架(全局A* + 局部DWA/APF),结合多传感器感知与风险量化,但需进一步突破动态环境下的算法实时性与适应性。
📚2 运行结果
编辑
编辑
2.1 场景1
编辑
编辑
编辑
编辑
2.2 场景2
编辑
编辑
2.3 场景3
编辑
2.4 场景4
编辑
编辑
编辑
2.5 场景5
编辑
编辑
2.6 场景6
编辑 编辑
编辑
编辑
编辑
部分代码:
%**************************************
function T = init_Tree(start,goal)
T.v(1).x = start(1); % start point
T.v(1).y = start(2);
T.v(1).theta = start(3); % start orientation
T.v(1).xPrev = start(1); % parent node for start point
T.v(1).yPrev = start(2);
T.v(1).thetaPrev = start(3); % parent node orietation
T.v(1).dist=0; % RRT tree node 1 attribute of distance
T.v(1).angle=0;% RRT tree node 1 attribute of angle change
T.v(1).dist_angle=0; % distance + angle change
T.v(1).Potential_value=0; % RRT tree node 1 attribute of potential value
T.v(1).Dist_Angle_PFvalue=0;% distance + angle change + potential value
T.v(1).indPrev = 0; %% RRT tree node 1 attribute of previous node index
T.v(1).path_flag = true;% if the node is within the path
T.v(1).valid = true; % if the node is active
T.v(1).Heuristic = norm([goal(1)-start(1) ,goal(2)-start(2)]);% RRT tree node heuristic value, to goal Euclidean distance
T.v(1).toGoal = norm(start(1,1:2) - goal); % estimation distance to goal for start point = cost to come + cost to go
T.v(1).series = zeros(16,3); % trajectory points for node 1
end
function [ChooseNeighbor_Rang, rewiring_range, minimal_rewiring_range, plot_flag, flag_rand_goal, coef_angle, Circle_radius, div_n, diff_margin] = Init_Parameter(Goal)
ChooseNeighbor_Rang = 220; % Neighbor range
rewiring_range = 280; % Rewire range
minimal_rewiring_range = 180; % Minimal rewire range
plot_flag = false; % plot flag
flag_rand_goal = false; % random sample flag
coef_angle = 40; % coefficient of angle
Circle_radius =60; % vehicle turing circle
div_n = 15; % segment division
diff_margin = 20; % optimal trajectory cost update margin
end
🎉3 参考文献
部分理论来源于网络,如有侵权请联系删除。
[1]Hongqing Tian, Boqi Li, Heye Huang, Ling Han