ROS机器人SLAM学习:Gazebo定位与导航仿真

ROS机器人SLAM学习:Gazebo定位与导航仿真

    • 一. 在 gazebo 中构建一个用于建图和导航的虚拟环境,可以使用 Building Editor工具创建,也可以使用其他功能包中已有的虚拟环境;将前面作业完成的带传感器的移动机器人(小车)模型放置到虚拟环境中,使用 gmapping 和 hector_slam 功能包实现 SLAM仿真,并将简历完成的地图保存到功能包的 maps 文件夹中,随作业一同提交。
      • 1.用 gmapping 功能包实现 SLAM 仿真
      • 2.使用hector_slam功能包实现 SLAM 仿真
    • 二. 在第一题建立完成的地图上,实现基于 move_base 和 amcl功能包的机器人自主导航仿真。
      • 1. 导航仿真
      • 2. 导航SLAM仿真
      • 3. 自主探索SLAM仿真
      • 三、分析

(以下功能包的网盘链接:链接:https://pan.baidu.com/s/15NVx6vmdz20o2YLkecobkg
提取码:geuo)

一. 在 gazebo 中构建一个用于建图和导航的虚拟环境,可以使用 Building Editor工具创建,也可以使用其他功能包中已有的虚拟环境;将前面作业完成的带传感器的移动机器人(小车)模型放置到虚拟环境中,使用 gmapping 和 hector_slam 功能包实现 SLAM仿真,并将简历完成的地图保存到功能包的 maps 文件夹中,随作业一同提交。

1.用 gmapping 功能包实现 SLAM 仿真

(1)下载gmapping

1
sudo apt-get install ros-kinetic-gmapping
  1. 配置gmapping节点

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-94a97GDS-1586222344794)(media/a7bb8ef6dcf3bb43c74ca0e6aea4b52e.png)]

  1. 启动gmapping演示(激光雷达)

①运行代码

1
2
3
source devel/setup.bash

roslaunch mbot_gazebo mbot_laser_nav_gazebo.launch

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y4unnwMA-1586222344795)(media/21820bda8d6661fd7b2491e637861a07.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0skNfLJC-1586222344796)(media/0060587b78773d2d7fccd715de0420d8.png)]

②打开RVIZ查看

1
2
3
source devel/setup.bash

roslaunch mbot_anvigation gmapping_demo.launch

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UFV2wTTH-1586222344796)(media/d8bb082c22d7903ea7aba8a0567a2162.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-48W3fwAK-1586222344796)(media/cfd0a947e8d85f5817cf04e48be50524.png)]

③打开键盘控制节点

1
2
3
source devel/setup.bash

roslaunch mbot_teleop mbot_teleop.launch

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ubOFifJE-1586222344797)(media/e2afaa1e0bf38caf303e802dc5dadbb1.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IUdBrYP9-1586222344797)(media/a479cbbcd7907ba5f754b0d5d9b2a28a.png)]

控制小车的移动,观察到的画面如下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ee1mtawU-1586222344797)(media/ceb1e4fbebca99587cf16c6d13852e7c.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IgVHbf52-1586222344798)(media/808fbf69a2a1a76228d23143d9e4322e.png)]

④保存地图

1
rosrun map_server map_saver -f cloister_gmapping3

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f75I3iFb-1586222344798)(media/8951f9c73fc57bc66e748b0bb8292611.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d526rn6l-1586222344798)(media/e0e42d335d5c8a724e3d684fa03c9821.png)]
保存的地图如下
在这里插入图片描述

2.使用hector_slam功能包实现 SLAM 仿真

(1)下载hector_slam

1
sudo apt-get install ros-kinetic-hector-slam

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sjxMXj6n-1586222344802)(media/df000e237b583b526e20dd0402d98261.png)]

(2)配置hector_mapping节点

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2wGZgYvz-1586222344802)(media/60f70e2bbf1ab87d6f93648420c1112e.png)]

(3) 启动hector_slam演示

①运行代码

1
2
3
source devel/setup.bash

roslaunch mbot_gazebo mbot_laser_nav_gazebo.launch

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8UY5YQjq-1586222344802)(media/6dbf197535a01a9149c95662d9531934.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-05s9XPlB-1586222344802)(media/9738cea516150837f6e4c3a2ad0d69c2.png)]

