ROS中的局部导航算法

本文介绍了在ROSMelodic中,使用move_base、gmapping和amcl进行导航的基本原理,重点讲解了局部路径规划中的base_local_planner、dwa_local_planner和teb_local_planner算法,包括它们的安装、配置和使用效果。
摘要由CSDN通过智能技术生成

ubuntu18.04、melodic。

1、导航包的组成

在局部导航算法的介绍之前我们需要先理解导航功能包中的各个组成部分:

在ROS中,进行导航需要使用到的三个包是:

(1) move_base:根据参照的消息进行路径规划,使移动机器人到达指定的位置;

(2) gmapping:根据激光数据(或者深度数据模拟的激光数据)建立地图;

(3) amcl:根据已经有的地图进行定位

move_base包中主要包含两个部分,全局路径规划(global planner)和局部路径规划(local planner)。

全局路径规划(global planner):根据给定的目标位置进行总体路径的规划,在ROS的导航中,首先会通过全局路径规划,计算出机器人到目标位置的全局路线。这一功能是navfn这个包实现的。navfn通过Dijkstra或A*等最优路径的算法,计算costmap上的最小花费路径,作为机器人的全局路线。

局部路径规划(local planner):根据附近的障碍物进行躲避路线规划。本地的实时规划是利用base_local_planner包实现的。该包使用Trajectory Rollout 和Dynamic Window approaches算法计算机器人每个周期内应该行驶的速度和角度(dx,dy,dtheta velocities)。

2、局部规划算法

(1)base_local_planner算法

  • 它是move_base默认的局部规划包。该软件包提供了对平面上本地机器人导航的轨迹展开和动态窗口方法的实现。
  • base_local_planner配置方法:输入下面的命令进行安装

sudo apt-get install ros-melodic-base-local-planner
  •  base_local_planner使用方法:编写launch文件
<launch>

    <!-- 设置地图的配置文件 -->
    <arg name="map" default="cloister_gmapping.yaml" />

    <!-- 运行地图服务器,并且加载设置的地图-->
    <node name="map_server" pkg="map_server" type="map_server" args="$(find ares_navigation)/maps/$(arg map)">
    </node>
    <!-- 运行move_base节点 -->
    <node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen" clear_params="true">
    <!--开启base_local局部导航节点-->
    <param name="base_local_planner" value="base_local_planner/TrajectoryPlannerROS" />
    <!--加载设置参数-->
  	  	<rosparam file="$(find teb_local_planner_tutorials)/cfg/omnidir/costmap_common_params.yaml" command="load" ns="global_costmap" />
  	 	<rosparam file="$(find teb_local_planner_tutorials)/cfg/omnidir/costmap_common_params.yaml" command="load" ns="local_costmap" />
  		<rosparam file="$(find teb_local_planner_tutorials)/cfg/omnidir/local_costmap_params.yaml" command="load" />
  		<rosparam file="$(find teb_local_planner_tutorials)/cfg/omnidir/global_costmap_params.yaml" command="load" />
    <rosparam file="$(find ares_navigation)/config/ares/base_local_planner_params.yaml" command="load" />
    </node>

    <!-- 启动AMCL节点 -->
    <include file="$(find amcl)/examples/amcl_omni.launch" >
    </include>
    <!-- 运行rviz -->
    <node pkg="rviz" type="rviz" name="rviz" args="-d $(find ares_navigation)/rviz/nav.rviz">
    </node>
</launch>
  •  base_local_planner使用效果:效果并不是很好,局部路径规划很短,小车行动缓慢且经常偏离轨迹,一般不会直接使用它作为局部路径规划算法。

(2)dwa_local_planner算法

  • dwa_local_planner配置方法:可输入下面的命令进行安装

  • sudo apt-get install ros-melodic-dwa-local-planner

    检测是否安装成功:

    roscd dwa_local_planner

    创建launch文件 如下:

    <launch>
        <!-- 设置地图的配置文件 -->
        <arg name="map" default="cloister_gmapping.yaml" />
        <!-- 运行地图服务器,并且加载设置的地图-->
        <node name="map_server" pkg="map_server" type="map_server" args="$(find ares_navigation)/maps/$(arg map)"/>
    
        <!-- 运行move_base节点 -->
        <node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen" clear_params="true">
        <!--开启dwa局部导航节点-->
        <param name="base_local_planner" value="dwa_local_planner/DWAPlannerROS" />
        <!--加载设置参数-->
        <rosparam file="$(find ares_navigation)/config/ares/costmap_common_params.yaml" command="load" ns="global_costmap" />
        <rosparam file="$(find ares_navigation)/config/ares/costmap_common_params.yaml" command="load" ns="local_costmap" />
        <rosparam file="$(find ares_navigation)/config/ares/local_costmap_params.yaml" command="load" />
        <rosparam file="$(find ares_navigation)/config/ares/global_costmap_params.yaml" command="load" />
        <rosparam file="$(find ares_navigation)/config/ares/move_base_params.yaml" command="load" />
        <rosparam file="$(find ares_navigation)/config/ares/dwa_local_planner_params.yaml" command="load" />
        </node>
        <!-- 启动AMCL节点 -->
        <include file="$(find amcl)/examples/amcl_omni.launch" />
        <!-- 运行rviz -->
        <node pkg="rviz" type="rviz" name="rviz" args="-d $(find ares_navigation)/rviz/nav.rviz"/>
    </launch>

    运行该文件。绿色的线是全局规划的路线,蓝色的短线表示局部规划的路线

(3)teb_local_planner算法

        teb_local_planner则是2D导航堆栈的base_local_planner的插件。实现了一个在线优化的本地轨迹规划器,用于导航和控制移动机器人,作为ROS 导航包的插件。全局规划器生成的初始轨迹在运行时期间进行优化,最小化轨迹执行时间(时间最优目标), 与障碍物分离并符合动力学约束,例如满足最大速度和加速度。

  • teb_local_planner配置方法:
sudo apt-get install ros-melodic-teb-local-planner
验证是否安装成功
roscd teb_local_planner
  • teb_local_planner使用方法:

1.安装[teb_local_planner_tutorials](http://wiki.ros.org/teb_local_planner_tutorials)软件包

2.检查参数/配置文件

3.启动diff_drive设置:

$ roslaunch teb_local_planner_tutorials robot_diff_drive_in_stage.launch
4.使用rosrun rqt_reconfigure rqt_reconfigure或修改文件来修改参数。

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
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*算法
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值