机器人测试基础学习文档(新人版)
适用对象:机器人测试新人、产品测试、系统测试、质量验证、售后技术支持。
示例场景:以割草机器人为主,同时适用于扫地机器人、配送机器人、移动底盘等自主移动机器人。
0. 新人先建立一张“整机地图”
机器人测试不是只看一个传感器或一段算法,而是看整机链路是否稳定闭环。可以先记住一条主线:
mermaid flowchart LR A["感知层:相机 / RGBD / LiDAR / IMU / RTK / 轮速计"] --> B["定位建图层:SLAM / VSLAM / LiDAR SLAM / 传感器融合"] B --> C["规划决策层:全局路径 / 局部避障 / 作业策略"] C --> D["控制执行层:电机 / 转向 / 刀盘 / 回充"] D --> E["状态反馈层:里程计 / 电流 / 温度 / 故障码 / 日志"] E --> B ```生活类比:
人在陌生公园里走路:眼睛负责看路,内耳负责感知身体姿态,大脑一边记地图一边判断自己在哪,腿负责执行行走。
机器人也类似:相机、雷达、IMU 是“眼睛和内耳”;SLAM 是“认路和记地图”;路径规划是“决定怎么走”;电机和刀盘是“腿和工具”。
测试新人看机器人时,建议永远追问三件事:
输入是什么:传感器数据是否真实、连续、时间对齐?
输出是什么:定位、地图、路径、控制命令是否符合预期?
异常怎么表现:弱光、强光、遮挡、打滑、动态障碍物、通信中断时系统是否能恢复?
1. ROS 机器人操作系统
1.1 ROS 到底是什么
ROS 是 Robot Operating System 的缩写,中文常叫“机器人操作系统”。但它不是 Windows、Android 那种完整操作系统,更准确地说,它是运行在 Linux 等系统上的机器人软件框架和通信中间件。
通俗理解:
Linux 像地基和房子。
ROS 像房子里的水电网络、开关面板和设备接口。
相机、雷达、电机、导航算法、避障算法通过 ROS 连接起来,各模块不需要彼此硬编码在一起。
割草机器人示例:
相机节点持续发布图像。
激光雷达节点持续发布点云或扫描线。
定位节点订阅相机、雷达、IMU 数据,输出机器人位置。
导航节点根据地图和位置规划路径。
控制节点把路径转换成电机速度和刀盘控制命令。
1.2 ROS 核心术语
| 术语 | 英文 | 新人解释 | 割草机器人例子 |
|---|---|---|---|
| 节点 | Node | 一个独立运行的小程序或进程,负责一个功能 | 相机驱动节点、导航节点、刀盘控制节点 |
| 话题 | Topic | 节点之间持续传数据的通道,适合连续数据流 | /camera/image、/scan、/imu/data |
| 消息 | Message | 话题里传输的数据格式 | 图像消息、点云消息、速度消息 |
| 服务 | Service | 一问一答的同步请求,适合短任务 | 请求“升起刀盘”,返回“执行成功/失败” |
| 动作 | Action | 长时间任务通信,有进度反馈和最终结果 | 执行“全场自动割草”,中途持续反馈进度 |
| 参数 | Parameter | 节点运行配置 | 雷达频率、最大速度、避障距离阈值 |
| 启动文件 | Launch | 一次性启动多个节点和配置 | 一键启动相机、雷达、SLAM、导航 |
| 坐标变换 | TF / TF2 | 管理机器人各部件坐标关系 | 相机在车体前方 20 cm,雷达在车体顶部 |
| 数据包 | Bag / rosbag | 录制和回放 ROS 数据 | 录一段草坪运行数据,回放复现缺陷 |
| QoS | Quality of Service | ROS2 通信质量策略 | 传感器数据允许丢少量帧,但控制命令更关注可靠性 |
| DDS | Data Distribution Service | ROS2 底层分布式通信协议 | 多节点不用中心 Master 也能互相发现和通信 |
生活类比:
Topic 像微信群直播消息:有人一直发,有人按需看。
Service 像去窗口办业务:你提一个请求,对方给一个结果。
Action 像点外卖:下单后能看到“已接单、配送中、已送达”,最后有结果。
1.3 Topic、Service、Action 怎么选
| 通信方式 | 适合什么数据 | 特点 | 机器人例子 | 测试关注点 |
|---|---|---|---|---|
| Topic | 连续、高频、异步数据 | 发布者和订阅者不用互相等待 | 相机图像、雷达扫描、IMU 姿态、轮速里程计 | 频率是否稳定、是否丢帧、消息格式是否匹配 |
| Service | 短时间请求响应 | 请求后等待结果,适合一次性操作 | 查询电池状态、设置工作模式、升降刀盘 | 超时、失败返回、重复请求是否安全 |
| Action | 长时间任务 | 有目标、进度反馈、可取消、最终结果 | 自动回充、全场割草、定点补割 | 任务取消、暂停、恢复、进度是否可信 |
1.4 ROS1 与 ROS2 的核心区别
| 对比项 | ROS1 | ROS2 |
|---|---|---|
| 通信架构 | 依赖 ROS Master 做中心管理 | 基于 DDS,分布式发现和通信 |
| 实时性与可靠性 | 原生实时性较弱,产品化需额外改造 | 更重视实时性、QoS、生命周期、安全性 |
| 平台适配 | 主要面向 Linux | 支持 Linux、Windows、macOS,嵌入式适配更好 |
| 当前状态 | ROS1 Noetic 已于 2025 年停止官方维护 | 2026 年产品和新项目建议优先 ROS2 |
| 适合场景 | 历史项目、学习旧资料、实验室遗留系统 | 新项目、工业产品、量产机器人 |
新人建议:
学概念时可以看 ROS1 资料,因为很多名词是相通的。
做产品测试和新项目时,应优先按 ROS2 口径学习,尤其关注 DDS、QoS、生命周期节点、rosbag2、Nav2。
1.5 常用 ROS 工具
| 工具 | 用途 | 新人怎么理解 | 测试场景 |
|---|---|---|---|
| RViz / RViz2 | 3D 可视化 | 看机器人眼中的世界 | 看地图、点云、机器人位置、路径、TF 坐标 |
| Gazebo / Gazebo Sim | 物理仿真 | 在电脑里搭一个虚拟草坪 | 不用真机先跑导航、避障、传感器仿真 |
| rqt | 图形化调试工具集合 | ROS 的调试面板 | 看话题图、参数、日志、曲线 |
| rosbag / rosbag2 | 数据录制与回放 | 机器人测试录像机 | 缺陷复现、算法回归、离线分析 |
| ros2 CLI | 命令行调试 | 查节点、话题、服务、参数 | 快速判断模块是否活着、数据是否正常 |
常用检查命令示例(ROS2):
ros2 node list ros2 topic list ros2 topic echo /imu/data ros2 topic hz /scan ros2 service list ros2 action list ros2 param list ros2 bag record /scan /imu/data /tf /odom1.6 ROS 测试重点
| 测试对象 | 重点问题 | 常见缺陷 |
|---|---|---|
| 节点 | 是否启动、是否异常退出、是否自动恢复 | 节点崩溃、重复启动、参数加载失败 |
| 话题 | 频率、延迟、消息类型、时间戳 | 频率抖动、时间戳跳变、订阅不到数据 |
| TF 坐标树 | 坐标关系是否完整、方向是否正确 | 地图和机器人位置错位、点云漂到车体外 |
| QoS | 发布订阅策略是否兼容 | ROS2 下话题存在但收不到数据 |
| 参数 | 默认值、边界值、热更新 | 最大速度配置错误、避障距离阈值不生效 |
| rosbag | 录制完整性、回放一致性 | 缺少/tf导致离线无法复现 |
| 启动流程 | 上电、重启、异常恢复 | 某节点启动太晚,导致系统初始化失败 |
2. 感知传感器:机器人“看世界”的方式
机器人要自主移动,必须知道三类信息:
我周围有什么:人、宠物、树、石头、花坛、墙、坑。
它们离我多远:是否需要避让、减速、停车。
我自己怎么动了:是否转弯、打滑、倾斜、偏航。
2.1 传感器总览
| 传感器 | 核心原理 | 输出数据 | 优势 | 局限 | 割草机器人用途 |
|---|---|---|---|---|---|
| RGB 相机 | 可见光成像 | 2D 彩色图像 | 便宜、清晰、适合识别物体类别 |