Skip to content

SWAGGER 路线图生成

本教程介绍如何使用 NVIDIA 的 SWAGGER 为 Nav2 路线服务器生成路线图(graph)。

请按照 https://github.com/nvidia-isaac/SWAGGER/ 的 README 中的安装说明安装 SWAGGER。

第一步是从地图的栅格图像生成 SWAGGER 图。运行 scripts 目录下的 generate_graph.py 脚本即可完成。 脚本会输出两个文件:graph.gml(图结构)和 graph.png(将图叠加在栅格图像上的可视化结果)。

python scripts/generate_graph.py \
--map-path <path_to_map.png> \
--resolution <meters_per_pixel> \
--safety-distance <meters> \
--output-dir <output_directory>

分辨率应与生成栅格地图时 SLAM 会话所使用的值保持一致。 安全距离(safety distance)指生成图时与任意障碍物之间保持的最小距离。 运行完成后,输出结果应类似于下图:

waypoint_graph

该过程包含以下步骤:

  • 将栅格图像与安全距离做卷积,生成安全掩码(safety mask)。
  • 对安全掩码进行骨架化(skeletonizing),得到地图骨架。
  • 在卷积后的障碍物周围添加边界节点。
  • 在地图中心区域放置节点以填充空间。
  • 将骨架节点、中心节点和边界节点连接成边,并裁剪掉无价值的边。

要在 Nav2 Route Server 中使用此图,需要将其转换为 Route Server 可识别的格式。SWAGGER 图格式为 GML 文件,Nav2 Route 无法直接读取。 与其为 Route Server 新增一个专用的解析插件,不如使用转换脚本将 GML 文件转为 GeoJSON 格式。 该脚本位于 SWAGGER 的 integrations/nav2/tools 目录中,运行方式如下:

python integrations/nav2/tools/gml_to_geojson.py <path_to_graph.gml>

输出文件 graph.geojson 将与输入 GML 文件位于同一目录。 转换过程会将图的关键信息写入 GeoJSON,并确保每条边都是双向的,以满足导航需求。

至此,该文件已可直接供 Nav2 Route Server 使用。 通过 nav2_bringup 的 graph CLI 参数将其传入应用即可,也可在自定义启动文件或 Nav2 配置文件中指定路径。

为了演示,这里使用 SWAGGER 提供的大型仓库(Large Warehouse)地图, 该地图位于 SWAGGER 仓库的 maps 目录中。 运行以下命令生成图并转换为 GeoJSON:

python scripts/generate_graph.py \
--map-path maps/large_warehouse.png \
--resolution 0.05 \
--safety-distance 0.2 \
--output-dir graphs
python integrations/nav2/tools/gml_to_geojson.py graphs/graph.gml

然后,为地图创建 large_warehouse.yaml 文件,以便地图服务器加载:

image: large_warehouse.png
mode: trinary
resolution: 0.05
origin: [0.0, 0.0, 0]
negate: 0
occupied_thresh: 0.65
free_thresh: 0.25

在 Nav2 参数中更新 BT Navigator 的参数,为本演示指定基于图的导航器:

bt_navigator:
...
default_nav_to_pose_bt_xml: $(find-pkg-share nav2_bt_navigator)/behavior_trees/navigate_on_route_graph_w_recovery.xml
...

最后,启动 Nav2 的 Loopback 仿真。该仿真使用简单的后端运动学仿真器,适合研发和高级测试,无需为此地图单独搭建 Gazebo 或 Isaac Sim 仿真环境:

ros2 launch nav2_bringup tb4_loopback_simulation_launch.py map:=/path/to/your/map.yaml graph:=/path/to/your/graph.geojson

祝路线规划顺利!