首页 > 其他分享 >基于Gazebo搭建移动机器人,并结合SLAM系统完成定位和建图仿真

基于Gazebo搭建移动机器人,并结合SLAM系统完成定位和建图仿真

时间:2023-05-14 13:49:09浏览次数:70  
标签:仿真 map launch demo 地图 移动机器人 建图 SLAM nav

博客地址:https://www.cnblogs.com/zylyehuo/

gazebo小车模型创建及仿真详见之前博客

gazebo小车模型(附带仿真环境) - zylyehuo - 博客园

gazebo+rviz 仿真 - zylyehuo - 博客园

参考链接

Autolabor-ROS机器人入门课程《ROS理论与实践》

成果图

step1: 准备工作

安装必要工具包+创建工作包

  • 安装 gmapping 包(用于构建地图): sudo apt install ros-melodic-gmapping
  • 安装地图服务包(用于保存与读取地图):sudo apt install ros-melodic-map-server
  • 安装 navigation 包(用于定位以及路径规划):sudo apt install ros-melodic-navigation

创建文件夹及文件

按下图结构在 nav_demo 下依次创建

文件夹: config(也可按照步骤之后创建)、map(也可按照步骤之后创建)、launch

文件:nav01_slam.launch、nav02_map_save.launch、nav03_map_server.launch

/home/yehuo/mycar_ws/src/nav_demo/launch/nav01_slam.launch

<launch>
    <!-- 仿真环境下,将该参数设置为true  -->
    <param name="use_sim_time" value="true"/>
    <!-- gmapping  -->
    <node pkg="gmapping" type="slam_gmapping" name="slam_gmapping" output="screen">
      <!-- 设置雷达话题  -->
      <remap from="scan" to="scan"/>

      <!-- 关键参数:坐标系 -->
      <param name="base_frame" value="base_footprint"/><!--底盘坐标系-->
      <param name="map_frame" value="map"/>
      <param name="odom_frame" value="odom"/> <!--里程计坐标系-->

      <param name="map_update_interval" value="5.0"/>
      <param name="maxUrange" value="16.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.1"/>
      <param name="srt" value="0.2"/>
      <param name="str" value="0.1"/>
      <param name="stt" value="0.2"/>
      <param name="linearUpdate" value="1.0"/>
      <param name="angularUpdate" value="0.5"/>
      <param name="temporalUpdate" value="3.0"/>
      <param name="resampleThreshold" value="0.5"/>
      <param name="particles" value="30"/>
      <param name="xmin" value="-50.0"/>
      <param name="ymin" value="-50.0"/>
      <param name="xmax" value="50.0"/>
      <param name="ymax" value="50.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>

    <node pkg="joint_state_publisher" name="joint_state_publisher" type="joint_state_publisher" />
    <node pkg="robot_state_publisher" name="robot_state_publisher" type="robot_state_publisher" />

    <node pkg="rviz" type="rviz" name="rviz" />
    <!-- 可以保存 rviz 配置并后期直接使用-->
    <!--
    <node pkg="rviz" type="rviz" name="rviz" args="-d $(find my_nav_sum)/rviz/gmapping.rviz"/>
    -->
</launch>

step2: 仿真环境运行 + SLAM建图

(1)编译+启动 gazebo 仿真环境

source ./devel/setup.bash 

roslaunch mycar environment.launch

(2)启动 rviz

source ./devel/setup.bash

roslaunch nav_demo nav01_slam.launch

(3)启动键盘控制节点

rosrun teleop_twist_keyboard teleop_twist_keyboard.py _speed:=0.3 _turn:=0.5

(4)在 rviz 中显示仿真环境

(5)保存 rviz 设置

(6)通过键盘控制机器人运动

每隔 5s 更新一次地图

step3: 保存地图(在step2基础上,不要关闭之前程序)

/home/yehuo/mycar_ws/src/nav_demo/launch/nav02_map_save.launch

<launch>
    <arg name="filename" value="$(find nav_demo)/map/nav" />
    <node name="map_save" pkg="map_server" type="map_saver" args="-f $(arg filename)" />
</launch>

在 nav_demo 下新建文件夹 map

新建终端,保存地图

source ./devel/setup.bash

roslaunch nav_demo nav02_map_save.launch

/home/yehuo/mycar_ws/src/nav_demo/map/nav.yaml 文件解释

# 1、声明地图图片资源的路径
image: /home/yehuo/mycar_ws/src/nav_demo/map/nav.pgm

# 2、地图刻度尺单位是 米/像素
resolution: 0.050000

# 3、地图的位姿(按照右手坐标系,地图右下角相对于 rviz 中原点的位姿)
# 值1:x方向上的偏移量
# 值2:y方向上的偏移量
# 值3:地图的偏航角度(单位:弧度)
origin: [-50.000000, -50.000000, 0.000000]

# 地图中的障碍物判断:
# 最终显示结果:白色是可通行区域,黑色是障碍物,蓝灰是未知区域
# 判断规则:
# 1、地图中的每个像素都有取值 [0,255]       255:白色       0:黑色
# 2、根据像素值计算一个比例:        p   = (255 - 像素值)/  255       ==>   0:白色    1:黑色
# 3、判断是否是障碍物,p > occupied_thresh 就是障碍物
#                                                p < free_thresh            就无障碍物

# 4、占用阈值
occupied_thresh: 0.65

# 5、空闲阈值
free_thresh: 0.196

