前言

最近老师接了一个项目,做一个机器人仿真环境,我是负责移动机器人这部分的。老师的要求是以Turtlebot2为参考,后面可能涉及实机演示。在仿真的过程中我发现Turtlebot2仿真环境是以Kinect摄像头为传感器,进行伪激光数据输出,这在跑ROS中Gmapping算法是会导致特征点比较少(激光雷达360度,深度相机由于视场角问题,特征点非常少)会导致在某个区域机器人实际在移动但是gmapping算法认为机器人原地不动,出现卡顿现象,这是看古月居课程:ROS常用SLAM功能包使用指南 · 古月 知道的。所以我打算加入激光雷达传感器代替SCAN原有的伪激光话题。然后按照古月课程整理了一节《实验一 SLAM地图构建与保存 》

实验一 SLAM地图构建与保存

一.实验内容

本次实验通过Turtlebot仿真环境,配置ROS中几种常见的SLAM算法功能包实现对机器人周围环境的地图构建.

二.实验目标

1.了解SLAM算法的基本框架
2.掌握几种常见SLAM算法功能包的配置
3.了解不同SLAM算法之间的差异和各自适用的场景

三.实验环境

·Ubuntu18.04 desktop
·ROS Melodic
·TurtleBot2 仿真功能包

四.实验原理

4.1Gmapping

Gmapping是基于粒子滤波的算法。
优点:
1.可以实时构建室内地图,在构建小场景地图所需的计算量较小且精度较高。
2.相比Hector SLAM对激光雷达频率要求低、鲁棒性高(Hector 在机器人快速转向时很容易发生错误匹配,建出的地图发生错位,原因主要是优化算法容易陷入局部最小值)。
3.而相比Cartographer在构建小场景地图时,Gmapping不需要太多的粒子并且没有回环检测,因此计算量小于Cartographer而精度并没有差太多。
4.在长廊及低特征场景中建图效果好;在地况较为平整时采用Gmapping方法较多。
缺点:
1.依赖里程计(odometry),无法适用无人机及地面小车不平坦区。
2.严重依赖里程计,无法适应无人机及地面不平坦的区域,无回环(激光SLAM很难做回环检测),大的场景,粒子较多的情况下,特别消耗资源。
3.随着场景增大所需的粒子增加,因为每个粒子都携带一幅地图,因此在构建大地图时所需内存和计算量都会增加。因此不适合构建大场景地图。
4.没有回环检测,因此在回环闭合时可能会造成地图错位,虽然增加粒子数目可以使地图闭合但是以增加计算量和内存为代价。
所以Gmapping不能像cartographer那样构建大的地图。

4.2 Hector SLAM


PS:博客中懒得自己画了,图片直接截取古月居的课件,感觉课件中的很详细了
古月居官网

基于优化的算法(解最小二乘问题),优缺点:不需要里程计,但对于雷达帧率要求很高40Hz,估计6自由度位姿,可以适应空中或者地面不平坦的情况。初值的选择对结果影响很大,所以要求雷达帧率较高。Hector_SLAM提出的初衷是为了解决非平坦地区,非结构化环境下的地图构建。
优点:
1.SLAM经过多年的发展,在结构化场景下建图已经非常成熟,但是都离不开高精度的里程计数据,而Hector_SLAM完全摆脱了里程计,仅仅依赖于高频率的激光。不需要使用里程计,所以使得空中无人机及地面小车在不平坦区域建图存在运用的可行性。
2.利用已经获得的地图对激光束点阵进行优化, 估计激光点在地图的表示,和占据网格的概率。
3.利用高斯牛顿方法解决scan-matching 问题,获得激光点集映射到已有地图的刚体变换。
4.为避免局部最小而非全局最优,使用多分辨率地图;导航中的状态估计加入惯性测量系统(IMU),利用EKF滤波。
5.Hector_SLAM灵活高、可扩展性强,可用于二维和三维地图的创建,很好地适应了微型处理器,降低了SLAM算法对计算机硬件的要求,在自主移动机器人导航领域应用越来越多。
缺点:
1.需要雷达(LRS)的更新频率较高,测量噪声小。所以在制图过程中,需要robot速度控制在比较低的情况下,建图效果才会比较理想,这也是它没有回环(loop close)的一个后遗症。
2.且在里程计数据比较精确的时候,无法有效利用里程计信息。
实验表明:在大地图,低特征(distinctive landmarks)场景中,hector的建图误差高于gmapping。这是由于hector过分依赖scan-match。特别是在长廊问题中,误差更加明显。
补充:hector_slam通过最小二乘法匹配扫描点,且依赖高精度的激光雷达数据,因此扫描角很小且噪声较大的Kinect是不行的,匹配时会陷入局部点,地图比较混乱。

