ROS中的局部导航算法

ROS机器人导航时,首先在代价地图上使用全局规划算法规划出一条路径,然后调用局部规划算法及代价地图的信息规划出具体的行动指令。其中,局部路径规划算法在ros中主要是DWA算法(Dynamic Window Approach),基本操作是在速度空间(v,w)中采样多组速度,并模拟一定时间内的运动轨迹,再通过一个函数(Gerkey的论文《planning and control in unstrutured Terrain》中的评价函数)评价这些轨迹的分数,选择其中最优轨迹的速度,发送给下位机。
ROS中机器人运动模型,使用的是简单的模型。机器人在x轴上的轨迹为X=X0+VΔtcos(θt)-VyΔtsin(θt),y轴上的轨迹为Y=Y0+VΔtsin(θt)+VyΔtcos(θt),旋转角度的轨迹为θt=θ0+wΔt,其中,v为机器人的运动速度,θt为旋转角度,ros中的相关代码在simple_trajectory_generator.cpp的256行。
速度采样要考虑三个方面:1.机器人自身的最大速度与最小速度;2.机器人电机性能的影响,所能实现的实际速度区间;3.机器人检测到障碍物之后,能成功刹车的速度区间。在速度采样之后,通过评价函数对每一个速度进行评价,选择最优的速度发送给下位机。
ROS中的局部路径规划程序:
1.初始化:在move_base节点中,通过类加载模块载入了BaseLocalPlanner的子类DWAPlannerROS的实例tc_,并调用初始化函数,获取一些初始状态信息,并创建DWAPlanner类的实例dp_,最后设置类动态参数配置服务。dp_的构造函数做了一些列参数获取的操作,最重要的是将几种代价算法的实例加入critics的vector容器里。
2.采样速度:当move_base调用tc_的computeVelocityCommands方法后,tc_会调用dwaComputeVelocityCommands方法,并在其中调用dp_的findBestPath方法。findBestPath方法里调用SimpleTrajectoryGenerator类的实例generator_的initialise函数,这个函数就是负责速度采样。x、y、z三个维度速度需要采样的养本数存放在vsamples_这个结构体内,vsamples_[0]是x方向样本数,vsamples_[1]是y方向样本数,vsamples_[2]是z方向样本数。首先计算各个方向的最大速度和最小速度,DWA算法只在第一步进行采样,所以最大速度为:Max_vel=max(max_vel,vel+acc_limsim_period),
最小速度为:Min_vel=min(min_vel,vel-acc_lim
sim_period),
其中max_vel,min_vel为人为设定的最大和最小速度,vel是当前速度,acc_lim是人为设定的最大加速度,sim_period是第一步的模拟时间,由人为设定的局部路径规划频率决定,默认为0.05。
当计算出各个维度的最大最小速度后,就创建三个VelocityIterator类的对象,并传入最大最小速度和样本数目,此对象的构造函数会生成同样数目的速度样本并放入samples_这个容器内。具体做法是先计算步长step_size=(max-min)/(nums_samples-1),max为最大速度,min为最小速度,nums_samples为样本数目。从最小速度每次多累加一次step_size即为一个速度样本,直到达到最大速度。将每个维度的速度样本取得后,再全部循环每个样本组里选择一个组合放入结构体vel_sample,最后将这些vel_sample放入sample_params_的容器里。至此,速度采样就完成了。
3.评价函数评分:速度采样完成后,采用scoreTrajectory函数对样本空间中的样本进行评分。scoreTrajectory函数对样本速度调用critics容器中的代价函数计算每个代价,并将其累加,得到总的代价。并且,计算过程中,一旦正在累加的代价和大于目前最小的代价和,则放弃这组样本速度。代价函数共有4个,分别为ObstacleCostFunction(感知障碍物来评价)、MapGridCostFuntion(轨迹离全局路径或者接近目标点有多近来评价)、OscillationCostFunction(震荡的大小来评价)、PreferForwardCostFunction(轨迹是否向前来评价)。
4.发送:将最优的一组样本速度发送给move_base,并发布相应的局部规划。move_base收到可用的速度,将该速度发送给地盘。如果move_base收到不可用,则发送0速度给地盘。且如果寻找最优速度的时间超过了限制就会执行障碍物清理模式,state_会变为CLEARING。

