第1章 机器人系统概述

做机器人系统开发这些年,我最大的感触是:别急着写代码。很多新手一上来就调电机、跑SLAM,结果连系统怎么挂的都不知道。这一章,我们先搭个全局框架——搞清楚机器人到底由什么组成、ROS是什么东西、开发流程该怎么走。

本章核心目标:建立机器人系统的整体认知,理解ROS的定位,掌握从需求到部署的标准开发路径。

1.1 机器人系统组成

一台能用的机器人,绝不只是「电机+轮子+摄像头」。我个人习惯把系统拆成四个层次,你想想看,任何一个环节掉链子,整机就废了。

机器人系统四层架构 感知层 激光雷达 · 摄像头 · IMU · 超声波 · 编码器 决策层 定位 · 建图 · 路径规划 · 行为决策 · 任务调度 控制层 运动控制 · PID · 轨迹跟踪 · 力控 · 安全保护 执行层 电机驱动 · 舵机 · 液压 · 机械臂 · 底盘 数据流:传感器 → 感知 → 决策 → 控制 → 执行 → 反馈闭环

这四层的关系,说白了就是感知-思考-行动的循环。我在项目中遇到过最典型的坑:感知层数据延迟太大,决策层算完路径,机器人已经撞墙了。嗯,这里要注意——实时性是贯穿所有层的红线。

层次 典型硬件/软件 常见问题
感知层 LiDAR、摄像头、IMU 数据噪声、时间戳不同步
决策层 ROS Navigation Stack、MoveIt 算力不足、规划死锁
控制层 MCU、PID控制器 响应滞后、震荡
执行层 电机、减速器、编码器 机械间隙、堵转

避坑提醒:我曾经在项目里只关注算法,忽略了执行层的机械间隙。结果仿真跑得飞起,实车一跑就偏。记住:仿真不是现实,每个层次都要单独验证。

1.2 机器人操作系统(ROS)简介

ROS不是真正的操作系统,它是个分布式通信框架。你想想看,一个机器人可能有3个摄像头、2个激光雷达、1个机械臂,如果每个模块都自己写通信协议,项目还没开始就结束了。

ROS的核心就三件事:

  • 节点(Node):每个功能模块是一个节点,比如「摄像头节点」「路径规划节点」。
  • 话题(Topic):节点之间通过话题发布/订阅数据。比如摄像头节点发布 /camera/image 话题。
  • 服务(Service):请求-响应模式,适合一次性调用,比如「打开机械臂夹爪」。

我个人习惯把ROS比作消息总线——所有节点插上去就能通信,谁挂了也不影响其他节点。但注意,这不是银弹。

小经验:刚开始学ROS,别急着看源码。先跑一遍 roscore,再用 rosrun 启动两个节点,用 rostopic echo 看数据流。亲眼看到消息在节点间传递,比读十篇教程都管用。

ROS2相比ROS1,最大的改进是去中心化和实时性。ROS1依赖一个Master节点,Master挂了整个系统就瘫了。ROS2用DDS(数据分发服务)做底层通信,每个节点直接点对点通信。我在做工业机器人项目时,ROS1的Master单点故障让我吃过亏,后来切到ROS2才解决。

特性 ROS1 ROS2
通信架构 中心化(Master) 去中心化(DDS)
实时性 不支持 支持(需RT内核)
多机器人 复杂 原生支持
跨平台 Linux为主 Windows/macOS/Linux

我的建议:新项目直接上ROS2。ROS1虽然生态成熟,但官方已经停止更新。别在旧技术上浪费时间。

1.3 机器人开发流程概览

很多团队做机器人,上来就写代码,写到一半发现需求没对齐,或者硬件选型错了。我总结了一套五阶段流程,每个阶段都有明确的交付物。

机器人开发五阶段流程 需求分析 场景·功能·指标 硬件选型 系统设计 架构·接口·协议 仿真模型 联调测试 单元·集成·系统 回归测试 部署运维 现场调试·OTA 监控告警 迭代 反馈闭环:每个阶段都可能回溯到上一阶段 每个阶段的交付物 1. 需求分析 → 需求文档、硬件BOM表、选型报告 2. 系统设计 → 架构图、接口定义、仿真模型 3. 联调测试 → 测试用例、测试报告、Bug清单 4. 部署运维 → 部署手册、监控面板、OTA策略

这里我想重点说说联调测试阶段。很多团队把联调当成「最后一步」,结果所有问题堆在一起爆发。我建议:从第一天就开始联调。哪怕只有一个传感器和一个电机,也要让它们先跑通。

血的教训:我曾经在一个AGV项目里,硬件团队和软件团队各自开发了3个月。联调那天发现——电机驱动板的CAN总线协议和ROS节点的定义完全对不上。改协议?硬件要重新打板,软件要重写驱动。前后多花了2周。如果早期就做接口联调,这2周完全可以省掉。

具体到每个阶段,我习惯用检查清单来卡进度:

  1. 需求分析阶段:机器人要做什么?在什么环境?负载多少?精度要求?
  2. 系统设计阶段:选什么传感器?用什么主控?通信协议是CAN还是EtherCAT?
  3. 联调测试阶段:每个模块单独测过吗?接口对得上吗?极端情况(堵转、丢包)处理了吗?
  4. 部署运维阶段:现场网络稳定吗?OTA升级失败怎么回滚?日志怎么收集?

一个小技巧:在需求分析阶段,花一天时间画一张系统数据流图——从传感器原始数据,到最终电机输出,中间经过哪些节点、哪些话题、哪些变换。这张图画清楚了,后面80%的坑都能提前发现。