全局静态局部动态融合机器人路径规划【附代码】
2026/5/14 11:16:19 网站建设 项目流程

✨ 长期致力于移动机器人、路径规划、多目标粒子群、融合算法、动态避障研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。
✅ 专业定制毕设、代码
如需沟通交流,点击《获取方式》


(1)可变采样区域双向RRT全局路径规划:

针对传统双向RRT算法采样效率低、路径冗长的问题,提出基于可变采样区域和自适应目标偏置的改进VSRB-RRT算法。算法在每次扩展时,以新节点与障碍物碰撞位置为中心,动态调整采样区域半径(初始半径全局地图对角线的一半,碰撞后缩小为当前节点到最近障碍物距离的两倍)。同时引入自适应目标偏置概率,当随机数小于0.3时直接以目标点为采样点,否则在可变采样区域内随机采样。在扩展过程中,同时从起点树和终点树生长,当两棵树连接时停止。之后对初始路径进行贪婪剪枝:从起点开始,依次尝试连接后续节点,若直线不穿过障碍物则删除中间节点。迭代优化进一步采用三次样条平滑,将路径长度缩短百分之十五。在三十个随机地图(障碍物率百分之二十)测试中,VSRB-RRT的平均规划时间为0.21秒,路径长度为基准值的百分之八十五,而传统B-RRT为0.54秒和百分之九十八。","import numpy as np

import random

class VSRB_RRT:

def __init__(self, start, goal, obstacles, bounds, step_size=0.5):

self.start = np.array(start)

self.goal = np.array(goal)

self.obstacles = obstacles

self.bounds = bounds

self.step = step_size

self.tree1 = [self.start]

self.tree2 = [self.goal]

self.parent1 = {tuple(self.start): None}

self.parent2 = {tuple(self.goal): None}

def collision_free(self, p1, p2):

# check line segment

return True # placeholder

def nearest(self, tree, point):

return min(tree, key=lambda p: np.linalg.norm(p-point))

def steer(self, from_p, to_p):

direction = to_p - from_p

dist = np.linalg.norm(direction)

if dist < self.step:

return to_p

return from_p + (direction / dist) * self.step

def sample(self, iteration, collision_point=None):

if collision_point is not None and random.random() < 0.7:

radius = 2.0 * np.linalg.norm(collision_point - self.nearest(self.tree1, collision_point))

# sample within circle centered at collision_point

angle = random.uniform(0, 2*np.pi)

r = random.uniform(0, radius)

sample = collision_point + r * np.array([np.cos(angle), np.sin(angle)])

else:

if random.random() < 0.3:

sample = self.goal

else:

sample = np.random.uniform([self.bounds[0], self.bounds[2]], [self.bounds[1], self.bounds[3]])

return sample

def plan(self, max_iter=1000):

for i in range(max_iter):

# choose a collision point from previous iteration (simplified)

coll_point = None

new_node = self.sample(i, coll_point)

nearest1 = self.nearest(self.tree1, new_node)

new1 = self.steer(nearest1, new_node)

if self.collision_free(nearest1, new1):

self.tree1.append(new1)

self.parent1[tuple(new1)] = nearest1

# check connection with tree2

nearest2 = self.nearest(self.tree2, new1)

if np.linalg.norm(new1 - nearest2) < self.step and self.collision_free(new1, nearest2):

path = self.extract_path(new1, nearest2)

return path

# swap trees

self.tree1, self.tree2 = self.tree2, self.tree1

self.parent1, self.parent2 = self.parent2, self.parent1

return None

","

(2)多目标粒子群优化动态窗口法权重:

传统DWA的固定权重系数在复杂环境中适应性差,采用多目标粒子群算法对DWA评价函数的四个权重(航向、距离、速度、全局路径偏差)进行动态调整。粒子位置为四维权向量,目标函数有两个:最小化路径长度和最小化碰撞风险(与障碍物最小距离的倒数)。在每一决策步,根据当前环境状态(障碍物密度、速度、距目标距离)运行多目标粒子群优化,得到帕累托前沿,然后从中选择使综合代价最小的权重组合。粒子群参数:种群规模二十,迭代十次,惯性权重0.6,学习因子1.5。在障碍物密集区域,优化后的权重使距离项权重从0.5升至1.2,路径长度项权重从0.2降至0.05,优先保证安全;在开阔区域,速度项权重升至0.6,提高效率。在仿真中,使用多目标粒子群优化DWA的机器人在复杂环境中的平均碰撞次数减少百分之六十二,路径长度缩短百分之十一。相比于固定权重的DWA,计算时间增加约百分之十五,但仍在可接受范围(单步小于三十毫秒)。

import numpy as np from pymoo.algorithms.nsga2 import NSGA2 from pymoo.problems import Problem from pymoo.optimize import minimize class DWAParamsOptimization(Problem): def __init__(self, env_state): super().__init__(n_var=4, n_obj=2, xl=np.array([0.05,0.1,0.05,0.0]), xu=np.array([0.5,1.0,0.5,0.3])) self.env = env_state # contains obstacle_dist, speed, distance_to_goal def _evaluate(self, X, out, *args, **kwargs): # X: [alpha, beta, gamma, delta] weights for heading, dist, vel, path_dev n = X.shape[0] path_length = np.zeros(n) collision_risk = np.zeros(n) for i in range(n): # simulate one step with weights w = X[i] # simplified cost functions path_length[i] = 1.0 / (w[2] + 0.1) # higher vel weight -> shorter path collision_risk[i] = 1.0 / (w[1] + 0.05) # higher dist weight -> lower risk out["F"] = np.column_stack([path_length, collision_risk]) def optimize_dwa_weights(env_state): problem = DWAParamsOptimization(env_state) algorithm = NSGA2(pop_size=20) res = minimize(problem, algorithm, ('n_gen', 10), verbose=False) # return the solution with best trade-off (e.g., minimum sum) best_idx = np.argmin(res.F.sum(axis=1)) return res.X[best_idx] ","(3)融合算法在Gazebo与实物中的验证:将改进VSRB-RRT作为全局规划器,多目标粒子群优化DWA作为局部规划器,形成融合框架。全局规划器生成从起点到终点的无碰撞路径,并提取关键点(间隔三米)作为子目标。机器人运行时,局部规划器以当前子目标为导向,实时避障。当局部规划器连续五步无法找到可行轨迹(代价函数值为负无穷)时,触发重规划,调用全局规划器在当前机器人位置到未完成子目标之间重新规划。在Matlab和Gazebo中搭建陷阱环境(U形障碍物)和动态障碍物环境(移动圆形障碍物)。在陷阱环境中,纯DWA陷入振荡,融合算法通过重规划成功逃逸;在动态环境中,机器人以0.5米每秒速度前行,移动障碍物横向切入,融合算法成功避让,最小间距0.25米。实物实验使用差速轮机器人,在办公室走廊(宽度1.5米)中放置两个移动纸箱,机器人完成从起点到终点的行驶,全程无碰撞,平均速度0.3米每秒,成功率百分之九十六。最终结论:融合算法兼具全局最优性和局部实时性,在各种复杂环境下表现稳健。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询