4.3 Cartographer

累计误差较前两种算法低,能天然的输出协方差矩阵,成本较低的雷达也能跑出不错的效果。先由一定数量的laser scan构建submap,由submap拼接成地图,具有回环检测,间隔一定数量的扫描进行一次所有submap的图优化(SPA,运用了分支定界原理进行加速)。

五.实验步骤

5.1 Gmapping建图
ROS中默认的SLAM定位算法为Gmapping,因此在编译好工作空间后,在终端直接运行:

roslaunch turtlebot_gazebo turtlebot_go.launch

新建终端输入

roslaunch turtlebot_gazebo gmapping_demo.launch

再新建终端输入

roslaunch turtlebot_teleop keyboard_teleop.launch

根据终端提示,将鼠标定位在此终端(按键控制终端,否则无法控制),通过Rviz左下角摄像头第一视角,按键盘”I”键控制机器人前进,”J”和”L”分别为左转和右转,”,”键为后退控制机器人对周围环境进行建图,并构建一张完整地图,用于后续机器人导航定位.

控制机器人运行一周后,见下图:

进入/home/用户名/turtlebot_ws/src/turtlebot_simulator/turtlebot_gazebo/maps目录下

rosrun map_server map_saver -f map

注释:rosrun map_server map_saver -f [要保存成地图的地图名,此处要保存为map]
生成map.pgm和map.yaml两个文件,其中map.pgm为地图,map.yaml为地图配置文件里面包括地图的路径,分辨率等.

最终生成地图:

5.2 Hector建图
Hector SLAM算法在Turtlebot2工作空间中已经配置完成,对配置感兴趣的同学可以查看hector.launch这个文件中的内容。
利用Hector进行建图:
新建终端:

roslaunch turtlebot_gazebo turtlebot_go.launch

新建终端输入:

roslaunch turtlebot_gazebo hector.launch

新建终端打开按键控制:

roslaunch turtlebot_teleop keyboard_teleop.launch

鼠标定位在此终端,根据提示控制机器人对周围环境进行建图。

进入/home/用户名/turtlebot_ws/src/turtlebot_simulator/turtlebot_gazebo/maps目录下

rosrun map_server map_saver -f map_hector

注释:rosrun map_server map_saver -f [要保存成地图的地图名,此处要保存为map]
生成map_hector.pgm和map_hector.yaml两个文件,其中map_hector.pgm为地图,map_hector.yaml为地图配置文件里面包括地图的路径,分辨率等.

5.3 Cartographer建图
安装功能包:

sudo apt-get install  ros-melodic-cartographer-*

新建终端打开Gazebo仿真环境:

roslaunch turtlebot_gazebo turtlebot_go.launch

新建终端打开cartographer节点:

roslaunch turtlebot_gazebo cartographer_demo.launch

新建终端打开按键控制:

roslaunch turtlebot_teleop keyboard_teleop.launch

鼠标控制机器人进行建图:

保存地图:
新建终端依次输入下列三条指令:

rosservice  call /finish_trajectory "trajectory_id: 0"
rosservice  call /write_state "filename: '${HOME}/mymap.pbstream'"
rosrun cartographer_ros cartographer_pbstream_to_ros_map -map_filestem=${HOME}/mymap -pbstream_filename=${HOME}/mymap.pbstream -resolution=0.05

在Home目录下出现:

  1. mymap.pbstream
  2. mymap.pgm
  3. mymap.yaml

其中mymap.pgm和mymap.yaml是我们所需要的地图文件,并将其复制到/home/用户名/turtlebot_ws/src/turtlebot_simulator/turtlebot_gazebo/maps目录下。

Cartographer所建地图效果:

5.4建图效果对比

gmapping建图效果

hector建图效果

cartographer建图效果

5.5 RTAB建图
安装功能包:

sudo apt-get install ros-melodic-rtabmap ros-melodic-rtabmap-ros

启动Gazebo仿真环境:

roslaunch turtlebot_gazebo turtlebot_go.launch

运行RTAB节点:

roslaunch turtlebot_gazebo rtabmap_demo.launch

