ROS学习记录15【SLAM】仿真学习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>
  • 2
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

康娜喵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值