ros中实现全局/局部避障算法的添加与rviz中规划路径的显示(上)

这篇具有很好参考价值的文章主要介绍了ros中实现全局/局部避障算法的添加与rviz中规划路径的显示(上)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言

一、命令行

二、所用到的launch文件、yaml文件等

1.map1_mrobot_laser_nav_gazebo.launch

2.gmapping_demo.launch

3.gmapping.launch

4.move_base.launch

5.nav03_map_server.launch

6.mrobot_teleop.launch

三、rviz中添加path插件

总结


前言

最近在做ros相关的作业,故写下本文留做参考以便日后再次使用或理解,如有错漏之处敬请指出!

所用的全局避障(路径规划)算法为A*,局部避障(路径规划)算法为DWA。

本文主要介绍DWA算法的添加和应用(因为A*还没做…)


一、命令行

#先在gazebo中建立并保存地图,file-save world as 保存world文件
roslaunch mrobot_gazebo map1_mrobot_laser_nav_gazebo.launch #启动gazebo,加载已建立的地图
roslaunch mrobot_navigation gmapping_demo.launch #启动move_base、rviz,此处的launch文件中不要添加最后的<加载地图文件>代码
roslaunch mrobot_teleop mrobot_teleop.launch #可以使用键盘的【uiojklm,.】九个键进行对小机器人的控制,使小车雷达扫描完整个地图 
rosrun map_server map_saver -f ~/ws/src/robot_mrobot/mrobot_navigation/maps/图片名称 #保存地图yaml、pgm文件,路径根据情况进行更改即可
#更改好launch、yaml文件后
roslaunch mrobot_gazebo map1_mrobot_laser_nav_gazebo.launch #启动gazebo,加载已建立的地图
roslaunch mrobot_navigation gmapping_demo.launch #启动move_base、rviz
#在rviz中设置目标点,添加path插件选择topic来显示已规划出的全局/局部路径

二、所用到的launch文件、yaml文件等

1.map1_mrobot_laser_nav_gazebo.launch

<launch>

    <!-- 设置launch文件的参数 --> <!-- 此处world文件改为自己另存为的名字 -->
    <arg name="world_name" value="$(find mrobot_gazebo)/worlds/2-11map1.world"/>  
    <arg name="paused" default="false"/>
    <arg name="use_sim_time" default="true"/>
    <arg name="gui" default="true"/>
    <arg name="headless" default="false"/>
    <arg name="debug" default="false"/>

    <!-- 运行gazebo仿真环境 -->
    <include file="$(find gazebo_ros)/launch/empty_world.launch">
        <arg name="world_name" value="$(arg world_name)" />
        <arg name="debug" value="$(arg debug)" />
        <arg name="gui" value="$(arg gui)" />
        <arg name="paused" value="$(arg paused)"/>
        <arg name="use_sim_time" value="$(arg use_sim_time)"/>
        <arg name="headless" value="$(arg headless)"/>
    </include>

    <!-- 加载机器人模型描述参数 -->
    <param name="robot_description" command="$(find xacro)/xacro --inorder '$(find mrobot_gazebo)/urdf/mrobot_with_rplidar.urdf.xacro'" /> 

    <!-- 运行joint_state_publisher节点,发布机器人的关节状态  -->
    <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" ></node> 

    <!-- 运行robot_state_publisher节点,发布tf  -->
    <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher"  output="screen" >
        <param name="publish_frequency" type="double" value="50.0" />
    </node>

    <!-- 在gazebo中加载机器人模型-->
    <node name="urdf_spawner" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen"
          args="-urdf -model mrobot -param robot_description"/> 

</launch>

2.gmapping_demo.launch

<launch>

    <include file="$(find mrobot_navigation)/launch/gmapping.launch"/>

    <!-- 启动move_base节点 -->
    <include file="$(find mrobot_navigation)/launch/move_base.launch" />

    <!-- 启动rviz -->
    <node pkg="rviz" type="rviz" name="rviz" args="-d $(find mrobot_navigation)/rviz/gmapping.rviz"/>

    <!-- 加载地图服务 -->
    <include file="$(find mrobot_navigation)/launch/nav03_map_server.launch" />