配置rviz设置:
添加机器人模型:Add->By dispaly type->rviz->RobotModel 点击OK

左侧rviz设置按照下图勾选:

启动键盘控制节点:

roslaunch turtlebot_teleop keyboard_teleop.launch

通过键盘控制机器人进行建图:

关闭所有终端,新建终端查看构建地图输入:

rtabmap-databaseViewer ~/.ros/rtabmap.db

点击view中 Graph view查看2D地图

点击view中 Occupancy Grid查看3D地图

六.实验小结

  1. 有些安装包的下载需要科学上网,这也是学习过程中必备的技能。
  2. 通过本实验,掌握ROS中几种常见的建图方法,并学习各个算法原理体会不同算法之间的差异性以及各自适用的场景。
  3. 有兴趣的同学可以在TurtleBot2源码工程文件基础上,修改配置文件,搭建自己的仿真环境。
  4. 遇到问题时,分析问题可能出现的原因,有顺序条理地去解决,例如配置文件都正确,修改不起作用,需要检查当前环境变量是否设置正确

附录

代码开源地址

git clone https://github.com/FistsK/turtlebot2_withlidar.git

这两个文件夹是我已经配置好的,下载到你的turtlebot2源码配置工作区,覆盖掉相应文件夹即可。至于turtlebot2源码配置

turtlebot2源码配置

环境:Turtlebot2+Ubuntu18.04+melodic
1.安装依赖

 sudo apt-get install ros-melodic-kobuki-*sudo apt-get install ros-melodic-ecl-streamssudo apt-get install libusb-devsudo apt-get install libspnav-devsudo apt-get install ros-melodic-joystick-driverssudo apt-get install bluetoothsudo apt-get install libbluetooth-devsudo apt-get install libcwiid-dev

2.新建工作空间,准备相关包

 mkdir -p ~/turtlebot_ws/src cd ~/turtlebot_ws/src git clone https://github.com/turtlebot/turtlebot_simulatorgit clone https://github.com/turtlebot/turtlebot.gitgit clone https://github.com/turtlebot/turtlebot_apps.gitgit clone https://github.com/udacity/robot_pose_ekfgit clone https://github.com/ros-perception/depthimage_to_laserscan.git git clone https://github.com/yujinrobot/kobuki_msgs.gitgit clone https://github.com/yujinrobot/kobuki_desktop.gitcd kobuki_desktop/rm -r kobuki_qtestsuitegit clone https://github.com/toeklk/orocos-bayesian-filtering.gitgit clone https://github.com/turtlebot/turtlebot_msgs.gitgit clone https://github.com/ros-drivers/joystick_drivers.git

3.复制kobuki和yujin_ocs依赖库到turtlebot_ws/src工作空间下

 mkdir -p ~/repos/cd ~/repos/git clone https://github.com/yujinrobot/kobuki.gitcp -r kobuki/* ~/turtlebot_ws/src/git clone https://github.com/yujinrobot/yujin_ocs.gitcp -r yujin_ocs/yocs_cmd_vel_mux/  yujin_ocs/yocs_controllers  yujin_ocs/yocs_velocity_smoother ~/turtlebot_ws/src/

4.编译工作空间

 cd ~/turtlebot_wscatkin_make

5.添加工作空间到bashrc文件

echo "source ~/turtlebot_ws/devel/setup.bash" >> ~/.bashrc

6.启用环境变量

source ~/.bashrc

测试

roslaunch turtlebot_gazebo turtlebot_world.launch
roslaunch turtlebot_teleop keyboard_teleop.launch

