六自由度机器人(机械臂)运动学建模及运动规划系列(五)——避障路径规划

本文探讨了如何通过改进RRT算法解决六轴机器人在复杂环境中的避障问题,包括路径规划的基本概念、障碍物包络处理、递推确定碰撞临界角及Matlab仿真实例。重点介绍了如何结合人工势场优化随机树生成,提高路径规划的效率和准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在之前的内容中,我们对机器人的运动轨迹进行了规划,但是,这种规划方法的运动路径是根据简单的轨迹人为组合起来的,具有较大的任意性。在实际的复杂工作环境中,采用人工规划路径的方法,难以保证规划的效率和准确率。
因此,本篇介绍一下机器人避障路径规划的相关知识。

一、路径规划简介

自主避障路径规划:要求利用合适的规划算法,自动生成一条从起始点到目标点的路径,并满足机器人末端和连杆的避障要求。
六轴机器人与移动机器人路径规划的不同之处在于,前者不但要保证机器人末端避开障碍物,还要考虑连杆的避障问题。
进行六轴机器人路径规划的常用方法有两种:

  1. 直接对末端轨迹进行规划
    这种方法的步骤是:
    (1)采取合适的算法,对机械臂末端进行规划,形成一条满足避障条件的连接起始点和终止点的路径;
    (2)根据精度要求,选择路径上的一定数量的点,进行逆运动学计算,求出这些末端轨迹点对应的关节角序列,根据之前所述,对于六轴机器人而言,一般一个末端轨迹点对应八组关节角;
    (3)接着从起始点开始,依次对路径上的点进行如下操作:分别判断每个点对应的八组关节角是否满足机器人连杆的避障条件,即机器人在此种关节角姿态下,整个本体不能和障碍物碰撞,若八组关节角都不符合条件,则跳到第一步,重新规划;
    (4)完成所有路径点的判断后,根据一定的准则(如关节角变化之和最小等),从起始点开始,每个路径点选取一组合适的关节角,最终形成从起点到终点的关节角序列,完成规划。
  2. 以关节和连杆为对象逐步推导
    这种方法的步骤是:
    从第一个关节开始,首先判断关节1在何种角度范围内,连杆1会与障碍物碰撞,求出碰撞临界角;
    接着在关节1碰撞角之外(即保证连杆1不与障碍物发生碰撞的角度范围),判断关节2的碰撞临界角……依次类推,直到最后一个关节和连杆。
    本篇使用这种方法。

二、改进RRT算法

1. 算法简介

