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

前言

最近老师接了一个项目,做一个机器人仿真环境,我是负责移动机器人这部分的。老师的要求是以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-streams
 sudo apt-get install libusb-dev
 sudo apt-get install libspnav-dev
 sudo apt-get install ros-melodic-joystick-drivers
 sudo apt-get install bluetooth
 sudo apt-get install libbluetooth-dev
 sudo apt-get install libcwiid-dev

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

 mkdir -p ~/turtlebot_ws/src 
 cd ~/turtlebot_ws/src 

 git clone https://github.com/turtlebot/turtlebot_simulator
 git clone https://github.com/turtlebot/turtlebot.git
 git clone https://github.com/turtlebot/turtlebot_apps.git
 git clone https://github.com/udacity/robot_pose_ekf
 git clone https://github.com/ros-perception/depthimage_to_laserscan.git 
 git clone https://github.com/yujinrobot/kobuki_msgs.git
 git clone https://github.com/yujinrobot/kobuki_desktop.git
 cd kobuki_desktop/
 rm -r kobuki_qtestsuite
 git clone https://github.com/toeklk/orocos-bayesian-filtering.git
 git clone https://github.com/turtlebot/turtlebot_msgs.git
 git 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.git
 cp -r kobuki/* ~/turtlebot_ws/src/
 git clone https://github.com/yujinrobot/yujin_ocs.git
 cp -r yujin_ocs/yocs_cmd_vel_mux/  yujin_ocs/yocs_controllers  yujin_ocs/yocs_velocity_smoother ~/turtlebot_ws/src/

4.编译工作空间

 cd ~/turtlebot_ws
 catkin_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 
  • 37
    点赞
  • 157
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

RockWang.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值