【环境配置】Turtlebot2 激光雷达+深度相机 GAZEBO仿真相关推荐

  1. 多线激光雷达+imu的gazebo仿真

    多线激光雷达+imu的gazebo仿真 前言:在做2D/3D slam的课题研究时,往往我们手里头没有昂贵的多线激光雷达和惯性传感器,ros提供了相应的传感器插件,通过插件可以在物理仿真环境下,模拟传 ...

  2. Husky仿真环境配置

    Husky仿真环境配置 1. 下载安装 2. 运行仿真 1. 下载安装 ROS官方: Robots/Husky - ROS Wiki Github官方: Husky/Husky husky_base: ...

  3. 从零开始的机械臂yolov5抓取gazebo仿真(环境搭建篇下)

    sunday功能包使用介绍以及开源 sunday我给自己机械臂的命名,原型是innfos的gluon机械臂.通过sw模型文件转urdf.Sunday项目主要由六个功能包sunday_descripti ...

  4. 【ROS】ROS入门笔记-Gazebo仿真与实物测试篇

    前面我们学习了ROS的一些基础知识,现在我们来学习ROS环境下的Gazebo仿真. 本文所需的源码下载地址为 https://github.com/guyuehome/guyueclass 文章目录 ...

  5. 【深度相机D435i】Windows+Ubuntu下调用D435i利用Python读取、保存RGB、Depth图片

    目录 前言 一.D435i深度相机介绍 二.Windows下安装D435i 1.安装Intel® RealSense™ SDK 2.0 2.使用Intel® RealSense™ Viewer查看D4 ...

  6. 【我的第一个目标检测课题】1、课题介绍及环境配置(Windows+Keras+GPU)

    我的第一篇CSDN博客来了. 新手驾到,多多指教. 2020.12.28晚记 写在前面 今天验收完图像处理课程的结课课题--建筑材料识别课题了.晚上决定趁热打铁,记录一下完成这次课题的全过程,还有一点 ...

  7. 【环境配置】gazebo搭建仿真机器人研究动态障碍物算法

    0前言 最近由于实验过程中遇到一些问题,打算直接仿真了,利用一个月时间把整体的仿真环境搭建出来,这里对最近的学习成果,进行梳理. 1Gazebo 学习准备: urdf基本语法 xacro基本语法 一个 ...

  8. 【Autoware入门教程】如何在Gazebo仿真环境配置自动驾驶汽车

    假设你已经安装好了Autoware,Autoware源码中其实已经配置有Gazebo仿真环境,当然你也可以根据自己的需要另外下载自动驾驶汽车的仿真模型.该汽车模型已经默认配置好了Velodyne HD ...

  9. UR5机械臂与realsense相机在Gazebo仿真环境下的手眼标定(眼在手上)

    简介 这是一个Gazebo仿真环境下利用UR5机械臂和realsense相机进行手眼标定的教程(眼在手上). 准备相关文件 # UR5 git clone https://github.com/Uni ...

最新文章

  1. 一代数学大家--John Conway逝世,丘成桐、陶哲轩纷纷发文缅怀!
  2. 运用UE和Blocks,仅用两周打造一个VR游戏(52VR完整版译文)
  3. OpenCV中IplImage和单字节char*的相互转换
  4. 从生物神经网络到人工神经网络
  5. asp: menu 父级选中
  6. Wix 安装部署(五) Bootstrapper 捆绑安装
  7. 计算机网络技术超星尔雅章节检测,超星尔雅计算机网络技术第二章节测验答案...
  8. 计算机网络故障的论述,计算机应用中常见的网络故障及解决方法
  9. 【STM32】ADC的DMA方式采集(16通道)
  10. AnaConda下载安装完了只有anaconda prompt问题
  11. 全功能杀毒软件行业调研报告 - 市场现状分析与发展前景预测
  12. vLive虚拟直播,助力企业打造线上云年会
  13. 劝大家别去国企制造业干IT,软件多数据乱,报表开发完全没法做
  14. husky实现git commit规范
  15. 量化投资中的因子是什么?因子是如何分类的,包括哪些?
  16. 树莓派 java 驱动 微雪 墨水屏 4灰阶 epaper
  17. python爬虫学习:selenium(2)
  18. 计算机科学类专升本复习之“C语言fopen函数的用法”详解(初稿)
  19. 在 Cinema 4D 中使用 Octane 渲染的物质工作流程
  20. mqtt session保持 订阅消息_iOS MQTT 3 - 发送订阅消息以及发送过程

热门文章

  1. 守护进程与后台进程(Python 创建守护进程)
  2. 备忘录吕吕没有备忘录十新建_去弦备忘单
  3. 自定义starter为什么要加上spring.factories
  4. 内存的工作原理和时序介绍
  5. html项目管理器怎么处理,打开WINCC 7.4SP1项目时提示:WINCC项目管理器—服务器不可用-工业支持中心-西门子中国...
  6. angular使用bootstrap方法手动启动
  7. 期末作业代码网页设计代码——优分期大学生购物商城(7页) 大学生大学生购物商城作业模板下载 静态HTML购物商城网页制作下载_网页设计代码
  8. 关于计算机管理员自我介绍,管理人员简历中的自我介绍
  9. Framebuffer之fset工具(二十八)
  10. 关于dsp28335移相全桥易于理解的程序