教程二:breezyslam 如何开始使用?
问题:
同时定位和制图描述了可以看到其周围环境但不知道其位置的机器人的机器人技术问题,其任务是发现自身(定位)并记住有关其先前占用区域的信息(建图mapping)。
通用解决方案:
对于机器人,此问题的解决方案采用SLAM算法的形式,该算法使用机器人收集的数据,并尝试将新数据与以前收集的数据进行匹配。先前收集的数据充当固定地图,而新数据相对于旧地图的物理位移就是机器人变化的位置。
大多数SLAM算法 使用里程计数据。里程是通过您的机器人的车轮收集的信息(左右轮子旋转了多少),以帮助其解析运动的位置(x,y坐标表示)。然后,LIDAR数据会完善此预估,使其更加准确。
具体解决方案:
有很多SLAM算法,在我们的搜索中,我们遇到了openslam.org和BreezySLAM,对于那些有兴趣学习该主题的人来说,这两个都是不错的资源。我们之所以选择BreezySLAM,是因为 开始和深入使用它是多么容易。
为了使BreezySLAM工作,您需要一个LIDAR传感器。我们正在使用RoboPeak LIDAR单元,这是一款基于Neato机器人技术平台的低成本传感器。北洋传感器在该领域也很受欢迎。为了与Arduino接口,您的传感器需要输出串行数据,最好是逐点数据包,而Arduino需要一种将此信息发送到计算机的方式(我们使用XBee无线电作为无线串行连接)。
如果计划将测距数据与LIDAR数据结合使用,则机器人上至少需要一个* 轴编码器。您的机器人也将需要将此数据传输到基站。我们将编码器数据与LIDAR扫描数据一起发送,以确保它们同步。
*在几乎所有的移动机器人系统中,强烈建议在机器人的每一侧使用一个编码器(总共两个),因为它们通常具有两个自由度,这意味着两个非冗余传感器可以完全确定机器人的位置。如果您使用的是具有全向驱动功能的硬件平台,则将需要三个编码器,并且还需要修改BreezySLAM库,因为它不支持此硬件配置。
软体:
BreezySLAM可以在Python或C ++中工作,处理时间相近,这要归功于它们对Python版本的C扩展。我们选择Python是因为我们想通过基站计算机完成所有工作,而Arduino却没有足够的处理能力来运行该软件。BreezySLAM软件包可以从他们的网站(或从我们的GitHub页面的库)下载,并且按照其网站上的说明进行python安装非常容易(或从其“ python”文件夹中进行sudo python setup.py安装)。请注意,BreezySLAM正在持续开发中,因此请访问其网站以获取最新版本!我们将在GitHub中记录所做的更改。
程序包的文档很好地解释了库的各个部分的功能,尽管对于将库集成到代码中没有多大帮助。他们在其网站主页上以及示例文件夹中名为log2pgm.py 的文件中都有示例代码。
图书馆使用情况:
库中有一个名为update 的函数,可以完成所有繁重的工作。每次进行新的LIDAR扫描时都会调用该函数,并将该扫描和所有测距传递给该函数。扫描数据采用距离矢量的格式(角度数据通过矢量中距离的索引存储,此库中存在不便之处)。里程表数据作为时间戳,左轮值和右轮值的向量传递。有关详细信息,请继续阅读。
是的,但是我实际上该怎么办???
我们花了一些时间弄清楚如何使用BreezySLAM,最终将功能正常的log2pgm.py 文件改编为我们的代码。为了使您更轻松,我们建议您检查项目代码以了解我们如何在Python中使用它。这是我们制作的一些图形,用来表示我们的代码在运行BreezySLAM方面的作用:
初始化BreezySLAM: