建立机器人的Footprint

在本指南中,我们将讨论如何为Nav2使用的导航算法配置机器人的Footprint。我们还将在 sam_bot 上展示一个示例Footprint配置,这是我们在这一系列安装指南中构建的模拟机器人。最后,我们还将展示 sam_bot 在RViz中Footprint的可视化,以确保我们已经正确设置了它。 [校准@songhuangong]

Footprint介绍 [校准@songhuangong]

当投影到地面时,footprint 勾勒出机器人的 2D 形状 ,Nav2 主要使用它来避免规划期间的碰撞。此任务中涉及的算法确保机器人在计算机器人的路径或规划时不会与代价地图中的障碍物发生碰撞。 [校准@songhuangong]

使用全局和局部代价地图的 footprintrobot_radius 参数设置 footprint ,这在之前的教程中处理过了。 (Setting Up Sensors Guide). footprint 参数中定义的值是二维点的有序向量,定义了以``base_link`` 框架为原点的机器人足迹。向量中的第一个和最后一个点连接到最后一个线段以闭合足迹的形状。 作为替代方案,您也可以使用“robot_radius”参数,其中自动生成圆形足迹并以 base_link 为中心。 如果在配置中定义了 footprint``和  ``robot_radius 参数,则使以 footprint 为准。 [校准@songhuangong]

参见

上一个指南中的一节,Configuring nav2_costmap_2d,解释了如何配置基本的costmap 参数。 有关 costmap 配置的更多详细信息,请参阅该指南。 [校准@songhuangong]

对于全局代价地图footprint,在 robot_radius (圆形) 或 footprint (多边形)参数之间进行的选择,取决于机器人、机器人的环境以及和您使用的路径规划算法。即使您使用的是非圆形机器人,在某些情况下,圆形足迹是可以接受的。 例如,像 NavFn 这样的路径规划算法假设机器人是圆形的,因为它只检查每个网格单元的碰撞,所以它 无需为其足迹勾勒出机器人的确切形状。 另一方面,诸如 Smac Planner's Hybrid-A* 等算法对机器人的多边形足迹进行碰撞检查 如果可能和必要的话。 因此,使用多边形的足迹可能很有用。 另一个例子是一个小型遥控车大小的机器人在仓库中漫游。 这个机器人非常小,不需要进行受限的操作——因此用最大的横截面半径来近似它,是一个很好优化以节省时间。 [校准@songhuangong]

对于本地costmap footprint,非圆形机器人通常设置为``footprint`` (多边形)。 不建议这样做的一些情况是,当您没有足够的计算资源在多边形足迹上实现碰撞避免算法时。 对局部costmap 使用``robot_radius``(圆形)的另一个可能原因是当机器人相对于其环境非常小时,因此不需要精确的避免碰撞。 但是,通常局部轨迹规划器应该使用机器人的实际足迹多边形。 [校准@songhuangong]

配置机器人的Footprint [校准@songhuangong]

在本节中,我们将配置``sam_bot``的足迹,使得 footprint (多边形)用于局部成本图,robot_radius``(圆形)用于全局成本图。我们将使用 Nav2 的默认配置文件,并修改其中局部和全局代价地图的 ``footprint 参数。 [校准@songhuangong]

备注

sam_bot 的完整源代码可以在 navigation2_tutorials 存储库中找到。 [校准@songhuangong]

在 config 目录下,创建一个名为 nav2_params.yaml 的新文件。 接下来,复制 config/nav2_params.yaml 的内容并将它们粘贴到新创建的文件中。 config/nav2_params.yaml 的内容是从Nav2的默认配置文件中复制的,但有一些修改 在 footprintrobot_radius 参数中,用来匹配 sam_bot 的形状。 [校准@songhuangong]

下面是来自 nav2_params.yaml 的代码片段,用于定义本地成本图足迹。 在这个配置文件中,本地成本图的 footprint 参数已经设置了一个矩形的足迹。 此框位于 sam_botbase_link 框架的中心。 [校准@songhuangong]