本篇的规划使用改进RRT算法,首先对算法做一个简单的介绍。
快速扩展随机树算法,简称RRT算法。其核心思想是以起始点为树的根节点,接着在空间中利用随机采样的方式生成新节点,如果新的节点与障碍物不发生碰撞,则将该节点加入到随机树上,作为树的子节点[。通过这种方式,随机树在空间中进行扩展,直至找到终止点。最后从终止点反向溯源到起始点,就可以找到规划的路径。这种方法以随机采样的方式探索整个空间,具有以最快的速度遍历整个空间的优点。
RRT算法分为两个步骤:
第一步:通过随机在空间中生成节点的方式,使随机树生长,直到终止点也包含在随机树中。
第二步:从终止点反向溯源,得到连接起始点和目标点的最短路径。

2. 改进点

在标准RRT算法中,确定新节点的前提是在空间中生成一个随机节点,使得随机树的生长没有方向性,算法收敛慢。
针对这个问题,结合人工势场法中引力场和斥力场的概念,将目标引力函数加入到原算法中,对原算法的节点生成方式进行改进,从而使随机树在引力函数的作用下,朝着终止点的方向生长。改进后的RRT算法修正了随机树收敛速度慢的缺点。
生成新节点时,原算法采用:
在这里插入图片描述
式中,xr代表产生新节点时的随机生成节点,xn代表距离随机点最近的子节点,s代表步长,xne代表最终生成的新节点。
而改进后的算法采用:
在这里插入图片描述
式中xe代表目标节点,kp代表引力分量,值越大,引力分量的调控力度越强,但过大会使得随机树的生长失真,可自行调整,取最佳结果。

3. 仿真结果

RRT算法的仿真结果如下:
在这里插入图片描述
矩形框代表障碍物,红色线条为最终生成的结果。
代码如下所示:
RRT算法避障路径规划代码

三、避障路径规划

1. 障碍物包络

在进行映射前,首先需要得到障碍物的具体形状。实际环境中,障碍物通常没有规则的形状,难以精确描述。因此一般采用标准的形状包络障碍物,这里采用球体包络障碍物,同时用圆柱体包络连杆。这样问题就简化为圆柱体与球体的碰撞问题。

2. 递推确定碰撞临界角

对于一般的六自由度机器人,其前三个关节决定机器人末端的位置,后三个关节决定末端的姿态。因此考虑杆件与障碍物碰撞的问题时,只需要考虑前三个关节。本节为简化起见,只研究机器人在竖直平面内的避障问题。将模型向XOZ方向投影,可以得到连杆与障碍物的几何关系,
(1)关节2
在这里插入图片描述
连杆1与障碍物发生碰撞时θ_2的临界角度为:
在这里插入图片描述
(2)关节3
在关节2的碰撞范围外,关节3的临界碰撞角可根据下图推导:
在这里插入图片描述
设障碍点与关节3中心的距离为m,在m取值一定范围内,对于每一个θ_2,θ_3均有一个上下碰撞临界角:
在这里插入图片描述

3. 路径规划

完成碰撞角的确定后,就可以在关节空间,使用算法进行规划。
这里使用改进前后的RRT算法分别进行规划,结果如图:
在这里插入图片描述
中间的条状即为碰撞角范围,即障碍物,红色线条为最终生成的轨迹。

4. Matlab仿真

规划完成后,可以使用Matlab的机器人工具箱进行验证,形成如图所示的仿真结果
在这里插入图片描述

图中,右上角的小球为障碍物,可以看出机械臂末端和连杆均避开了障碍物。

四、小结

本篇主要介绍了自主避障路径规划的主要方法,采用改进RRT算法以及递推法进行了简单的规划示例。
至此,这个系列的所有内容就都写完了。鉴于当时时间有限,很多地方的介绍比较简略,如果大家还有什么想要了解的内容,可以评论,之后有时间我会接着补充的。
最后,非常感谢大家的阅读,希望大家都能常怀热情,为自己所向往的事情奋斗着。

### MATLAB 实现机械避障算法 #### 使用 A* 算法进行路径规划 为了使机械能够在复杂环境中有效避障,一种常用方法是在MATLAB中应用A*算法。该算法不仅考虑了距离因素还加入了启发式估计,从而提高了寻找最优解的速度和效率[^1]。 ```matlab function path = aStarSearch(start, goal, map) openList = PriorityQueue(); closedSet = {}; % 初始化起始节点的成本为0 startNode.CostSoFar = 0; startNode.EstimatedTotalCost = heuristicEstimate(start, goal); enqueue(openList, startNode); while ~isempty(openList) currentNode = dequeue(openList); if isequal(currentNode.Position, goal) return reconstructPath(closedSet{currentNode}); end addElement(closedSet, currentNode); neighbors = getNeighbors(currentNode, map); for each neighbor in neighbors tentative_gScore := costToCome(neighbor); if not contains(closedSet, neighbor) || ... (tentative_gScore < gScores{neighbor}) cameFrom{neighbor} = currentNode; neighbor.gScore = tentative_gScore; neighbor.fScore = neighbor.gScore + \ heuristicEstimate(neighbor.position, goal); if !contains(openList, neighbor) enqueue(openList, neighbor); endif endif endfor endwhile endfunction ``` 此段伪代码描述了一个基本框架用于执行A*搜索过程,在实际编程时需替换相应部分以适应具体应用场景下的数据结构与逻辑需求。 #### 改进 RRT 算法的应用实例 除了经典的A*之外,快速随机树(Rapidly-exploring Random Tree,RRT)也是解决高维度空间内路径规划的有效手段之一。特别是在面对多连杆机构如工业机器人这类具有多个自由度的对象时表现尤为突出[^2]。 ```matlab % 设置参数 maxIterations = 5000; stepSize = .5; rrtTree = []; startPoint = [0, 0]; goalRegionCenter = [7, 9]; addPoint(rrtTree, startPoint); for i=1:maxIterations randomConfig = getRandomConfiguration(); nearestVertexIndex = findNearestVertex(rrtTree,randomConfig); newConfig = extendTowards(randomConfig,... rrtTree(nearestVertexIndex).position,... stepSize); if isValid(newConfig,mapObstacles) addChild(rrtTree,newConfig,parentIdx=nearestVertexIndex); if withinGoalRegion(newConfig,goalRegionCenter,tolerance=.8) break; end end end ``` 上述代码片段展示了简化版的RRT构建流程,其中涉及到了几个核心操作:选取随机配置点、定位最近顶点、沿方向扩展一小步以及验证新位置合法性等步骤循环迭代直至满足终止条件为止。 #### 关于蚁群优化算法简介 对于某些特定类型的难题来说,生物启发式的寻优策略可能会带来意想不到的效果。比如蚁群算法(Ant Colony Optimization,ACO),它模仿自然界蚂蚁觅食行为模式来求解组合优化问题。当应用于机械路径规划领域时,可以通过模拟信息素浓度变化引导个体探索更优质的解决方案路径[^5]。 ```matlab pheromoneMatrix = ones(size(distanceMatrix)); % 初始信息素分布均匀 alpha = 1; beta = 5; rho = .5; Q = 100; for iterationCount=1:numOfIterations solutions = zeros(numAgents,length(path)); deltaPheromones = sparse(length(path),length(path)); parfor agentId=1:numAgents currentCity = randperm(length(path),1); visitedCities = {currentCity}; while length(unique([visitedCities{:}]))<length(path) probabilities = calculateProbabilities( pheromoneMatrix(:,currentCity).^alpha .*... distanceMatrix(:,currentCity).^(-beta)); nextCity = rouletteWheelSelection(probabilities); append(solutions(agentId,:),nextCity); updateVisitedLocations(nextCity,visitedCities); currentCity = nextCity; end tourLengths(agentId)=calculateTourLength(solutions(agentId,:)); bestSolutionIdx=find(tourLengths==min(tourLengths)); globalBestSolution=solutions(bestSolutionIdx,:); depositedPheromone = Q ./ tourLengths; accumulateDeltaPheromones(deltaPheromones,... depositedPheromone(agentId),... solutions(agentId,:)); end evaporateAndDepositPheromones(phermoneMatrix,deltaPheromones,rho); end ``` 这段程序实现了基于群体协作机制下的一次完整的蚁群算法运行周期,包括初始化阶段设定必要的超参值;主体部分由各独立线程并发计算各自可能路线并记录下来;最后汇总所有结果更新全局最优解的同时调整局部区域内的信息素强度水平以便后续利用。
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菠萝爱吹雪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值