机器人系统测试
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/robotics-testing-lr-m0hd。
技能介绍
机器人测试为什么难写
机器人代码的测试和普通服务端不一样:节点之间通过话题、服务和参数通信,测试时需要一个活着的 ROS 上下文;传感器和执行器往往是真实硬件,不模拟就没法在 CI 里跑;感知流水线的输入没有天然的地面真值;规划器的输出要验证收敛性和碰撞约束,一旦失败很难归因。
它怎么工作
技能按照机器人测试金字塔组织能力。
- 单元测试:用
pytest测 ROS2 节点,通过 fixture 管理rclpy上下文,每个测试拿到独立节点实例,用完后销毁节点。 - 集成测试:使用
launch_testing启动多个节点,验证它们之间的协作行为。 - 硬件模拟:为传感器和执行器打桩,让 CI/CD 流水线脱离实体硬件运行。
- 仿真测试:构建基于仿真的测试套件,并用地面真值检验感知流水线。
- 规划器验证:验证轨迹规划器和控制器的输出行为。
- CI/CD:为机器人包搭建流水线。
关键步骤是:先初始化 ROS 上下文,注入合成传感器消息(例如 Image),调用被测逻辑,断言结果,最后清理节点。
适用边界
注意 fixture 的作用域。scope='module' 让上下文在整个模块只初始化一次,开销低,但节点必须在每个测试中重建,否则状态会在用例之间泄漏。合成测试数据要尽量贴近真实分布,否则断言会给出误导性的安全感。感知测试依赖可靠的地面真值,缺失时应当显式跳过而不是静默通过。
使用场景
- 为 ROS1/ROS2 节点编写单元测试,建立稳定的基础测试层
- 使用 launch_testing 搭建集成测试,验证多个节点协同工作
- 在 CI/CD 流水线中模拟传感器与执行器,减少对实体硬件的依赖
- 基于仿真环境和地面真值,验证感知流水线的输出准确性
适合人员
- 从事 ROS1/ROS2 节点开发的工程师,需要为感知、规划、控制模块补测试
- 负责机器人 CI/CD 的开发者,想把硬件依赖移出流水线
- 使用 launch_testing 的集成测试工程师,需要搭建多节点测试场景
- 做感知算法验证的工程师,需要用仿真数据和地面真值检查流水线