②运行代码

1
2
3
source devel/setup.bash

roslaunch mbot_navigation hector_demo.launch

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p6UPvrm9-1586222344802)(media/4432f7b18cc031c4f2e0a1b25b414331.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iJNAi7Zw-1586222344803)(media/75cc9903e5038685d64bacc266316d23.png)]

③打开键盘控制节点

1
2
3
source devel/setup.bash

roslaunch mbot_teleop mbot_teleop.launch

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BtJCwlkS-1586222344803)(media/e2afaa1e0bf38caf303e802dc5dadbb1.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ghdt03pd-1586222344803)(media/a479cbbcd7907ba5f754b0d5d9b2a28a.png)]

由于机器人的速度加快,发生了打滑现象

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CrpA2z33-1586222344803)(media/09da5774c69d022f8078e293c8c4d4fd.png)]

④保存地图

1
rosrun map_server map_saver -f cloister_gmapping4

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H1E3JmEO-1586222344804)(media/fa40f25df75665877bedb7ad54718bcc.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7FNNudFY-1586222344804)(media/3ae88469b8223a0fd26533206947c4f7.png)]

二. 在第一题建立完成的地图上,实现基于 move_base 和 amcl功能包的机器人自主导航仿真。

1. 导航仿真

1
2
source devel/setup.bash
roslaunch mbot_gazebo mbot_laser_nav_gazebo.launch

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gkZXaKg9-1586222344804)(media/56a35c746de30f598d3fb3cb5f5c0541.png)]

1
2
source devel/setup.bash
roslaunch mbot_navigation nav_cloister_demo.launch

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RWRT2OtO-1586222344804)(media/817da31f172ae2064c47ca4c33a4c35d.png)]

点击2D Naw Goal,使小车自己运动

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jLGai9Qt-1586222344804)(media/6f18ae68a5a7ac94354f8b9c1ad9ccd8.png)]

2. 导航SLAM仿真

运行代码:

1
2
source devel/setup.bash
roslaunch mbot_gazebo mbot_laser_nav_gazebo.launch

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5vhw1uM6-1586222344806)(media/de58e47ad7b0324d24cd72df697ecc1f.png)]

运行代码:

1
2
source devel/setup.bash
roslaunch mbot_navigation exploring_slam_demo.launch

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5M9jIC5Q-1586222344806)(media/7dc8d682db51ac90bd5db4e2d1452589.png)]

点击2D Naw Goal,使小车自己运动

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rtiPTFwD-1586222344806)(media/4fe2b6f29a031956695c603903f3c221.png)]

3. 自主探索SLAM仿真

新建终端运行:

1
2
source devel/setup.bash
roslaunch mbot_gazebo mbot_laser_nav_gazebo.launch

新建终端运行:

1
2
source devel/setup.bash
roslaunch mbot_navigation exploring_slam_demo.launch

新建终端运行:

1
2
source devel/setup.bash
rosrun mbot_navigation exploring_slam.py

小车自己在缓缓运动:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3KJK1rjV-1586222344806)(media/c121f62494b545c9bf1fcaa830da2ec9.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GG3SG2Wr-1586222344806)(media/4476ec1f1250cee46f0bf150a901681b.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UM0U1oLQ-1586222344807)(media/d3884f31a3dc46c5fec3f2d3c14f1e34.png)]

三、分析

在用gmapping中对比,激光雷达和Kinetic,激光雷达的仿真时无死角的360°可以观小车的动向,而Kinetic只能观察到60°左右的范围,而且用激光雷达的仿真比Kinetic的仿真数据更加精确。

用hector_slam仿真时,当小车速度加快是,会出现打滑现象,因此,解决办法:降低小车的移动速度。

基于move_base 和 amcl功能包的机器人自主导航仿真时,成功的对小车自己走且遇到障碍物,会绕行,缺点:移动速度太缓慢。

参考资料:

1) 课件和网上教学视频

2) https://www.jianshu.com/p/fb91063a9fd7,“ROS:基于 gazebo 仿真运行 SLAM
而且用激光雷达的仿真比Kinetic的仿真数据更加精确。