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

ROS学习记录17SLAM仿真学习6完结—— 无人驾驶

ROS学习记录17SLAM仿真学习6完结—— 无人驾驶

ROS学习记录14SLAM仿真学习3——开车,并发布坐标信息

ROS学习记录14SLAM仿真学习3——开车,并发布坐标信息