目录
前言
一、命令行
二、所用到的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插件
点击Add,往下滑动找到Path,若想显示全局和局部路径则添加两个,并选择对应的Topic,可以分别命名为Path_global和Path_local,并将线赋予不同颜色。
然后就可以实现在机器人运动过程中观察到全局、局部路径啦。
总结
- tips:1.launch文件中的 args=”$(find xxx) 我的理解来看xxx是所对应文件的上级或上上级文件夹的名字,使用代码时需注意将此处的名字改为自己launch/yaml文件夹对应路径名字。
2.在已开启的终端中加入新终端快捷键:Ctrl+Shift+T;开启新终端快捷键:Ctrl+Alt+T
- 现在没能解决的问题:
1.不知道如何在gazebo中显示小机器人蓝色的雷达线程(Belike:)
2.不知道如何将rviz中的地图显示为(Belike:)
希望有缘的大佬可以帮忙指导一下 (๑•̀ㅂ•́)و✧
主要参考:ROS仿真机器人(安装、配置、测试、建图、定位、路径规划)(上)
ROS仿真机器人(安装、配置、测试、建图、定位、路径规划)(下)
【ROS-Navigation】—— DWA路径规划算法解析文章来源:https://www.toymoban.com/news/detail-428753.html
ROS系统SLAM基础学习:运行gazebo仿真建立保存地图文章来源地址https://www.toymoban.com/news/detail-428753.html
到了这里,关于ros中实现全局/局部避障算法的添加与rviz中规划路径的显示(上)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!