导航实现:SLAM建图
先安装相关的ROS功能包:
- 安装 gmapping 包(用于构建地图):sudo apt install ros-<ROS版本>-gmapping
- 安装地图服务包(用于保存与读取地图):sudo apt install ros-<ROS版本>-map-server
- 安装 navigation 包(用于定位以及路径规划):sudo apt install ros-<ROS版本>-navigation
新建功能包,并导入依赖: gmapping map_server amcl move_base,其中gampping用于构建地图,map_server用于保存与读取地图,amcl用于定位,move_base用于路径规划
(1)编写gmapping相关的launch文件
复制并修改如下:
<launch><paramname="use_sim_time"value="true"/>是否使用仿真时间(仿真时要设置为True)
<nodepkg="gmapping"type="slam_gmapping"name="slam_gmapping"output="screen"><remapfrom="scan"to="scan"/>设置雷达话题,前面仿真雷达设置的话题就是scan
<paramname="base_frame"value="base_footprint"/><!--底盘坐标系--><paramname="odom_frame"value="odom"/><!--里程计坐标系--><paramname="map_update_interval"value="5.0"/>地图更新频率间隔
<paramname="maxUrange"value="16.0"/>雷达测试范围最大16m
<paramname="sigma"value="0.05"/><paramname="kernelSize"value="1"/><paramname="lstep"value="0.05"/><paramname="astep"value="0.05"/><paramname="iterations"value="5"/><paramname="lsigma"value="0.075"/><paramname="ogain"value="3.0"/><paramname="lskip"value="0"/><paramname="srr"value="0.1"/><paramname="srt"value="0.2"/><paramname="str"value="0.1"/><paramname="stt"value="0.2"/><paramname="linearUpdate"value="1.0"/><paramname="angularUpdate"value="0.5"/><paramname="temporalUpdate"value="3.0"/><paramname="resampleThreshold"value="0.5"/><paramname="particles"value="30"/><paramname="xmin"value="-50.0"/><paramname="ymin"value="-50.0"/><paramname="xmax"value="50.0"/><paramname="ymax"value="50.0"/><paramname="delta"value="0.05"/><paramname="llsamplerange"value="0.01"/><paramname="llsamplestep"value="0.01"/><paramname="lasamplerange"value="0.005"/><paramname="lasamplestep"value="0.005"/></node><nodepkg="joint_state_publisher"name="joint_state_publisher"type="joint_state_publisher"/><nodepkg="robot_state_publisher"name="robot_state_publisher"type="robot_state_publisher"/><nodepkg="rviz"type="rviz"name="rviz"/><!-- 可以保存 rviz 配置并后期直接使用--><!--
<node pkg="rviz" type="rviz" name="rviz" args="-d $(find my_nav_sum)/rviz/gmapping.rviz"/>
--></launch>
(2)启动Gazebo仿真环境和编写好的slam.launch文件
(3)在RVIZ中添加组件
- 添加机器人模型RobotModel
- 添加Laserscan并设置Topic话题scan
- 添加坐标系组件TF,Fram下即可找到map,odom
- 添加map组件用于建图,设置topic,发布话题栅格地图数据,这里设置为map即可看到如下效果:
(4)在rviz中配置好之后,可以将目前配置保存:左上角save config as,保存到该功能包的config文件夹下,并在rivz启动中添加参数,以后启动就可以自动配置。
<nodepkg="rviz"type="rviz"name="rviz"args="-d $find(功能包名) 功能包内的相对路径"/>
(5)启动键盘控制节点
rosrun teleop_twist_keyboard teleop_twist_keyboard.py
控制小车运动,绕着地图走一圈建图。
SLAM建图
建图结果如图所示,白色部分是无障碍物可以走的地方,黑色圈出部位为障碍物信息。
(6)保存地图map_server
如果直接关闭rviz退出,那么建好的地图将会消失,所以要编写launch文件进行保存操作
<launch><argname="filename"value="$(find mycar_nav)/map/nav"/><nodename="map_save"pkg="map_server"type="map_saver"args="-f $(arg filename)"/></launch>
可以看到在指定路径下产生了两个文件map_save.pgm和map_save.yaml
(7)读取地图信息(map_server包里的map_server)
新建launch文件,使用map_server调用上一步保存的map_save.yaml文件
代码示例如下:
<launch><nodepkg="map_server"type="map_server"name="map_server"args="$(find 功能包名)/功能包内到yaml文件的路径"/></launch>
这样,之前我们发布的信息就会以话题的形式发布了,要看到地图的可视化效果我们需要借助rviz,可以在终端打开rviz并加入map插件,选择topic为map,即可看到效果。
版权归原作者 芝士就是力量蛙 所有, 如有侵权,请联系我们删除。