8、NAVIGATION , PATH PLANNING AND SLAM (导航,路径规划,同步定位与建图)
既步我们已经介绍了如何控制差动驱动机器人的基础知识,我们就可以尝试使用ROS中更强大的功能之一了。 即同步定位与建图或SLAM。
Now that we have covered the basics of how to control a differential drive robot, we are ready to try one of the more powerful features in ROS; namely, Simultaneous Localization and Mapping or SLAM.
具有SLAM功能的机器人可以构建未知环境的地图,同步将自己定位在该地图中。 直到最近,做可靠的SLAM的唯一方法是使用价格昂贵的激光扫描仪来收集数据。 随着Microsoft Kinect和Asus Xtion相机的出现,现在可以通过使用相机的3D点云来生成“伪造”激光扫描,从而进行更实惠的SLAM。 (有关两种方法,请参见depthimage_to_laserscan和kinect_2d_scanner软件包。)TurtleBot已配置为可以立即执行此操作。 如果您拥有TurtleBot,则可能要直接跳到ROS Wiki上的TurtleBot SLAM教程。
A SLAM-capable robot can build a map of an unknown environment while simultaneously locating itself in that map. Until recently, about the only way to do reliable SLAM was to use a fairly expensive laser scanner to collect the data. With the arrival of the Microsoft Kinect and Asus Xtion cameras, one can now do more affordable SLAM by using the 3D point cloud from the camera to generate a “fake” laser scan. (See the depthimage_to_laserscan and kinect_2d_scanner packages for two ways to do this.) The TurtleBot is configured to do this out of the box. If you own a TurtleBot, you might want to skip directly to the TurtleBot SLAM tutorial on the ROS Wiki.
另一个价格合理的SLAM机器人是Neato XV-11真空吸尘器,其中包括360度激光扫描仪。 实际上,借助Michael Ferguson的neato_robot ROS堆栈,您可以使用XV-11运行完整的导航堆栈。
Another affordable SLAM robot is the Neato XV-11 vacuum cleaner which includes a 360-degree laser scanner. In fact, you can run the complete Navigation Stack using the XV-11 thanks to the neato_robot ROS stack by Michael Ferguson.
在本章中,我们将介绍构成导航堆栈核心的三个基本ROS软件包:
In this chapter, we will cover the three essential ROS packages that make up the core of the Navigation Stack:
- move_base for moving the robot to a goal pose within a given reference frame (move_base用于在给定坐标系内将机器人移动到目标地点)
- gmapping for creating a map from laser scan data (or simulated laser data from a depth camera) (gmapping用于根据激光扫描数据(或深度相机的模拟激光数据)创建地图)
- amcl for localization using an existing map (amcl用于使用现有地图进行本地化)
完成后,我们将能够命令机器人去到地图上的任何位置或一系列位置,同时避免障碍。 在继续之前,强烈建议读者阅读ROS Wiki上的“导航机器人设置”教程。 本教程很好地概述了ROS导航堆栈。 为了获得更好的理解,请查看所有导航教程。 要获得关于SLAM的数学基础的出色介绍,请查看Sebastian Thrun关于Udacity的在线人工智能课程。
When we are finished, we will be able to command the robot to go to any location or series of locations within the map, all while avoiding obstacles. Before going further, it is highly recommended that the reader check out the Navigation Robot Setup tutorial on the ROS Wiki. This tutorial provides an excellent overview of the ROS navigation stack. For an even better understanding, check out all of the Navigation Tutorials. And for a superb introduction to the mathematics underlying SLAM, check out Sebastian Thrun’s online Artificial Intelligence course on Udacity.