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>
### 使用 TurtleBot3 进行 GMapping 的配置运行 #### 1. 环境准备 为了成功实现 TurtleBot3 的 GMapping ,需先确保 ROS 和相关依赖已正确安装并配置。通常情况下,TurtleBot3 提供的功能包已经包含了必要的工具和节点来支持 SLAM 功能。 - 启动核心服务 `roscore` 是任何 ROS 应用的基础操作之一[^3]。 ```bash $ roscore ``` #### 2. 启动机器人基本功能 通过启动 `minimal.launch` 文件加载 TurtleBot3 所需的核心驱动和服务。此文件会初始化硬件接口以及传感器数据流。 ```bash $ roslaunch turtlebot3_bringup minimal.launch ``` 上述命令适用于 TurtleBot3 平台上的基础设置。 #### 3. 启动 GMapping 节点 对于 GMapping 过程,需要调用专门设计用于 SLAM 地图的任务 launch 文件。以下是针对 TurtleBot3 的具体方法: - 对于配备 LiDAR 设备的标准版 TurtleBot3(如 Burger 或 Waffle),可直接使用官方提供的 `gmapping.launch` 文件: ```bash $ roslaunch turtlebot3_slam gmapping.launch ``` 该命令将激活 GMapping 节点,并开始处理来自激光测距仪的数据以构环境地图[^5]。 #### 4. 控制移动平台 为了让 GMapping 正常工作,必须让机器人在环境中实际运动起来采集不同位置处的空间信息。可以通过键盘遥控方式轻松操控其行动轨迹: ```bash $ rosrun teleop_twist_keyboard teleop_twist_keyboard.py ``` 这一步骤允许用户实时发送速度指令给 TurtleBot3 来探索未知区域。 #### 5. 记录数据 (Optional) 如果希望保存整个过程中产生的所有话题消息以便后续分析或者离线重放,则可以在另一个独立终端里执行如下记录全部活跃主题的操作: ```bash $ rosbag record -a ``` 当完成一轮完整的扫描之后停止录制即可获得一份珍贵的时间序列资料集[^4]。 #### 6. 保存生成的地图 最后,在满意当前绘制出来的成果后记得将其存储下来成为持久化文件形式方便以后重复利用或分享他人查看效果如何: ```bash $ rosrun map_server map_saver -f /path/to/save/map_name ``` 这里指定路径加上自定义名称作为最终产物的名字[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

康娜喵

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

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

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

打赏作者

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

抵扣说明:

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

余额充值