参考:https://blog.csdn.net/lqygame/article/details/72861439
:https://blog.csdn.net/heyijia0327/article/details/44983551

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ROS(Robot Operating System)是一种开源的机器人操作系统,其导航功能包(navigation package)包括了全局路径规划(global path planning)和局部路径规划(local path planning)两个部分。本文将主要对ROS局部路径规划算法进行比较和分析。 1. Dynamic Window Approach(DWA) Dynamic Window Approach(DWA)是一种基于动态窗口的方法,可以在考虑机器人动力学和环境约束的情况下,快速地生成安全的轨迹。该算法的核心思想是,在机器人的运动状态空间,通过设置一个动态的窗口,来筛选出满足机器人动力学和环境约束的速度和角速度组合,然后在这些速度和角速度的组合,选择一个最优的轨迹。DWA算法的优点是速度快,适用于速度较快的机器人,如移动机器人和小型车辆。但是,在环境存在较多的动态障碍物时,该算法的效果会受到影响。 2. Vector Field Histogram(VFH) Vector Field Histogram(VFH)是一种基于极坐标的直方图法,通过构建环境地图和机器人当前位置,选取最佳路径。该算法的核心思想是,将机器人的环境划分成不同的扇区,然后对每个扇区进行分析,计算出每个扇区的通行程度,并将这些信息组成极坐标直方图。通过对极坐标直方图的分析,可以确定机器人的运动方向。VFH算法的优点是速度快,适用于在有限空间内的机器人导航。但是,在环境存在较多的障碍物时,该算法的效果会受到影响。 3. Elastic Band(EB) Elastic Band(EB)是一种基于张力带的方法,将路径规划问题转化为弹性带的优化问题,可以实现在复杂环境下的路径规划。该算法的核心思想是,将机器人的路径看作一个弹性带,根据机器人当前位置和目标位置的关系,在弹性带上施加张力和弯曲力,然后通过优化算法,计算出最优路径。EB算法的优点是对于复杂环境下的路径规划效果较好,可以适用于机器人的动态路径规划。但是,EB算法的缺点是计算量较大,处理速度较慢。 4. Rapidly-exploring Random Tree(RRT) Rapidly-exploring Random Tree(RRT)是一种基于随机树的方法,通过随机采样和树的扩展搜索,找到环境的可行路径。该算法的核心思想是,通过随机采样的方式,构建一棵随机树,然后通过树的扩展搜索,找到最优的路径。RRT算法的优点是可以处理高维空间路径规划问题,并可以处理环境存在较多的障碍物的情况。但是,在计算路径时,由于随机性较强,可能会产生一些不必要的路径。 5. Hybrid A* Hybrid A*是一种混合A*算法,结合了离散和连续路径规划的优点,可以在复杂环境下实现快速的路径规划。该算法的核心思想是,将机器人的运动状态空间划分为离散和连续两部分,然后通过A*算法,计算出离散空间的最短路径,接着再通过连续空间的优化算法,计算出最优的连续路径。Hybrid A*算法的优点是可以处理复杂环境下的路径规划问题,并且计算速度较快。但是,该算法的缺点是需要对离散空间进行离散化处理,可能会对路径规划的精度产生影响。 综上所述,不同的局部路径规划算法适用于不同的场景,需要根据实际问题和机器人特性进行选择。例如,在需要速度快的情况下,可以选择DWA算法;在复杂环境下,可以选择EB算法;在处理高维空间和存在较多障碍物的情况下,可以选择RRT算法;在需要快速计算路径并且计算精度要求不高的情况下,可以选择VFH算法;在需要精确计算路径并且计算速度要求较高的情况下,可以选择Hybrid A*算法

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值