Nav2 用例模板指南:以用户故事驱动机器人导航需求分析与文档编写
发布时间:2026/10/4 15:32:37 作者:尧图编辑部 阅读量:1,286

机器人ROS自动驾驶【免费下载链接】navigation2ROS 2 Navigation Framework and System项目地址https://gitcode.com/gh_mirrors/na/navigation2点击查看免费下载导读本文围绕 ROS 2 Navigation FrameworkNav2官方文档目录中的 用例模板_template_use_case.md系统讲解 Nav2 团队如何用「用户故事 细节 非功能需求」三要素来规范化机器人导航用例的编写方法。文章将完整还原模板内容结合doc/use_cases/下已落地的 7 份真实用例文档以及nav2_amcl、nav2_bt_navigator、nav2_costmap_2d等模块的源码与配置证据说明如何把一句话用例逐级落实为需求文档与可运行的导航系统功能。读完本文你将能够按 Nav2 官方规范独立编写、评审和落地一个机器人导航用例。1. 模板是什么Nav2 用例文档的格式标准在 Nav2 仓库的doc/use_cases/目录中除了 7 份具体用例文档外还存放着一份特殊的文件——模板文件_template_use_case.md。它以_下划线开头命名表明它不是一份可被直接引用的用例而是一份编写其他用例时必须遵循的格式规范。模板的存在意义在于导航机器人系统的使用场景跨度极大室内物流、户外配送、多层楼宇、禁行区规避等如果每份文档各写各的读者将很难横向对比、检索和复用。模板把每份用例统一为一个标准标题一段**用户故事User Story**式的主句一个名为More details的细节小节Why / 用户交互 / 非功能需求三个固定问题。这种先讲故事、再补细节的结构与仓库中 需求文档requirements.md第 1.4 节对 Use Cases 的定位一脉相承——Nav2 明确将用例视为需求分析的前置输入系统必须首先回答用户与机器人之间会发生什么交互然后才能谈 MUST / SHOULD 级别的功能需求。2. 模板核心结构逐行解读2.1 标题一句话概括用例主题模板规定每个用例文档的标题即用例名称要求精炼、可检索。例如仓库中的实际用例标题# Collision Avoidance# Indoor Navigation# Keep Out Zones# Multi-story Building Navigation (2D)2.2 用户故事主句As a ... I want ... so that ...模板的主句采用业界标准的用户故事句式As a Developer, Researcher, Technician, etc. I want the robot to action so that I, the robot, etc. can do something important拆解来看这一句式强制作者回答三个问题要素模板占位符作用角色Developer, Researcher, Technician, etc.明确谁在提这个需求避免无主句动作action机器人要执行的能力动作导航、避障、定位、绕行收益do something important这一能力带来的业务价值不伤人、不损坏、送达物品仓库中的真实用例都严格遵循该句式例如 室内导航用例As a Robot user I want my robot to autonomously navigate to a given location on a given map so that it can help me at that location以及 保持禁入区用例As a Robot user I want to be able to designate keep-out zones or areas on a map so that my robot will go around those areas instead of through them注意模板允许同时出现两个主体I 与 the robot这正是机器人用例的特殊性——用户是需求提出者机器人是需求执行者两者必须在句子中同时被表达清楚。2.3 More details 小节三个必答问题模板要求每个用例在用户故事之后必须回答三个固定问题模板中为无序列表可完整照抄## More details - Why is this needed? - What is the expected user interaction? - Are there any non-functional requirements? (build system, tools, performance, etc)这三个问题分别对应需求分析的三个维度Why is this needed?—— 价值与动机。要求给出具体业务场景示例把抽象收益落到真实环境中What is the expected user interaction?—— 交互边界。明确用户需要做什么、不需要做什么划清自动化与人机协作的界限Are there any non-functional requirements?—— 非功能约束。包括构建系统、工具链、性能指标如响应速度、实时性、刷新频率等。3. 模板自带示例深度解析Collision Avoidance模板在末尾附上了一段完整示例这是全文最有价值的实战参考原样如下# Collision Avoidance As a robot user, I want the robot to navigate without colliding into people or objects so that it doesnt hurt anyone or damage anything ## More details - Why is this needed? - I want this so that I know the robot wont damage itself, damage property or hurt anyone - Example: a logistics robot in a warehouse must avoid shelves, people, forklifts, and other robots - What is the expected user interaction? - I shouldnt have to interact with the robot to prevent it from crashing into people or things - Are there any non-functional requirements? (build system, tools, performance, etc) - The performance needs to be fast enough to avoid moving objects such as people walking or other moving robots这份示例已经具备一条好用例的完整要素而它在 Nav2 中并非空话——仓库中有成体系的源码实现与之对应感知层nav2_costmap_2d的 obstacle_layer.cpp 与 voxel_layer.cpp 负责把激光雷达等传感器数据实时写入代价地图为避障提供哪里不能走的基础规划/控制层nav2_dwb_controller的 critics 与nav2_mppi_controller的 critics、trajectory validators 在局部轨迹评分中惩罚碰撞轨迹紧急刹车层独立的 nav2_collision_monitor 模块监听传感器与代价地图在接近碰撞时直接下发速度限制或停车指令——这正是用例中用户不需要干预机器人防碰撞expected user interaction的工程实现。同时性能要快到能躲开行走的行人这一非功能需求在实际参数中体现为局部代价地图的高更新频率参见 nav2_params.yaml 中 local_costmap 的update_frequency、voxel_layer的observation_sources等配置。4. Nav2 目标用例全景与 README 目录对照模板定义的是怎么写而doc/use_cases/README.md定义的是写哪些。该文件给出了 Nav2 系统的目标用例清单用例示例场景对应文档仓库支撑模块2D Indoor Navigation仓库/物流机器人indoor_navigation_use_case.mdnav2_bt_navigator、nav2_planner、nav2_controller2D Navigation with Elevation通过坡道和楼梯的救援机器人目录中未单列文档nav2_smac_planner 混合/格点规划器2D Navigation with Elevators酒店房间服务机器人目录中未单列文档nav2_docking 对接、nav2_routeOutdoor Navigation户外配送机器人outdoor_navigation_use_case.mdnav2_amcl户外定位 上述导航栈3D Navigation - DronesStretch Target无人机尚未形成独立文档——其中 2D 室内导航、室内外定位、禁入区、多层楼宇导航均已有独立用例文档室内定位用例 —— 对应 nav2_amcl 的粒子滤波自适应蒙特卡洛定位实现户外定位用例 —— 同样依赖 nav2_amcl但面向校园、街道等大尺度地图禁入区用例 —— 对应 keepout_filter.cpp 代价地图过滤器多层楼宇导航用例 —— 明确提出楼梯、坡道、电梯需要在 GUI 或配置/API 层面可用或禁用。4.1 从用例到参数以 Keep Out Zones 为例禁入区用例的交互要求是用户能够在地图上指定机器人应绕行的区域这与nav2_params.yaml中的filters配置一一对应。以 全局代价地图配置 为例global_costmap: global_costmap: ros__parameters: # ... filters: [keepout_filter, speed_filter] keepout_filter: plugin: nav2_costmap_2d::KeepoutFilter enabled: KEEPOUT_ZONE_ENABLED filter_info_topic: keepout_costmap_filter_info override_lethal_cost: true lethal_override_cost: 200 speed_filter: plugin: nav2_costmap_2d::SpeedFilter enabled: SPEED_ZONE_ENABLED filter_info_topic: speed_costmap_filter_info speed_limit_topic: speed_limit配套的服务端参数同文件 L359-L383负责把掩码图发布为可订阅的话题keepout_filter_mask_server: ros__parameters: topic_name: keepout_filter_mask keepout_costmap_filter_info_server: ros__parameters: type: 0 filter_info_topic: keepout_costmap_filter_info mask_topic: keepout_filter_mask base: 0.0 multiplier: 1.0其中type: 0表示该过滤器语义为禁行Keepoutmultiplier: 1.0与base: 0.0决定掩码值向代价的映射speed_filter使用type: 1、base: 100.0、multiplier: -1.0把掩码转换为降速限值并通过speed_limit话题发布。在源码层面keepout_filter.cpp 通过订阅CostmapFilterInfo消息解析filter_mask_topic见该文件中对msg-filter_mask_topic的处理从而把用户指定的禁入区掩码应用到代价地图。仓库还提供了开箱即用的启动文件与示例地图nav2_bringup/launch/keepout_zone_launch.py、speed_zone_launch.py以及nav2_bringup/maps/depot_keepout.yaml、depot_speed.yaml等样例掩码图——用户只需在仿真环境中运行即可直观验证用户画区域、机器人绕行的完整闭环。5. 从用例到需求的落地路径用例文档在 Nav2 中不是终点而是需求规格的输入。requirements.md第 1.4 节给出了三组基础用例Mapping、Mission Planning、Mission Execution第 1.11.2 节则定义了需求的字段Id / Handle / Priority与关键词语义MUST、MUST NOT、SHOULD、MAY源自 IETF BCP 14。一个典型的落地路径是写用例本文主题用_template_use_case.md的句式与细节结构把业务诉求转成无歧义的交互描述转需求将用例中的需要翻译为requirements.md中带 MUST/SHOULD 等级的需求条目查实现对照用例主题检索对应模块定位 → nav2_amcl导航 → nav2_bt_navigator/nav2_planner禁行/限速 → nav2_costmap_2d 过滤器避障 → nav2_collision_monitor验参数在 nav2_bringup/params/nav2_params.yaml 与各包 README 中核对默认值与可调范围。这一链条保证了文档里写的故事最终能在真实机器人或仿真环境中被验证也使得仓库中每一份用例都不是孤立文本。6. 实操按模板编写一份新用例的步骤清单如果你想为 Nav2 或其他机器人导航项目新增一个用例例如电梯间导航户外校园配送可直接按以下流程操作复制模板以doc/use_cases/_template_use_case.md为起点另存为your_use_case_use_case.md写标题用 25 个词概括用例如# Outdoor Navigation填用户故事严格套用As a 角色 I want the robot to 动作 so that 收益确认角色—动作—收益三者齐全回答 More details 三问Why给出 1 个以上真实业务场景示例如仓库中的叉车卸货区示例Expected user interaction写清用户要做什么与不需要做什么必要时补充通过 GUI 还是 config/APINon-functional requirements涉及构建系统如 ROS 2 发行版、ament构建、工具、性能如避障响应时延、代价地图更新频率时务必写明对照目标清单检查doc/use_cases/README.md的目标用例列表确认新用例是否已在列避免重复关联实现证据在用例文档中或评审时标注对应的源码模块与参数文件路径确保用例可被追溯验证。7. 小结Nav2 的用例模板看似只有几十行实则是整个需求分析流程的语法规则它用用户故事句式强制澄清角色与价值用三个固定问题强制补全动机、交互边界与性能约束再用README.md的目标清单把散落的用例组织成完整的产品场景矩阵。模板本身与仓库中 7 份真实用例、requirements.md的需求定义、以及nav2_costmap_2d、nav2_amcl、nav2_collision_monitor等模块的源码配置形成了用例 → 需求 → 实现 → 参数的完整证据链。对任何希望为 Nav2 贡献新场景、或在自研导航系统中规范需求文档的开发者而言这份模板都是最值得从仓库中首先阅读的入口文件。赞分享机器人ROS自动驾驶【免费下载链接】navigation2ROS 2 Navigation Framework and System项目地址https://gitcode.com/gh_mirrors/na/navigation2点击查看免费下载相关推荐超强需求分析path-to-senior-engineer-handbook用户故事与用例设计超强需求分析path to senior engineer handbook用户故事与用例设计 引言为什么需求分析是通往高级工程师的必经之路 在软件开发的生文档教程如何用SRS-IEEE模板快速编写专业软件需求文档如何用SRS IEEE模板快速编写专业软件需求文档 还在为编写软件需求规范文档而头疼吗面对复杂的格式要求和繁琐的结构安排很多开发者都感到无从下手。今天我要介SQLAlchemy-mixins实战3分钟实现模型自动时间戳与优雅序列化SQLAlchemy mixins实战3分钟实现模型自动时间戳与优雅序列化 SQLAlchemy mixins是一款为SQLAlchemy提供增强功能的工具库上一篇PostHog Capture 服务线上排障手册基于 Grafana MCP 的健康检查、事件丢失与 Kafka 背压调查流程下一篇LeetCode-Go 第6题 ZigZag Conversion 解析方向指针驱动的 Z 字形变换与逐行拼接实现创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考