ROS机器人Diego 1#制作(二十一)搭载EAI F4激光雷达gmapping创建室内地图

本文介绍使用gmapping创建室内地图的方法。首先通过编写launch文件配置gmapping参数,并启动launch文件和rviz进行地图构建。相较于hector,gmapping依赖于准确的odom数据。

更多创客作品,请关注笔者网站园丁鸟,搜集全球极具创意,且有价值的创客作品


上篇文章中我们用hector创建了室内地图,本文中我们采用gmapping来创建室内地图,hector和gmapping主要区别gmapping创建地图需要odom数据,而hector不需要,所以在gmapping创建地图首先要确保odom数据的准确性,否则会影像到创建地图的效果。有关激光雷达,arduino的配置请参见上篇博文,
1.编写gmapping的launch文件.

<launch>
  <master auto="start"/>

  <include file="$(find flashgo)/launch/lidar.launch" />
  
  <node name="arduino" pkg="ros_arduino_python" type="arduino_node.py" output="screen">
      <rosparam file="$(find ros_arduino_python)/config/my_arduino_params.yaml" command="load" />
  </node>  
   
  <node pkg="tf" type="static_transform_publisher" name="base_frame_2_laser_link" args="0.0 0.0 0.2 3.14 3.14 0 /base_link /laser 40"/>   
    
  <!-- gmapping node -->
  <node pkg="gmapping" type="slam_gmapping" name="slam_gmapping">
    <param name="base_frame" value="base_link"/>
    <param name="odom_frame" value="odom"/>
    <param name="maxUrange" value="4.0"/>
    <param name="maxRange" value="5.0"/>
    <param name="sigma" value="0.05"/>
    <param name="kernelSize" value="3"/>
    <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="minimumScore" value="30"/>
    <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.05"/>
    <param name="angularUpdate" value="0.0436"/>
    <param name="temporalUpdate" value="-1.0"/>
    <param name="resampleThreshold" value="0.5"/>
    <param name="particles" value="8"/>
  <!--
    <param name="xmin" value="-50.0"/>
    <param name="ymin" value="-50.0"/>
    <param name="xmax" value="50.0"/>
    <param name="ymax" value="50.0"/>
  make the starting size small for the benefit of the Android client's memory...
  -->
    <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>

2.启动launch

roslaunch diego_nav diego_run_flashgo.launch
rosrun rviz rviz

3.构建的地图
这里写图片描述

### MATLAB与ROS结合实现差速驱动机器人SLAM建图教程 在MATLAB和ROS环境中为差速驱动机器人部署SLAM(Simultaneous Localization and Mapping)建图任务时,可以利用GMapping算法生成室内地图。以下是一个完整的实现流程[^1]。 #### 1. 环境搭建 首先需要确保MATLAB中安装了Robotics System Toolbox,并配置好与ROS的连接。通过MATLAB中的`rosinit`函数初始化ROS节点,同时启动Gazebo仿真环境以模拟差速驱动机器人[^4]。 ```matlab % 初始化ROS节点 rosinit(&#39;NodeName&#39;, &#39;slam_node&#39;); ``` #### 2. 差速驱动机器人的运动控制 差速驱动机器人的运动可以通过MATLAB中的`rospyublisher`发布速度命令到ROS话题`/cmd_vel`上。这一步是实现机器人在仿真环境中移动的关键[^3]。 ```matlab % 创建一个Publisher对象用于发布速度消息 velPub = rospublisher(&#39;/cmd_vel&#39;, &#39;geometry_msgs/Twist&#39;); % 定义速度消息 velMsg = rosmessage(velPub); velMsg.Linear.X = 0.5; % 前进速度 velMsg.Angular.Z = 0.1; % 角速度 % 发布速度消息 send(velPub, velMsg); ``` #### 3. 配置激光雷达数据订阅 为了实现SLAM,必须从激光雷达传感器获取扫描数据。MATLAB可以通过`rossubscriber`订阅`/scan`话题,从而获取激光雷达的扫描信息[^1]。 ```matlab % 创建Subscriber对象用于接收激光雷达数据 scanSub = rossubscriber(&#39;/scan&#39;); ``` #### 4. GMapping SLAM算法集成 GMapping算法可以在ROS端运行,MATLAB通过调用ROS服务或监听TF变换来获取地图信息。启动GMapping节点后,MATLAB可以监控并保存生成的地图[^4]。 ```bash #ROS终端中启动GMapping节点 rosrun gmapping slam_gmapping _odom_frame:=/odom _base_frame:=/base_footprint _map_update_interval:=5.0 ``` #### 5. 地图保存与可视化 当SLAM过程完成后,可以使用MATLAB读取并保存生成的地图。通过`rosservice`调用`/map`服务获取地图数据,并将其转换为图像格式进行存储[^1]。 ```matlab % 调用/map服务获取地图数据 mapSrv = rosservice(&#39;/map&#39;); mapResp = call(mapSrv); % 将地图数据转换为图像 mapImage = reshape(uint8(get(mapResp.Map.Data)), [mapResp.Map.Info.Height, mapResp.Map.Info.Width]); % 保存地图图像 imwrite(mapImage, &#39;indoor_map.png&#39;); ``` #### 6. 实验验证与优化 在实际部署过程中,可能需要调整机器人运动参数、激光雷达频率以及GMapping算法的配置项以获得更精确的地图。此外,还可以结合MATLAB的强化学习工具箱进一步优化路径规划策略[^1]。 ```matlab % 示例:调整GMapping参数 setParam(&#39;/slam_gmapping&#39;, &#39;map_update_interval&#39;, 2.0); ``` --- ### 注意事项 - 确保Gazebo仿真环境正确加载机器人模型及其传感器配置。 - 检查ROS话题名称是否与实际硬件或仿真环境一致。 - 在真实硬件测试前,建议先在仿真环境中完成所有调试工作。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

DiegoRobot

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

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

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

打赏作者

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

抵扣说明:

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

余额充值