“山无拦 海无遮!”
- 前期准备
- 建图
- I、运行机器人(gazebo)
- II、建图文件编写
- III、配置rviz并保存
- 1.添加机器人和雷达
- 2.添加TF
- 3.地图map
- 4.保存配置
- IV、控制运动建图
- V、保存地图
-
- VI、发布地图话题
- 说明
【仿真】:借用之前搭建好摄像头、激光雷达、深度相机等传感器的模型,完成本节slam建图,保存内容。
实现:
- 打开gazebo和模型文件(car_move.launch)
- 编写gampping运行并打开rviz
- 完成rviz配置,启动机器人控制,实现slam建图
- 使用map_server保存文件(launch文件)
前期准备
- 延用工作空间test2_ws;
- 功能包demo5_navigation存放代码;
- slam-gampping和rviz代码在demo5_navigation/launch/nav1_slam.launch;
- 保存地图的代码在demo5_navigation/launch/nav1_save_map.launch;
- rviz配置在demo5_navigation/config/rviz/nav1.rviz;
- 自动生成的地图文件保存在demo5_navigation/map文件夹。
建图
首先sudo apt安装gmapping map_server move_base 。
然后新建功能包demo5_navigation,依赖gmapping map_server amcl move_base。
I、运行机器人(gazebo)
执行之前的代码:
roslaunch demo4_urdf_gazebo car_move.launch
作用是在gazebo中打开具有各个传感器功能的机器人。如下图:
II、建图文件编写
slam-gmapping。
是一个launch文件,复制官网代码修改, 官网链接
nav1_slam.launch修改之后如下(已经加入了rviz文件打开和配置加载):
<launch>
<param name="use_sim_time" value="true"/>
<node pkg="gmapping" type="slam_gmapping" name="slam_gmapping" output="screen">
<remap from="scan" to="scan"/>
<param name="base_frame" value="base_footprint" />
<param name="map_frame" value="map" />
<param name="odom_frame" value="odom" />
<param name="map_update_interval" value="5.0"/>
<param name="maxUrange" value="16.0"/>
<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.1"/>
<param name="srt" value="0.2"/>
<param name="str" value="0.1"/>
<param name="stt" value="0.2"/>
<param name="linearUpdate" value="1.0"/>
<param name="angularUpdate" value="0.5"/>
<param name="temporalUpdate" value="3.0"/>
<param name="resampleThreshold" value="0.5"/>
<param name="particles" value="30"/>
<param name="xmin" value="-50.0"/>
<param name="ymin" value="-50.0"/>
<param name="xmax" value="50.0"/>
<param name="ymax" value="50.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"/>
</node>
<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />
<node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" />
<node pkg="rviz" type="rviz" name="rviz" args="-d $(find demo5_navigation)/config/rviz/nav1.rviz" />
</launch>
运行该文件
roslaunch demo5_navigation nav1_slam.launch
此时打开了空的rviz,如下:
III、配置rviz并保存
1.添加机器人和雷达
添加robotmodel,laserscan(话题:/scan,size(m)加粗线条,提升查看效果)
2.添加TF
这里打开frames,我们主要观察关键的三个坐标系:base_footprint、map、odom。将其余注释:
3.地图map
添加map,话题订阅/map。
4.保存配置
CTR+shift+s,另存为demo5_navigation/config/rviz/nav1.rviz
IV、控制运动建图
控制台键入命令:
rosrun teleop_twist_keyboard teleop_twist_keyboard.py
然后控制机器人将全图跑完,根据配置可知rviz中每5s刷新一次地图。直到地图完全跑完(建完)。
V、保存地图
1. map_server
位置:demo5_navigation/launch/nav1_save_map.launch
编写launch文件如下:
<launch>
<arg name="filename" value="$(find demo5_navigation)/map/nav" />
<node name="map_save" pkg="map_server" type="map_saver" args="-f $(arg filename)" />
</launch>
2. 保存查看
运行:
roslaunch demo5_navigation nav1_save_map.launch
运行/保存完毕控制台会出现done字样。
此时可以看到/map中多了两个文件nav.pgm和nav.yaml,打开一个可执行文件nav.pam(图片)如下
对于这两个文件的具体解释:参考.
VI、发布地图话题
编写launch文件,来查看发布我们刚才保存的map。此时可以在rviz中添加map组件查看地图。
pub_map.launch源码:
<launch>
<node name="map_server" pkg="map_server" type="map_server" args="$(find demo5_navigation)/map/nav.yaml"/>
</launch>
说明
对机器人的优化主要体现在,slam_gampping文件中的参数的更改。详见官网。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)