
1) 【一句话结论】处理动态障碍物需实时更新环境模型并动态调整路径,RRT*算法通过迭代扩展树并优化路径,适合动态环境但计算开销较大,需结合实时性优化。
2) 【原理/概念讲解】老师口吻,解释RRT原理:RRT是快速探索随机树(RRT)的改进版,用于高维空间路径规划。核心步骤是随机采样目标空间,找到树中最近节点,连接两者形成新边(若不与障碍物碰撞则加入树);之后通过局部搜索(如重新连接到更优节点)优化树结构,减少路径长度。动态障碍物处理时,需实时检测环境变化(如传感器数据更新),当检测到新障碍物时,重新评估树中现有路径——若路径被遮挡则通过迭代扩展或局部搜索调整路径。类比:就像在迷宫里找路,先随机走几步(采样),连最近的路径(连接),再优化每一步的步长(修剪),动态障碍物就像迷宫里突然出现新墙(新障碍物),需要重新评估路径是否可行。
3) 【对比与适用场景】
| 算法 | 定义 | 动态环境处理方式 | 计算复杂度 | 适用场景 |
|---|---|---|---|---|
| RRT* | 改进的快速探索随机树算法,通过迭代扩展树并优化路径 | 实时检测环境变化,更新环境模型后重新规划或局部调整路径,通过迭代扩展和局部搜索适应动态障碍物 | 高(树扩展和优化需多次迭代) | 高维空间、非结构化环境,对实时性要求中等(需结合优化策略) |
| A* | 基于启发式搜索的路径规划算法,通过评估函数(f=g+h)选择最优路径 | 需维护动态障碍物的实时地图,当障碍物移动时更新地图并重新计算路径,适合静态或缓慢变化的动态环境 | 中(需维护启发式函数和优先队列) | 结构化环境、对实时性要求高(如移动机器人导航) |
4) 【示例】
# RRT* 动态障碍物处理伪代码
def RRT_star_dynamic(obstacle_map, start, goal):
tree = {start: None} # 树结构,存储节点及其父节点
while not is_goal_reached(tree, goal):
# 1. 随机采样目标空间
random_point = sample_random_point(obstacle_map)
# 2. 找到树中最近的节点
nearest_node = find_nearest_node(tree, random_point)
# 3. 计算连接方向和长度
direction = (random_point - nearest_node) / distance(random_point, nearest_node)
new_point = nearest_node + direction * step_size
# 4. 检查新点是否与动态/静态障碍物碰撞
if is_collision(new_point, obstacle_map):
continue
# 5. 连接到树
tree[new_point] = nearest_node
# 6. 局部优化(可选)
optimize_tree(tree, obstacle_map)
# 7. 检查是否到达目标
if distance(new_point, goal) <= step_size:
tree[goal] = new_point
break
# 返回路径
return reconstruct_path(tree, goal)
5) 【面试口播版答案】
面试官您好,处理动态障碍物通常需要实时更新环境模型并动态调整路径。以RRT算法为例,它的核心是通过迭代扩展随机树并优化路径,来应对动态障碍物。首先,RRT会随机采样目标空间,找到树中最近的节点,连接两者形成新边,若新边不与障碍物碰撞则加入树。之后通过局部搜索优化树结构,减少路径长度。动态障碍物处理时,算法会实时检测环境变化(如传感器数据更新),当检测到新障碍物时,重新评估树中现有路径,若路径被遮挡则通过迭代扩展或局部搜索调整路径。RRT*的优点是能处理高维空间和非结构化环境,但计算开销较大,适合对实时性要求中等的应用。缺点是动态环境下的规划效率可能较低,需要结合实时性优化策略。
6) 【追问清单】
7) 【常见坑/雷区】