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

1)在gazebo中构建一个用于建图和导航的虚拟环境,可以使用Building Editor工具创建,也可以使用其他功能包中已有的虚拟环境;将前面作业完成的带传感器的移动机器人(小车)模型放置到虚拟环境中,使用gmapping 和 hector_slam功能包实现SLAM仿真,并将简历完成的地图保存到功能包的maps文件夹中,随作业一同提交。
① 首先使用gmapping将要执行的launch文件中内容修改成自己建立的虚拟环境
ROS机器人SLAM学习:Gazebo定位与导航自主仿真_第1张图片
② 然后就可以执行教材上的命令,之后在gazebo就出现了自己的虚拟环境和rviz上的地图
ROS机器人SLAM学习:Gazebo定位与导航自主仿真_第2张图片
③ 执行移动命令后可以对机器人进行控制,绕地图一周,配置好地图。大概的地图情况如下图
ROS机器人SLAM学习:Gazebo定位与导航自主仿真_第3张图片
④ 然后保存地图,最开始我的虚拟机里没有map_server,所以出现了找不到这个包的情况
ROS机器人SLAM学习:Gazebo定位与导航自主仿真_第4张图片
⑤ 然后我就通过以下命令下载了map_server
ROS机器人SLAM学习:Gazebo定位与导航自主仿真_第5张图片
⑥ 下载成功后就可以运行保存地图的命令了
ROS机器人SLAM学习:Gazebo定位与导航自主仿真_第6张图片
⑦ 完成后会有两个文件保存在根目录下,分别是yaml文件和pgm文件
ROS机器人SLAM学习:Gazebo定位与导航自主仿真_第7张图片
⑧ 可以看到pgm是形成的地图,而yaml是一些参数

ROS机器人SLAM学习:Gazebo定位与导航自主仿真_第8张图片
ROS机器人SLAM学习:Gazebo定位与导航自主仿真_第9张图片
我们可以通过画图软件来对pgm进行操作,比如在某个地方加上黑线,实际上就是在虚拟环境中加上一堵墙,这里就不展示了。
我们再用 hector_slam功能包来制作地图
1.首先下载hector_slam功能包
ROS机器人SLAM学习:Gazebo定位与导航自主仿真_第10张图片
2.然后打开gazebo
ROS机器人SLAM学习:Gazebo定位与导航自主仿真_第11张图片
ROS机器人SLAM学习:Gazebo定位与导航自主仿真_第12张图片
3.再打开rviz通过hector_slam构建地图
ROS机器人SLAM学习:Gazebo定位与导航自主仿真_第13张图片
4.启动控制机器人移动的程序开始控制机器人
ROS机器人SLAM学习:Gazebo定位与导航自主仿真_第14张图片
5.可以看到因为我控制机器人的速度快,然后还有多处旋转,所以得到的地图和本身的有很大差异
ROS机器人SLAM学习:Gazebo定位与导航自主仿真_第15张图片
但是还是同样的保存下来
ROS机器人SLAM学习:Gazebo定位与导航自主仿真_第16张图片
6.同样在根目录可以看到yaml和pgm文件
ROS机器人SLAM学习:Gazebo定位与导航自主仿真_第17张图片
7.查看这两个文件内容
ROS机器人SLAM学习:Gazebo定位与导航自主仿真_第18张图片
2)在第一题建立完成的地图上,实现基于move_base和amcl功能包的机器人自主导航仿真。
① 首先下载move_base包
ROS机器人SLAM学习:Gazebo定位与导航自主仿真_第19张图片
② 下载完成后可以进行导航仿真,打开上一题创建好的地图,在打开之前需要修改一些内容,修改mbot_laser_nav_gazebo.launch中的一个内容,把如图的地方修改成自己保存的yaml文件。
在修改之前要记得把之前保存的yaml文件和pgm文件转到mbot_navigation文件夹下的maps文件夹,否则修改之后会报错。

ROS机器人SLAM学习:Gazebo定位与导航自主仿真_第20张图片
ROS机器人SLAM学习:Gazebo定位与导航自主仿真_第21张图片
③ 然后就打开这个launch文件
ROS机器人SLAM学习:Gazebo定位与导航自主仿真_第22张图片
④ 这里我们可以点击rviz的2d new goal来让机器人移动

ROS机器人SLAM学习:Gazebo定位与导航自主仿真_第23张图片
ROS机器人SLAM学习:Gazebo定位与导航自主仿真_第24张图片
⑤ 下面开始实现机器人的自主导航仿真
因为我之前建立的模型有两个封闭环境,还有一个门,在执行py文件的时候选择的点有时候会很难到达,所以我重新建立了一个模型来实现自主导航仿真,建议刚开始不要用很复杂的环境。
ROS机器人SLAM学习:Gazebo定位与导航自主仿真_第25张图片
然后同样的把mbot_laser_nav_gazebo.launch文件的world改为新创建的world名字,
ROS机器人SLAM学习:Gazebo定位与导航自主仿真_第26张图片
⑥ 然后打开rviz

ROS机器人SLAM学习:Gazebo定位与导航自主仿真_第27张图片
ROS机器人SLAM学习:Gazebo定位与导航自主仿真_第28张图片
⑦ 最后打开可以控制机器人移动的py文件
ROS机器人SLAM学习:Gazebo定位与导航自主仿真_第29张图片
⑧ 可以看到rviz上机器人开始根据py文件的数据前往一个个点
ROS机器人SLAM学习:Gazebo定位与导航自主仿真_第30张图片
最后形成一个比较完整的地图
ROS机器人SLAM学习:Gazebo定位与导航自主仿真_第31张图片
⑨ 然后保存地图
ROS机器人SLAM学习:Gazebo定位与导航自主仿真_第32张图片
⑩ 同样在根目录下可以看到两个文件
ROS机器人SLAM学习:Gazebo定位与导航自主仿真_第33张图片
⑪ 然后查看这两个文件
ROS机器人SLAM学习:Gazebo定位与导航自主仿真_第34张图片
ROS机器人SLAM学习:Gazebo定位与导航自主仿真_第35张图片
可以看到自主导航的结果和我们之前自己操作的结果差不多。
在用hector_slam功能包来构建地图的时候,因为机器人的速度比较快,然后还在移动的同时多处旋转,所以造成地图有很大的差异,所以我个人认为还是gmapping比较好。然后在自主导航仿真这一部分,我发现程序在设置点,机器人前往这些点的路线是最优路线。并没有考虑障碍物,然后在行进的过程中发现有障碍物,会反应一段时间再进行改变,然后最开始因为我构建的模型是两个封闭环境,内部的那个封闭环境有门可以进出,最开始机器人是在内部的环境中,然后程序设置的第一个点在两个封闭环境的过道中的话,机器人就找不到那个门出去,就一直卡在哪里。 所以我建议最开始的时候还是建立一个简单的模型会有利于实验的进行。

你可能感兴趣的:(ROS)