运动规划与RRT算法,第2部分:移动机器人的RRT算法
从系列中:运动规划实践使用RRT算法
观看这篇关于实现快速探索随机树(RRT)算法的实践教程,通过已知地图为移动机器人规划路径。了解如何使用自定义状态空间和运动模型调整计划器。
在MATLAB中使用参考示例逐步说明®和导航工具箱™,了解如何导入办公环境占用网格、定义状态空间和规划路径。
了解如何根据应用程序需求自定义运动模型,并根据运行时间和节点数量等参数比较各种路径规划结果。
在本视频中,我们将看到如何播放一个移动机器人的无障碍部件,即RRT算法,使用MATLAB中的参考示例和导航工具箱。这是我在这里使用的MATLAB 2020 B版本,你必须安装导航工具箱才能运行我们将要使用的示例。让我们先看看如何打开示例。一种方法是在命令窗口中输入dock nav,其中nav是导航工具箱的缩写形式。这将把我们带到导航工具箱文档页或帮助页,在那里您可以找到所有可用的规划算法函数的描述。
我们来看看运动规划的例子。所以我们可以直接打开现场脚本。这将自动将该部分更改为存储此示例的文件夹。以及运行此示例所需的helper函数和映射文件。让我们从加载办公环境的占用图开始。load函数将映射文件加载到占用映射中。我们可以看到占用地图加载了不同的参数,如世界限制,网格大小和分辨率。show函数使地图可视化。接下来我们以xy和的形式给出开始和目标状态。这应该是一个位于占用图中的值。
现在,我们在地图上画出起点和目标,我们也在用起点和目标状态来画出机器人的方向。现在我们已经有了明确目标和标题的地图。接下来我们将使用状态空间杜宾对象来定义状态空间。它将占用图的边界作为输入,以了解应该在其中对状态进行采样的边界限制。由于状态空间还需要在哪里采样下一个状态的信息,这意味着连续的状态应该有多远,我们需要提供机器人的转弯半径作为状态空间的参数。转弯半径取决于我们使用的机器人。这里我们设置最小转弯半径为0.4米。
现在我们可以创建一个状态验证器。因此,经过验证的占用地图对象,我们可以通过指定状态空间SS来创建这个对象,然后我们可以将map属性设置为加载的占用地图对象或网格。我们需要一个度量来测量状态空间中每个状态之间的距离,以检查碰撞。让我们设置一个0.05米的验证距离。这个距离区分路径连接,并检查地图上每0.05米间隔的障碍物。现在我们要创建路径规划器并为规划器设置参数。
我们可以设置最大连接距离,这是树中允许的最大运动长度。最大连接距离越小,采样和相互连接的状态数就越多。现在设为S2。如果我们不为S2设置任何值,规划师将假设默认值。我们还需要设置采样状态的最大迭代次数。如果我们把它说成一个较低的数字,计划者可以在探索整个空间之前停止,最终无法达到目标。目标达到函数现在是一个回调函数,它告诉计划器它是否达到了目标。这也是一个内置参数,但我们也可以根据需要自定义它。因此,这里我们使用一个helper函数对其进行定制,以检查可行部分是否在设定的阈值0.1内达到目标。
现在我们使用plan函数,它将planner对象作为起点和目标点的输入。然后返回输出。第一个输出是恢复所有机器人状态的对象
目标状态。它存储在nav but对象中。我们可以到path对象变量,看到所有的状态。第二个输出包括解决方案信息,例如用于查找部件或迭代次数的节点数量和树数据。树数据对于绘制树非常有用,该对象在下一节中用于绘制路径。因此,现在我们使用规划师输出的可用信息绘制占用地图的结果。为了以统一的方式显示路径,我们可以对路径进行插值。所以我们在这里。我们有一个从开始到目标的树和计划板的结果地图,我们还可以看到经过的时间。
现在让我们改变一些参数,看看这是如何改变部分和解决方案的信息。你可以试着改变最大连接距离,让我们把它减少2.5。我们会注意到树现在更密集了,因为有更多的节点被探索,我们可以看到迭代的次数也增加了。这也导致了运行时间的增加。现在,如果你想知道如果我必须比较两种计划的结果,如RRT和RRT*。我需要从头开始实现它吗?答案是否定的。如果它是一个可以在相同的基础设施中使用状态空间和状态验证器实现的计划器。例如,您可以用already RRT*替换planner RRT,并且可以立即看到结果。
对于使用不同参数的规划器,您还必须指定这些参数。但是总体的想法是一样的。现在让我们看看示例的定制部分。到目前为止,我们将建筑舞台空间用于houben的运动,都柏林的运动是一个左右直线的汽车运动。但如果你的机器人只能左转呢?我们可以为杜宾的运动定制建筑舞台空间,使之成为一个单向的状态空间。为此,我们有一个示例helper函数来演示如何做到这一点。
由于内置状态空间只接受边界作为输入,因此我们定义了从基于状态的Dubin类继承来的类的构造函数。我们可以添加另一个输入参数。此输入参数仅限于根据布尔属性向左或向右转动方向。如果属性go left被设置为true, Triton的部分将被禁用,机器人将只向左转弯。如果go left属性设置为false,机器人只会向右转。
该过程的其余部分与我们上面看到的相同。让我们运行一下,看看有什么不同。我们可以看到树的密度更大了,因为我们现在需要找到只有左转的路径,这需要更多的采样和更多的迭代次数。这使得这种类型的规划花费的时间更长。任何此类计划的执行时间都可以通过优化技术进一步改善。
最后,我们可以总结我们解决的不同测试用例的结果。正如我前面提到的,RRT*在连接距离较小(值为0.5)时性能最好。当我们将状态空间限制为仅左转时,执行时间和探索的节点数量都会增加。这就是我们定制杜宾状态空间时的情况。最大连接距离值为2的RRT性能也很好。但是当我们将最大连接距离的值减小到0.5时,节点的时间和数量都会增加。
这就是如何用MATLAB和导航工具箱快速实现和总结规划算法的结果。我们在MATLAB中看到的相同示例可以使用MATLAB编码器部署到真实的机器人上。还可以从MATLAB代码中使用Ross工具箱生成Ross节点。这个视频展示了一个用MATLAB构建的交互式应用程序,它可以从机器人获取激光雷达数据。并建立一个环境地图。然后我们可以用我们的算法来规划一条路径
环境。我们进一步看到机器人是如何本地化的,它遵循路径到达目的地目标,以交付这本书。
最后,我想感谢大家观看这节课,我们讲了一些运动规划算法的概念,以及如何使用MATLAB和导航工具箱来实现它们。在会议的下一部分,YJ将带领我们通过我们的RRT运动规划机器人操纵器的例子。
下载代码和文件
了解更多
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。