188resolution: 0.05
189footprint: "[ [0.21, 0.195], [0.21, -0.195], [-0.21, -0.195], [-0.21, 0.195] ]"
190plugins: ["voxel_layer", "inflation_layer"]

对于全局成本图,我们已经设置了 robot_radius 参数来创建一个与 sam_bot 大小相匹配并以 base_link 为中心的圆形足迹。 修改的参数显示在下面的代码片段中。 [校准@songhuangong]

232use_sim_time: True
233robot_radius: 0.3
234resolution: 0.05

构建、运行和验证

我们现在将确认我们已经正确设置了 sam_bot 的Footprint。 [校准@songhuangong]

首先,我们启动`launch/display.launch.py https://github.com/ros-planning/navigation2_tutorials/blob/master/sam_bot_description/launch/display.launch.py 启动机器人状态发布者, 在 Gazebo 中生成``sam_bot``,并在 Rviz 中可视化 sam_bot 及其足迹。 机器人状态发布者发布 sam_bot 的 URDF 中定义的 base_link => sensors 转换,而 Gazebo 的差分驱动插件发布 odom => base_link 转换。 打开一个新终端并执行以下行。 [校准@songhuangong]

colcon build
. install/setup.bash
ros2 launch sam_bot_description display.launch.py

启动 display.launch.py 后,RViz 和 Gazebo 应该会被打开。 RViz 应该正确显示 sam_botsam_bot 部分的框架以及 odom 框架。 Gazebo 应该显示 sam_bot, 以及一个球体和一个立方体,可以被 sambot 的激光雷达传感器检测到。 [校准@songhuangong]

接下来,我们将使用 static_transform_publisher 发布 map => odom 变换。 我们在本指南中将 map => odom 转换作为静态发布,作为发布转换和可视化足迹的简单方法。 打开一个新终端并执行以下行。 [校准@songhuangong]

ros2 run tf2_ros static_transform_publisher 0 0 0 0 0 0 map odom

map => odom 转换现在应该被发布,并且 map 框架应该被正确的添加到 RViz 中。 [校准@songhuangong]

最后,我们将使用刚刚创建的 nav2_params.yaml 配置文件和 nav2_bringup 的内置启动文件 navigation_launch.py 启动 Nav2。 打开一个新终端并执行以下命令: [校准@songhuangong]

ros2 launch nav2_bringup navigation_launch.py params_file:=<full/path/to/config/nav2_params.yaml>

我们现在应该能够可视化 RViz 中的足迹,这将在下一节中讨论。 [校准@songhuangong]

在 RViz 可视化Footprint [校准@songhuangong]

要可视化本地成代价地图的Footprint,请单击 RViz 窗口左下角的添加按钮。 在 By topic 选项卡下,选择 /local_costmap/published_footprint 主题下的 Polygon ,如下图所示。 [校准@songhuangong]

../../_images/add_topic_local_costmap.png

将 RViz 中的固定框架设置为 odom,您应该会看到 sam_bot 的矩形足迹: [校准@songhuangong]

../../_images/polygon_footprint.png

另一方面,对于全局成本图,单击 RViz 窗口左下角的添加按钮。 转到 By topic 选项卡,然后选择``/global_costmap/published_footprint``主题下的``Polygon`` ,如下所示。 [校准@songhuangong]

../../_images/add_topic_global_costmap.png

将 RViz 中的固定框架设置为 map ,您应该会看到 sam_bot 的圆形足迹: [校准@songhuangong]

../../_images/circular_footprint.png

小结 [校准@songhuangong]

在本指南中,我们展示了如何为您的机器人配置圆形和多边形的Footprint。 这个足迹很重要,因为它在 Nav2 的路径规划算法功能中起着重要作用。 [校准@songhuangong]

作为演示,我们已经配置了 sam_bot 的代价地图Footprint参数。 我们将局部代价地图设置为使用遵循 sam_bot 形状的多边形足迹,而我们将全局代价地图设置为使用圆形足迹。 最后,我们在 RViz 中可视化并确认了本地和全局代价地图的足迹。 [校准@songhuangong]