# 6、取反(1:黑的区域变白的,白的区域变黑的)
negate: 0

step4: 读取地图

/home/yehuo/mycar_ws/src/nav_demo/launch/nav03_map_server.launch

<launch>

    <!-- 设置地图的配置文件 -->
    <arg name="map" default="nav.yaml" />

    <!-- 运行地图服务器,并且加载设置的地图-->
    <node name="map_server" pkg="map_server" type="map_server" args="$(find nav_demo)/map/$(arg map)"/>

</launch>

读取地图

source ./devel/setup.bash

roslaunch nav_demo nav03_map_server.launch

显示读取的地图

打开一个新的终端,启动 rviz

标签:仿真,map,launch,demo,地图,移动机器人,建图,SLAM,nav
From: https://www.cnblogs.com/zylyehuo/p/17399161.html

相关文章

  • 基于ORB-SLAM3库搭建SLAM系统
    参考资料ORB-SLAM3配置及安装教程ORB-SLAM3配置安装及运行环境配置Win11proVMware17ProUbuntu18.04Eigen3PangolinOpencv3.4.3ORB-SLAM3源码:https://github.com/UZ-SLAMLab/ORB_SLAM3效果图注意事项如果是新系统,没有安装git,则需要先装gitsudoapt-get......
  • 1-ORB-SLAM3论文重点导读及整体算法流程梳理-归纳
    摘要ORB-SLAM3是第一个能够执行纯视觉、视觉-惯导以及多地图的SLAM系统,可以在单目,双目以及RGB-D相机上使用针孔以及鱼眼模型。本文主要新颖之处在于基于特征的VIO紧耦合系统,该系统完全依赖于最大后验估计,即使在IMU初始化阶段也是如此。本系统在小型和大型、室内和室外环境中实时......
  • 激光SLAM之激光雷达+IMU建图 , 工程化落地项目,涉及激光雷达+imu 多传感器融合建图,加工
    激光SLAM之激光雷达+IMU建图,工程化落地项目,涉及激光雷达+imu多传感器融合建图,加工程应用角度的代码优化,从数据接收到闭环检测到图优化,非常完整。该商品与本人发布的“激光SLAM之多传感器融合定位”是可以组合使用的。该项目价格会比其他项目高的原因主要是在于这是真正......
  • 激光SLAM之多传感器融合定位 , 工程化落地项目,涉及激光雷达+imu等多传感器融合定位,不仅
    激光SLAM之多传感器融合定位,工程化落地项目,涉及激光雷达+imu等多传感器融合定位,不仅仅是算法逻辑,里面还增加了工程应用角度的代码优化,配置解析文档也非常完整。该商品与本人发布的“激光SLAM之激光雷达+IMU建图”是可以组合使用的。该项目价格会比其他项目高的原因主要是在......
  • 墨尔本大学提出水下视觉SLAM中的知识蒸馏:提升特征提取性能
    z以下内容来自小六的机器人SLAM学习圈知识星球每日更新内容点击领取学习资料→机器人SLAM学习资料大礼包论文##开源数据集#开源代码#KnowledgeDistillationforFeatureExtractioninUnderwaterVSLAM论文地址:https://arxiv.org/abs/2303.17981作者单位:墨尔本大学数据......
  • 1.ORB-SLAM3论文重点导读及整体算法流程梳理
    摘要ORB-SLAM3是第一个能够执行纯视觉、视觉-惯导以及多地图的SLAM系统,可以在单目,双目以及RGB-D相机上使用针孔以及鱼眼模型。本文主要新颖之处在于基于特征的VIO紧耦合系统,该系统完全依赖于最大后验估计,即使在IMU初始化阶段也是如此。本系统在小型和大型、室内和室外环境中实时稳......
  • 1.ORB-SLAM3论文重点导读及整体算法流程梳理
    摘要ORB-SLAM3是第一个能够执行纯视觉、视觉-惯导以及多地图的SLAM系统,可以在单目,双目以及RGB-D相机上使用针孔以及鱼眼模型。本文主要新颖之处在于基于特征的VIO紧耦合系统,该系统完全依赖于最大后验估计,即使在IMU初始化阶段也是如此。本系统在小型和大型、室内和室外环境中实时......
  • Acwing 3728-城市通电 / 最小生成树,建图,超级源点
    AcWing3728.城市通电做出来就凭之前的一句感悟:把每个动态选择变为与超级源点连的一条边,把这条边加入图里面跑最小生成树就相当于考虑了每个动态选择......
  • 视觉SLAM:模型介绍、算法框架及应用场景
    目录01 什么是SLAM 1.1 相机模型1.2 相机运动1.3建图02SLAM算法框架03SLAM的应用场景3.1自动驾驶的高精度定位3.2自主移动机器人知识扩展:组合导航(GNSS/INS)二维码导航/磁导航3.3室内场景的三维重建:AR(增强现实技术)等04 结语参考文献:本文主要想使用尽量少的专业词汇来解释......
  • ubuntu18.04 ORB-SLAM3编译运行
    如何编译?1、代码下载;gitclonehttps://github.com/UZ-SLAMLab/ORB_SLAM3或者gitclonehttps://github.com/electech6/ORB_SLAM3_detailed_comments2、按照里面的README.md进行环境安装和编译;安装和编译过程中可能会出现的问题:1)提示找不到GLEW解决方法:sudoaptinstallli......