admin管理员组文章数量:1622638
前言
最近老师接了一个项目,做一个机器人仿真环境,我是负责移动机器人这部分的。老师的要求是以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目录下出现:
- mymap.pbstream
- mymap.pgm
- mymap.yaml
其中mymap.pgm和mymap.yaml是我们所需要的地图文件,并将其复制到/home/用户名/turtlebot_ws/src/turtlebot_simulator/turtlebot_gazebo/maps目录下。
Cartographer所建地图效果:
5.4建图效果对比
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地图
六.实验小结
- 有些安装包的下载需要科学上网,这也是学习过程中必备的技能。
- 通过本实验,掌握ROS中几种常见的建图方法,并学习各个算法原理体会不同算法之间的差异性以及各自适用的场景。
- 有兴趣的同学可以在TurtleBot2源码工程文件基础上,修改配置文件,搭建自己的仿真环境。
- 遇到问题时,分析问题可能出现的原因,有顺序条理地去解决,例如配置文件都正确,修改不起作用,需要检查当前环境变量是否设置正确
附录
代码开源地址
git clone https://github/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/turtlebot/turtlebot_simulator
git clone https://github/turtlebot/turtlebot.git
git clone https://github/turtlebot/turtlebot_apps.git
git clone https://github/udacity/robot_pose_ekf
git clone https://github/ros-perception/depthimage_to_laserscan.git
git clone https://github/yujinrobot/kobuki_msgs.git
git clone https://github/yujinrobot/kobuki_desktop.git
cd kobuki_desktop/
rm -r kobuki_qtestsuite
git clone https://github/toeklk/orocos-bayesian-filtering.git
git clone https://github/turtlebot/turtlebot_msgs.git
git clone https://github/ros-drivers/joystick_drivers.git
3.复制kobuki和yujin_ocs依赖库到turtlebot_ws/src工作空间下
mkdir -p ~/repos/
cd ~/repos/
git clone https://github/yujinrobot/kobuki.git
cp -r kobuki/* ~/turtlebot_ws/src/
git clone https://github/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
版权声明:本文标题:【环境配置】Turtlebot2 激光雷达+深度相机 GAZEBO仿真 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1728872931a1177471.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论