ROS学习记录15SLAM仿真学习4——使用gmapping建图与保存地图
Posted 康娜喵
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ROS学习记录15SLAM仿真学习4——使用gmapping建图与保存地图相关的知识,希望对你有一定的参考价值。
一.创建Gazebo世界
先启动Gazebo
,然后左上角Edit-Building Editor
随便画个地图,然后左上角Save Model
然后左上角退出编辑。
并在左上角继续,Save World AS
保存在我们的slam_model/worlds
下,比如叫个ackman_wall.world
修改launch
,添加一行参数,加载我们的墙体:
<include file="$(find gazebo_ros)/launch/empty_world.launch">
<arg name="use_sim_time" value="true"/>
<arg name="world_name" value="$(find slam_model)/worlds/ackman_wall.world"/>
</include>
此时,顺路把我们的odom
也添加上去吧:
<node pkg="slam_odom" type="odom_pub" name="odom_pub"></node>
二.下载与配置gmapping
安装:sudo apt install ros-noetic-slam-gmapping
还有map_server
:sudo apt-get install ros-noetic-map-server
官方文档:http://wiki.ros.org/gmapping/
然后就写一个launch
,一般来说,我们用默认参数就可以了,然后改一改一些基本的信息,必须改的,用arg
的方式列出来了
在/ros_ws/src/slam_model/launch
下创建gmapping.launch
,写入
<launch>
<arg name="scan_topic" default="/ackman/laser/scan" />
<arg name="base_frame" default="base_footprint"/>
<arg name="odom_frame" default="odom"/>
<param name="use_sim_time" value="true"/>
<node pkg="gmapping" type="slam_gmapping" name="slam_gmapping" output="screen">
<remap from="scan" to="$(arg scan_topic)"/>
<param name="base_frame" value="$(arg base_frame)"/>
<param name="odom_frame" value="$(arg odom_frame)"/>
<param name="map_update_interval" value="5.0"/>
<param name="maxUrange" value="10.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.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.218"/>
<param name="temporalUpdate" value="5.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"/>
</node>
</launch>
三.启动与保存
然后启动小车,启动建图,rivz
里添加map
然后保存rosrun map_server map_saver -f /home/kanna/ros_ws/src/slam_model/map/ackman_wall
记得建图要低速,而且不要撞墙,否则就会出现这样的畸变。
三.后记
这次新的启动launch
的完整代码:
<launch>
<arg name="model_name" value="ackman"/>
<arg name="model_ns" value="ackman"/>
<include file="$(find gazebo_ros)/launch/empty_world.launch">
<arg name="use_sim_time" value="true"/>
<arg name="world_name" value="$(find slam_model)/worlds/ackman_wall.world"/>
</include>
<param name="robot_description" textfile="$(find slam_model)/urdf/$(arg model_name).urdf" />
<param name="use_gui" value="true"/>
<node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" respawn="false" output="screen">
<remap from="/joint_states" to="/$(arg model_ns)/joint_states" />
</node>
<node name="rviz" pkg="rviz" type="rviz" args="-d $(find slam_model)/urdf/$(arg model_name).rviz" required="true"></node>
<node name="spawn_model" pkg="gazebo_ros" type="spawn_model" args="-file $(find slam_model)/urdf/$(arg model_name).urdf -urdf -model $(find slam_model)" output="screen"/>
<rosparam file="$(find slam_model)/config/$(arg model_name)_control.yaml" command="load"/>
<node name="controller_spawner" pkg="controller_manager" type="spawner" respawn="false"
output="screen" ns="/$(arg model_ns)" args="joint_state_controller right_wheel_velocity_controller left_wheel_velocity_controller right_bridge_position_controller left_bridge_position_controller"/>
<node pkg="slam_odom" type="odom_pub" name="odom_pub"></node>
</launch>
以上是关于ROS学习记录15SLAM仿真学习4——使用gmapping建图与保存地图的主要内容,如果未能解决你的问题,请参考以下文章
ROS学习记录12SLAM仿真学习1——ROS Control
ROS学习记录12SLAM仿真学习1——ROS Control