</launch>

3.gmapping.launch

<launch>
    <arg name="scan_topic" default="scan" />

    <node pkg="gmapping" type="slam_gmapping" name="slam_gmapping" output="screen" clear_params="true">
        <param name="odom_frame" value="odom"/>
        <param name="map_update_interval" value="5.0"/>
        <!-- Set maxUrange < actual maximum range of the Laser -->
        <param name="maxRange" value="5.0"/>
        <param name="maxUrange" value="4.5"/>
        <param name="sigma" value="0.05"/>
        <param name="kernelSize" value="1"/>
        <param name="lstep" value="0.05"/>
        <param name="astep" value="0.05"/>
        <param name="iterations" value="5"/>
        <param name="lsigma" value="0.075"/>
        <param name="ogain" value="3.0"/>
        <param name="lskip" value="0"/>
        <param name="srr" value="0.01"/>
        <param name="srt" value="0.02"/>
        <param name="str" value="0.01"/>
        <param name="stt" value="0.02"/>
        <param name="linearUpdate" value="0.5"/>
        <param name="angularUpdate" value="0.436"/>
        <param name="temporalUpdate" value="-1.0"/>
        <param name="resampleThreshold" value="0.5"/>
        <param name="particles" value="80"/>
        <param name="xmin" value="-1.0"/>
        <param name="ymin" value="-1.0"/>
        <param name="xmax" value="1.0"/>
        <param name="ymax" value="1.0"/>
        <param name="delta" value="0.05"/>
        <param name="llsamplerange" value="0.01"/>
        <param name="llsamplestep" value="0.01"/>
        <param name="lasamplerange" value="0.005"/>
        <param name="lasamplestep" value="0.005"/>
        <remap from="scan" to="$(arg scan_topic)"/>
    </node>
</launch>

4.move_base.launch

<launch>

  <node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen" clear_params="true">
    <rosparam file="$(find mrobot_navigation)/config/mrobot/costmap_common_params.yaml" command="load" ns="global_costmap" />
    <rosparam file="$(find mrobot_navigation)/config/mrobot/costmap_common_params.yaml" command="load" ns="local_costmap" />
    <rosparam file="$(find mrobot_navigation)/config/mrobot/local_costmap_params.yaml" command="load" />
    <rosparam file="$(find mrobot_navigation)/config/mrobot/global_costmap_params.yaml" command="load" />
    <!-- <rosparam file="$(find mrobot_navigation)/config/mrobot/base_local_planner_params.yaml" command="load" /> -->

    <rosparam file="$(find mrobot_navigation)/config/mrobot/move_base_params.yaml" command="load" />
    <rosparam file="$(find mrobot_navigation)/config/mrobot/global_planner_params.yaml" command="load" />
    <rosparam file="$(find mrobot_navigation)/config/mrobot/dwa_local_planner_params.yaml" command="load" />


  </node>
  
</launch>
  • costmap_common_params.yaml local_costmap_params.yaml global_costmap_params.yaml base_local_planner_params.yaml 等文件可参考

     【ROS】—— 机器人导航(仿真)—导航实现(十八)[重要][重要][重要]

      或直接下载turtlebot3的配置文件,github链接:  turtlebot3/turtlebot3_navigation/param at master · ROBOTIS-GIT/turtlebot3 · GitHub

  • global_planner_params.yaml 文件我参考了move base参数及global planner,local planner设置

       同时也是官方的解释global_planner - ROS Wiki ,代码如下:

GlobalPlanner:
  allow_unknown: false  #默认true,是否允许路径穿过未知区域
  default_tolerance: 0.2  #默认0.0,目标容差
  visualize_potential: false #默认false,是否显示从PointCloud2计算得到的势区域
  use_dijkstra: true #默认true,true表示使用dijkstra's否则使用A*
  use_quadratic: true #默认true,true表示使用二次函数近似函数
  use_grid_path: false #默认false,true表示使路径沿栅格边界生成,否则使用梯度下降算法
  old_navfn_behavior: false #默认false,是否复制navfn规划器的结果
  lethal_cost: 253 #默认253,致命代价值
  neutral_cost: 50 #默认50,中等代价值
  cost_factor: 3.0 #默认3.0,代价因子
  publish_potential: true #默认true,是否发布costmap的势函数
  orientation_mode: 0 #默认0,设置点的方向
  orientation_window_size: 1 #默认1,根据orientation_mode指定的位置积分确定窗口方向
  • move_base_params.yaml dwa_local_planner_params.yaml 文件也是参考【ROS-Navigation】—— DWA路径规划算法解析

