1、项目全景与需求分析:理解ROS2项目生命周期,从用户故事到技术需求文档的转化
大家好,我是你们的讲师。今天咱们聊聊一个项目怎么从零开始。
很多人一上来就写代码,结果写到一半发现需求变了,或者根本跑不通。我见过太多这样的团队了。说白了,ROS2项目跟盖房子一样,地基没打好,后面全是坑。
这一章,我们就讲清楚一件事:怎么把用户的一句话,变成工程师能看懂的技术文档。
1.1 ROS2项目的生命周期
一个完整的ROS2项目,通常经历这几个阶段:
- 需求分析:搞清楚用户到底要什么
- 系统设计:画架构图、定接口
- 迭代开发:写代码、调参数
- 集成测试:把模块拼起来跑
- 部署运维:上真机、持续监控
我个人习惯,在需求分析阶段花的时间最多。为什么?因为这里错了,后面全白干。
核心观点:需求分析不是一次性的,它贯穿整个项目。你每写一行代码,都应该回头看看需求文档。
1.2 从用户故事开始
用户故事是什么?说白了,就是用户用大白话告诉你他想要什么。
举个例子:
“我希望机器人能自己从A点走到B点,别撞到人。”
这句话里藏着很多信息。我们把它拆开:
- “自己走” → 需要自主导航
- “从A到B” → 需要路径规划
- “别撞到人” → 需要动态避障
你看,一句话就引出了三个技术点。
我的经验:写用户故事时,尽量让用户用“我”开头。比如“我希望机器人能...”。这样更容易抓住真实需求。
1.3 技术需求文档的转化
用户故事是原材料,技术需求文档才是工程师的蓝图。
怎么转化?我一般分三步走:
- 提取功能点:从用户故事里列出所有“要做什么”
- 定义接口:确定话题(Topic)、服务(Service)、动作(Action)
- 设定指标:比如定位精度、响应时间、最大速度
举个例子,还是那个导航需求:
| 用户故事 | 功能点 | 技术接口 | 指标 |
|---|---|---|---|
| 机器人自己走到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