1、项目全景与需求分析:理解ROS2项目生命周期,从用户故事到技术需求文档的转化

大家好,我是你们的讲师。今天咱们聊聊一个项目怎么从零开始。

很多人一上来就写代码,结果写到一半发现需求变了,或者根本跑不通。我见过太多这样的团队了。说白了,ROS2项目跟盖房子一样,地基没打好,后面全是坑。

这一章,我们就讲清楚一件事:怎么把用户的一句话,变成工程师能看懂的技术文档

1.1 ROS2项目的生命周期

一个完整的ROS2项目,通常经历这几个阶段:

  • 需求分析:搞清楚用户到底要什么
  • 系统设计:画架构图、定接口
  • 迭代开发:写代码、调参数
  • 集成测试:把模块拼起来跑
  • 部署运维:上真机、持续监控

我个人习惯,在需求分析阶段花的时间最多。为什么?因为这里错了,后面全白干。

核心观点:需求分析不是一次性的,它贯穿整个项目。你每写一行代码,都应该回头看看需求文档。

1.2 从用户故事开始

用户故事是什么?说白了,就是用户用大白话告诉你他想要什么。

举个例子:

“我希望机器人能自己从A点走到B点,别撞到人。”

这句话里藏着很多信息。我们把它拆开:

  • “自己走” → 需要自主导航
  • “从A到B” → 需要路径规划
  • “别撞到人” → 需要动态避障

你看,一句话就引出了三个技术点。

我的经验:写用户故事时,尽量让用户用“我”开头。比如“我希望机器人能...”。这样更容易抓住真实需求。

1.3 技术需求文档的转化

用户故事是原材料,技术需求文档才是工程师的蓝图。

怎么转化?我一般分三步走:

  1. 提取功能点:从用户故事里列出所有“要做什么”
  2. 定义接口:确定话题(Topic)、服务(Service)、动作(Action)
  3. 设定指标:比如定位精度、响应时间、最大速度

举个例子,还是那个导航需求:

用户故事 功能点 技术接口 指标
机器人自己走到B点 自主导航 /cmd_vel (Twist) 线速度 ≤ 1.0 m/s
别撞到人 动态避障 /scan (LaserScan) 最小安全距离 0.3m
知道自己在哪 定位 /amcl_pose (PoseWithCovariance) 定位误差 ≤ 0.1m

嗯,这里要注意。指标不能拍脑袋定。我曾经在一个项目中,把定位精度定到0.01m,结果发现传感器根本达不到。后来跟用户重新沟通,改成了0.1m,项目才顺利推进。

1.4 避坑指南:需求分析中的常见问题

做需求分析这么多年,我踩过不少坑。分享几个典型的:

我曾经...接手过一个项目,需求文档写了50页,但全是废话。什么“系统应具有良好的可扩展性”,这种话等于没说。真正的需求,必须可量化、可测试。

  • 坑1:需求太模糊 → 解决办法:用“用户故事+验收条件”的方式写
  • 坑2:忽略非功能需求 → 比如实时性、可靠性、功耗。这些往往比功能更重要
  • 坑3:需求变更不管理 → 每次变更都要更新文档,并且通知所有人

你想想看,如果连需求都没搞清楚,你写的代码再漂亮有什么用?

1.5 实战:写一份简单的技术需求文档

光说不练假把式。我们拿一个实际场景练练手。

场景:一个仓库搬运机器人,需要把货物从货架运到打包区。

用户故事:

  • “我是仓库管理员,我希望机器人能自动把货架上的箱子运到打包台。”
  • “我希望它能在仓库里自由移动,别撞到其他机器人和人。”
  • “我希望它能告诉我当前任务进度。”

转化为技术需求:

# 技术需求文档(节选)

## 1. 功能需求
- 1.1 自主导航:机器人能从当前位置导航到指定货架
- 1.2 货物搬运:到达货架后,自动取货并运送到打包区
- 1.3 状态上报:每5秒发布一次任务进度(已完成/总任务数)

## 2. 接口定义
- 话题:/robot_status (String) — 状态信息
- 服务:/navigate_to (Pose) — 导航到指定位置
- 动作:/transport (TransportGoal) — 搬运任务

## 3. 性能指标
- 导航精度:≤ 0.2m
- 最大速度:1.5 m/s
- 避障响应时间:≤ 0.5s
- 任务完成率:≥ 99%

我建议:写技术需求文档时,多用表格和列表。工程师喜欢看结构化的东西。别写大段文字,没人愿意读。

1.6 本章小结

好了,我们来捋一捋今天的内容:

  • ROS2项目生命周期从需求分析开始,这一步决定了项目的成败
  • 用户故事是起点,技术需求文档是终点
  • 转化过程要提取功能点、定义接口、设定指标
  • 避坑:需求要可量化、要覆盖非功能需求、要管理变更

下一章,我们会讲怎么把这些需求变成系统架构图。到时候见。


公众号:蓝海资料掘金营,微信deep3321