5.nav03_map_server.launch

参考:ROS仿真机器人(安装、配置、测试、建图、定位、路径规划)(下)

<launch>
    <!-- 设置地图的配置文件 名字改为自己地图的名字-->
    <arg name="map" default="2-11map1.yaml" />
    <!-- 运行地图服务器,并且加载设置的地图-->
    <node name="map_server" pkg="map_server" type="map_server" args="$(find mrobot_navigation)/maps/$(arg map)"/>
</launch>

6.mrobot_teleop.launch

<launch>
  <node name="mrobot_teleop" pkg="mrobot_teleop" type="mrobot_teleop.py" output="screen">
    <param name="scale_linear" value="0.1" type="double"/>
    <param name="scale_angular" value="0.4" type="double"/>
  </node>
</launch>

三、rviz中添加path插件

ros中实现全局/局部避障算法的添加与rviz中规划路径的显示(上)

点击Add,往下滑动找到Path,若想显示全局和局部路径则添加两个,并选择对应的Topic,可以分别命名为Path_global和Path_local,并将线赋予不同颜色。

ros中实现全局/局部避障算法的添加与rviz中规划路径的显示(上)

然后就可以实现在机器人运动过程中观察到全局、局部路径啦。ros中实现全局/局部避障算法的添加与rviz中规划路径的显示(上)


总结

  • tips:1.launch文件中的  args=”$(find xxx)  我的理解来看xxx是所对应文件的上级或上上级文件夹的名字,使用代码时需注意将此处的名字改为自己launch/yaml文件夹对应路径名字。

                2.在已开启的终端中加入新终端快捷键:Ctrl+Shift+T;开启新终端快捷键:Ctrl+Alt+T

  • 现在没能解决的问题:

       1.不知道如何在gazebo中显示小机器人蓝色的雷达线程(Belike:)ros中实现全局/局部避障算法的添加与rviz中规划路径的显示(上)

      2.不知道如何将rviz中的地图显示为(Belike:)

ros中实现全局/局部避障算法的添加与rviz中规划路径的显示(上)

 希望有缘的大佬可以帮忙指导一下 (๑•̀ㅂ•́)و✧

主要参考:ROS仿真机器人(安装、配置、测试、建图、定位、路径规划)(上)

                  ROS仿真机器人(安装、配置、测试、建图、定位、路径规划)(下)

                【ROS-Navigation】—— DWA路径规划算法解析

                  ROS系统SLAM基础学习:运行gazebo仿真建立保存地图文章来源地址https://www.toymoban.com/news/detail-428753.html

