docs: 修正 Windows 输入说明并完善验收检查
Moon PathPlanning is a reusable MoonBit path planning library for grid search, graph primitives, examples, tests, CLI demos, SVG output, and HTML output.
项目面向机器人路径规划、游戏地图寻路、网格导航、算法教学和确定性仿真。初版先 交付二维网格地图、统一结果模型和可审查的经典搜索算法,为后续增量规划和采样规划 保留可复用边界。
本项目参考 zhm-real/PathPlanning 的路径规划主题、算法思想和案例方向。参考项目 采用 MIT License;本仓库同样使用 MIT License,并在 MoonBit 原生包结构中重新组织 数据模型、测试、Planner 和可视化能力,不直接照搬 Python 脚本式实现。 完整上游来源、许可证和参考范围说明见 docs/upstream.md。
zhm-real/PathPlanning
docs/upstream.md
Point
Coord
PathResult
GridMap
WeightedGraph
start -> waypoint -> goal
g/rhs/key
初步工程已包含源码、测试文件、示例地图、文档、CI 和 benchmark 说明,并已按论文方向 开始补充区域搜索、swarm 基础模块、连续几何与基础 RRT/RRT-Connect/RRT* 采样规划模块和动态避障模块,其中 PSO/RS-APSO 已能在区域候选点中 搜索中间路点并用 A 星拼接可行路径。JSON v1 当前提供 schema、示例地图、序列化和 字符串解析入口。CLI v1 支持内置 demo 地图、--json 字符串输入、--example 跨后端示例名输入,也支持 native 后端读取 JSON 地图文件; bench runner 已固定两个 20x20 RS-APSO 场景和三个动态避障场景,并以 5 次重复输出 经典搜索、LPA*/D* Lite 阶段入口、PSO/RS-APSO、RS-APSO 参数变体、RRT/RRT-Connect/RRT* 的 CSV 指标、耗时统计和连续动态行安全指标;runner 也支持 --json 字符串输入和 --example 示例名输入,native 后端还可读取 JSON v1 地图文件运行同格式 benchmark。 增量规划边界请按阶段能力理解:当前 LPA*/D* Lite 会在地图变化后重新生成一致的搜索状态,用于保留 API 和测试变化单元记录;增量状态复用仍在后续路线中。
--json
--example
bench
先安装 MoonBit 工具链,再在仓库根目录执行:
通用命令:
moon check moon test moon run cli moon run cli -- --example weighted_grid moon run cli --target native -- examples/simple_grid.json moon run cli --target native -- --example weighted_grid --html weighted_grid.html moon run ./bench moon run ./bench -- --example rs_apso_20x20_simple moon run ./bench --target native -- examples/simple_grid.json
Linux/macOS bash 的 inline JSON 示例:
moon run cli -- --json '{"format":"moon-pathplanning.grid.v1","width":3,"height":3,"start":[0,0],"goal":[2,2],"movement":"four_way","obstacles":[],"terrain":[]}' moon run ./bench -- --json '{"format":"moon-pathplanning.grid.v1","width":3,"height":3,"start":[0,0],"goal":[2,2],"movement":"four_way","obstacles":[],"terrain":[]}'
Windows PowerShell 推荐使用内置示例或 JSON 文件输入:
# 使用内置示例 moon run cli -- --example weighted_grid moon run ./bench -- --example rs_apso_20x20_simple # 使用 JSON 文件,需要 native 后端 moon run cli --target native -- --map examples/weighted_grid.json moon run ./bench --target native -- --map examples/weighted_grid.json
当前 CLI 会运行内置 A 星示例并打印路径节点数、总代价、访问节点数和展开节点数。 Bash 中的字符串型 JSON 输入使用 --json/-j,不依赖文件读取。Windows PowerShell 下建议使用 --example 或 --map 输入;当前 MoonBit runner 在部分 Windows PowerShell 环境中传递 inline JSON 参数时可能处理其中的双引号,因此本项目不把 PowerShell inline JSON 作为已验证的推荐用法。 嵌入式示例地图使用 --example/-e,当前支持 simple_grid、weighted_grid、rs_apso_20x20_simple 和 rs_apso_20x20_complex,适合默认后端下复用示例内容。 文件型 JSON 输入需要 native 后端,命令形如 moon run cli --target native -- --map examples/weighted_grid.json。 HTML 可视化导出同样需要 native 后端,命令形如 moon run cli --target native -- --example weighted_grid --html weighted_grid.html,会在打印路径指标后生成包含网格、障碍物、起点、终点和最终路径的自包含 HTML 文件。 benchmark runner 会对 20x20 simple/complex 场景输出 A 星、Dijkstra、PSO、RS-APSO、RS-APSO 参数变体、RRT、RRT-Connect 和 RRT* 的路径长度、平滑度、访问/展开节点数、迭代次数、候选数量或采样树节点数、最终适应度、swarm 或采样参数、 重复次数和总/平均耗时;同时输出 dynamic_5x1、dynamic_10x10_crossing 和 dynamic_12x12_mixed 下静态 A 星基线、 整数速度动态修正、边界往复修正、连续安全感知修正和连续等待修正的同格式 CSV 行,并为连续动态行记录 safety_evaluated、continuous_safe 和 min_clearance。文件型 benchmark 输入需要 native 后端,命令形如 moon run ./bench --target native -- --map examples/weighted_grid.json。CI 中的 benchmark 步骤是功能 smoke test,不作为性能基准;当前 runner 尚未提供 --repeats 这类命令行轻量参数。
--json/-j
--map
--example/-e
simple_grid
weighted_grid
rs_apso_20x20_simple
rs_apso_20x20_complex
moon run cli --target native -- --map examples/weighted_grid.json
moon run cli --target native -- --example weighted_grid --html weighted_grid.html
dynamic_5x1
dynamic_10x10_crossing
dynamic_12x12_mixed
safety_evaluated
continuous_safe
min_clearance
moon run ./bench --target native -- --map examples/weighted_grid.json
--repeats
examples/simple_grid.json 与 examples/weighted_grid.json 使用 moon-pathplanning.grid.v1 schema;examples/rs_apso_20x20_simple.json 与 examples/rs_apso_20x20_complex.json 固定 20x20 RS-APSO benchmark 输入:
examples/simple_grid.json
examples/weighted_grid.json
moon-pathplanning.grid.v1
examples/rs_apso_20x20_simple.json
examples/rs_apso_20x20_complex.json
{ "format": "moon-pathplanning.grid.v1", "width": 6, "height": 5, "start": [0, 0], "goal": [5, 4], "movement": "four_way", "obstacles": [[1, 1], [1, 2]], "terrain": [{"point": [3, 2], "cost": 4.0}] }
let map = @grid.new_grid(5, 5, @core.point(0, 0), @core.point(4, 4)) .with_obstacles([@core.point(2, 1), @core.point(2, 2)]) let result = @planner.plan(map, @planner.AStar, @planner.default_options())
直接算法调用适合教学,Planner 适合统一业务入口。PathResult 包含路径、总代价、 访问节点数、展开节点数、状态和错误字段;更多说明见 docs/api.md。
docs/api.md
MoonBit 测试位于 test/,覆盖最短路径、无路径、障碍绕行、权重地图、三类算法 一致性、移动模式、起点等于终点、非法地图输入、JSON 字符串解析、区域搜索、 RS-APSO 基础能力、LPA*/D* Lite 阶段入口、连续几何、基础 RRT/RRT-Connect/RRT* 采样规划和动态避障,包含整数栅格、线段可见性、路径快捷平滑、单树/双树采样绕障、RRT* 邻域择优与重连、固定 seed 复现、RS-APSO 即时停滞逃逸复现、增量重规划变化单元记录、无路返回、边界往复、连续坐标动态障碍物、连续轨迹安全评估、连续碰撞诊断、最小安全间距评估、连续安全感知修正、连续等待修正和混合穿越障碍物场景。 标准检查命令是 moon check 与 moon test。CI 直接使用当前 MoonBit 工具链真实支持的命令: moon fmt --check、moon info、moon check --deny-warn 和 moon test --deny-warn,并运行 CLI、示例、native JSON、HTML 导出和 benchmark smoke test。 当前 CI 通过官方安装脚本获取 MoonBit 稳定工具链;如官方脚本后续提供可靠版本固定参数,可再切换为固定版本。
test/
moon check
moon test
moon fmt --check
moon info
moon check --deny-warn
moon test --deny-warn
src/visualize/svg_exporter.mbt 会导出网格、起点、终点、障碍物和最终路径的 SVG 字符串,也能通过 grid_region_to_svg() 叠加区域搜索候选格和障碍物边界角。调用方可将 字符串写入展示层或示例文件;grid_paths_to_svg() 可叠加多条命名路径,rrt_comparison_to_svg() 可用固定采样参数把 RRT、RRT-Connect 和 RRT* 三条路径绘制到同一张 SVG 中。grid_to_html()、grid_region_to_html()、grid_paths_to_html() 和 rrt_comparison_to_html() 会把对应 SVG 包装为自包含 HTML 文档,便于直接落地成 .html 查看。仓库不提交大量生成图片。 CLI 已支持在 native 后端用 --html/-o <output.html> 直接导出基础路径 HTML。
src/visualize/svg_exporter.mbt
grid_region_to_svg()
grid_paths_to_svg()
rrt_comparison_to_svg()
grid_to_html()
grid_region_to_html()
grid_paths_to_html()
rrt_comparison_to_html()
.html
--html/-o <output.html>
详细设计、迁移说明、RS-APSO 开发准备与路线图见 docs/。
docs/
This project is released under the MIT License. See LICENSE.
LICENSE
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
Moon PathPlanning
Moon PathPlanning is a reusable MoonBit path planning library for grid search, graph primitives, examples, tests, CLI demos, SVG output, and HTML output.
项目简介
项目面向机器人路径规划、游戏地图寻路、网格导航、算法教学和确定性仿真。初版先 交付二维网格地图、统一结果模型和可审查的经典搜索算法,为后续增量规划和采样规划 保留可复用边界。
项目背景与引用
本项目参考
zhm-real/PathPlanning的路径规划主题、算法思想和案例方向。参考项目 采用 MIT License;本仓库同样使用 MIT License,并在 MoonBit 原生包结构中重新组织 数据模型、测试、Planner 和可视化能力,不直接照搬 Python 脚本式实现。 完整上游来源、许可证和参考范围说明见docs/upstream.md。功能列表
Point/Coord、搜索状态、搜索错误和统一PathResult。GridMap、四方向和八方向移动、障碍物、障碍物膨胀、terrain cost 与合法性检查。WeightedGraph加权节点和边接口。实现边界
GridMap、四/八方向移动、禁止八方向穿墙角、terrain cost、图结构、启发函数、BFS、DFS、Dijkstra、A 星、双向 A 星、统一 Planner、JSON v1、CLI、SVG/HTML 导出、benchmark runner 和核心测试。start -> waypoint -> goal可行路径;基础栅格采样 RRT、RRT-Connect 和 RRT* 使用可行走栅格中心、固定 seed 和线段可见性。g/rhs/key状态结构和变化单元记录验证;地图变化后会重新生成一致搜索状态,不等同于复用上一轮 open list 或优先队列的增量状态规划器。当前完成情况
初步工程已包含源码、测试文件、示例地图、文档、CI 和 benchmark 说明,并已按论文方向 开始补充区域搜索、swarm 基础模块、连续几何与基础 RRT/RRT-Connect/RRT* 采样规划模块和动态避障模块,其中 PSO/RS-APSO 已能在区域候选点中 搜索中间路点并用 A 星拼接可行路径。JSON v1 当前提供 schema、示例地图、序列化和 字符串解析入口。CLI v1 支持内置 demo 地图、
--json字符串输入、--example跨后端示例名输入,也支持 native 后端读取 JSON 地图文件;benchrunner 已固定两个 20x20 RS-APSO 场景和三个动态避障场景,并以 5 次重复输出 经典搜索、LPA*/D* Lite 阶段入口、PSO/RS-APSO、RS-APSO 参数变体、RRT/RRT-Connect/RRT* 的 CSV 指标、耗时统计和连续动态行安全指标;runner 也支持--json字符串输入和--example示例名输入,native 后端还可读取 JSON v1 地图文件运行同格式 benchmark。 增量规划边界请按阶段能力理解:当前 LPA*/D* Lite 会在地图变化后重新生成一致的搜索状态,用于保留 API 和测试变化单元记录;增量状态复用仍在后续路线中。快速开始
先安装 MoonBit 工具链,再在仓库根目录执行:
通用命令:
Linux/macOS bash 的 inline JSON 示例:
Windows PowerShell 推荐使用内置示例或 JSON 文件输入:
当前 CLI 会运行内置 A 星示例并打印路径节点数、总代价、访问节点数和展开节点数。 Bash 中的字符串型 JSON 输入使用
--json/-j,不依赖文件读取。Windows PowerShell 下建议使用--example或--map输入;当前 MoonBit runner 在部分 Windows PowerShell 环境中传递 inline JSON 参数时可能处理其中的双引号,因此本项目不把 PowerShell inline JSON 作为已验证的推荐用法。 嵌入式示例地图使用--example/-e,当前支持simple_grid、weighted_grid、rs_apso_20x20_simple和rs_apso_20x20_complex,适合默认后端下复用示例内容。 文件型 JSON 输入需要 native 后端,命令形如moon run cli --target native -- --map examples/weighted_grid.json。 HTML 可视化导出同样需要 native 后端,命令形如moon run cli --target native -- --example weighted_grid --html weighted_grid.html,会在打印路径指标后生成包含网格、障碍物、起点、终点和最终路径的自包含 HTML 文件。 benchmark runner 会对 20x20 simple/complex 场景输出 A 星、Dijkstra、PSO、RS-APSO、RS-APSO 参数变体、RRT、RRT-Connect 和 RRT* 的路径长度、平滑度、访问/展开节点数、迭代次数、候选数量或采样树节点数、最终适应度、swarm 或采样参数、 重复次数和总/平均耗时;同时输出dynamic_5x1、dynamic_10x10_crossing和dynamic_12x12_mixed下静态 A 星基线、 整数速度动态修正、边界往复修正、连续安全感知修正和连续等待修正的同格式 CSV 行,并为连续动态行记录safety_evaluated、continuous_safe和min_clearance。文件型 benchmark 输入需要 native 后端,命令形如moon run ./bench --target native -- --map examples/weighted_grid.json。CI 中的 benchmark 步骤是功能 smoke test,不作为性能基准;当前 runner 尚未提供--repeats这类命令行轻量参数。示例地图格式
examples/simple_grid.json与examples/weighted_grid.json使用moon-pathplanning.grid.v1schema;examples/rs_apso_20x20_simple.json与examples/rs_apso_20x20_complex.json固定 20x20 RS-APSO benchmark 输入:API 示例
直接算法调用适合教学,Planner 适合统一业务入口。
PathResult包含路径、总代价、 访问节点数、展开节点数、状态和错误字段;更多说明见docs/api.md。测试方式
MoonBit 测试位于
test/,覆盖最短路径、无路径、障碍绕行、权重地图、三类算法 一致性、移动模式、起点等于终点、非法地图输入、JSON 字符串解析、区域搜索、 RS-APSO 基础能力、LPA*/D* Lite 阶段入口、连续几何、基础 RRT/RRT-Connect/RRT* 采样规划和动态避障,包含整数栅格、线段可见性、路径快捷平滑、单树/双树采样绕障、RRT* 邻域择优与重连、固定 seed 复现、RS-APSO 即时停滞逃逸复现、增量重规划变化单元记录、无路返回、边界往复、连续坐标动态障碍物、连续轨迹安全评估、连续碰撞诊断、最小安全间距评估、连续安全感知修正、连续等待修正和混合穿越障碍物场景。 标准检查命令是moon check与moon test。CI 直接使用当前 MoonBit 工具链真实支持的命令:moon fmt --check、moon info、moon check --deny-warn和moon test --deny-warn,并运行 CLI、示例、native JSON、HTML 导出和 benchmark smoke test。 当前 CI 通过官方安装脚本获取 MoonBit 稳定工具链;如官方脚本后续提供可靠版本固定参数,可再切换为固定版本。可视化说明
src/visualize/svg_exporter.mbt会导出网格、起点、终点、障碍物和最终路径的 SVG 字符串,也能通过grid_region_to_svg()叠加区域搜索候选格和障碍物边界角。调用方可将 字符串写入展示层或示例文件;grid_paths_to_svg()可叠加多条命名路径,rrt_comparison_to_svg()可用固定采样参数把 RRT、RRT-Connect 和 RRT* 三条路径绘制到同一张 SVG 中。grid_to_html()、grid_region_to_html()、grid_paths_to_html()和rrt_comparison_to_html()会把对应 SVG 包装为自包含 HTML 文档,便于直接落地成.html查看。仓库不提交大量生成图片。 CLI 已支持在 native 后端用--html/-o <output.html>直接导出基础路径 HTML。开发路线
详细设计、迁移说明、RS-APSO 开发准备与路线图见
docs/。License
This project is released under the MIT License. See
LICENSE.