到了这里,关于ros中实现全局/局部避障算法的添加与rviz中规划路径的显示(上)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ROS中实现A*路径规划

    学习A*路径规划算法,优化启发函数,并在ROS中进行测试。 A star算法教程 源码地址:https://gitcode.net/VOR234/aster 安装Linux系统,建议Ubuntu18.04; 安装ROS环境并学习其基本操作; 查找A 路径规划资料,学习并熟知A 路径规划算法; 对比赛中所提供A*算法的启发函数AstarPathFinder::ge

    2024年01月16日
    浏览(25)
  • 基于动态窗口法(DWA)的局部避障算法研究及MATALB的实现

    一、动态窗口法基本概念  1.1  速度采样空间 1.2  评价函数 二、基于Matlab的机器人局部避障仿真         动态窗口方法(DynamicWindowApproach) 是一种可以实现实时避障的局部规划算法,通过将轮式机器人的位置约束转化为 速度约束 ,根据约束进行 速度采样 ,并由一系列的

    2024年02月01日
    浏览(24)
  • 启发式搜索算法:A算法(全局、局部择优算法)+A*算法 解决八数码问题

    参考博客:人工智能搜索策略:A*算法 在图搜索算法中,如果能在搜索的每一步都利用估价函数f(n)=g(n)+h(n)对Open表中的节点进行排序,则该搜索算法为 A算法 。由于估价函数中带有问题自身的启发性信息,因此,A算法又称为启发式搜索算法。 对启发式搜索算法,又可根据搜

    2024年02月10日
    浏览(28)
  • viple模拟器使用(四):unity模拟器中实现两距离局部最优迷宫算法

    两距离:指的是左侧距离和右侧距离 局部最优: 对当前状态来说最好的选择 ,至于整体能不能达到最优,是无法确定的。 从节点1到节点5,一共有3条路 第1条路线:1→2→4→5,对应的花销是:2+3+4=9; 第2条路线:1→3→4→5,对应的花销是:1+5+4=10; 第3条路线:1→3→5,对

    2024年02月05日
    浏览(55)
  • 【路径规划】局部路径规划算法——人工势场法(含python实现 | c++实现)

    路径规划与轨迹跟踪系列算法 基于改进型人工势场法的车辆避障路径规划研究 基于改进人工势场法的车辆避障路径规划研究 1986 年 Khatib 首先提出人工势场法,并将其应用在机器人避障领域, 而现代汽车可以看作是一个高速行驶的机器人,所以该方法也可应用于汽车的避障

    2023年04月09日
    浏览(31)
  • 【路径规划】RRT算法机器人避障路径规划【含Matlab源码 319期】

    获取代码方式1: 完整代码已上传我的资源:【路径规划】基于matlab RRT算法求解机器人避障路径规划问题【含Matlab源码 319期】 点击上面蓝色字体,直接付费下载,即可。 获取代码方式2: 付费专栏Matlab路径规划(初级版) 备注: 点击上面蓝色字体付费专栏Matlab路径规划(初

    2024年01月15日
    浏览(36)
  • 机器人避障路径规划的MATLAB模拟退火算法

    机器人避障路径规划的MATLAB模拟退火算法 在机器人路径规划中,避免障碍物是一个重要的问题。模拟退火算法是一种启发式优化算法,可以用于解决路径规划问题。在本文中,我们将使用MATLAB实现一个基于模拟退火算法的机器人避障路径规划程序。 首先,我们需要定义问题

    2024年02月06日
    浏览(30)
  • 【R语言双序列比对】全局比对Needleman-Wunsch算法&局部比对Smith-Waterman算法原理及代码实现

    目录 全局比对算法(Needleman-Wunsch) 原理 R代码实现 局部比对算法(Smith-Waterman) 原理 R代码实现 总结 全局比对算法(Needleman-Wunsch) 原理 其实这个跟数据结构学过的最短路径问题很像,核心思想就是依次寻求重复子问题的最优子结构。Needleman-Wunsch算法是一种全局联配算法

    2024年02月04日
    浏览(26)
  • 【路径规划】局部路径规划算法——贝塞尔曲线法(含python实现 | c++实现)

    路径规划与轨迹跟踪系列算法 曲线杂谈(二):Bezier曲线的特殊性质 贝塞尔曲线的特性总结 贝塞尔曲线于1962年由法国工程师皮埃尔·贝塞尔( Pierre Bézier)发表,他运用贝塞尔曲线来为汽车的主体进行设计。 贝塞尔曲线是应用于二维图形应用程序的数学曲线,由一组称为

    2024年02月14日
    浏览(42)
  • 49.在ROS中实现local planner(2)- 实现Purepersuit(纯跟踪)算法

    48.在ROS中实现local planner(1)- 实现一个可以用的模板实现了一个模板,接下来我们将实现一个简单的纯跟踪控制,也就是沿着固定的路径运动,全局规划已经规划出路径点,基于该路径输出相应的控制速度 Pure Pursuit 路径跟随便是基于受约束移动机器人圆周运动的特性所开发

    2024年02月04日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包