一、机器人系统概述:从定义到生态

大家好,我是你们这门课的主讲。做了十几年机器人系统,从最早的工业机械臂到现在的服务机器人,踩过的坑不少。今天咱们先聊聊基础——机器人到底是什么,它从哪来,又由哪些部分组成。

1.1 机器人的定义与发展简史

先问个问题:什么是机器人?

你可能会说,能动的、能干活的机器。但严格来说,国际标准化组织(ISO)的定义是:一种可编程的、能在两个或多个轴上进行运动的机械装置。说白了,它得能感知环境、做出决策、执行动作。

发展简史其实挺有意思的:

  • 1940s-1950s:工业机器人萌芽。我记得最早是乔治·德沃尔搞出了可编程的机械臂原型。
  • 1960s:Unimate 机器人进入通用汽车生产线。那时候的机器人,说白了就是个会重复动作的铁疙瘩。
  • 1970s-1980s:传感器开始加入,机器人有了“感觉”。我在项目里见过老式的示教器,那玩意儿操作起来真叫一个痛苦。
  • 1990s-2000s:移动机器人兴起,扫地机器人、火星车都来了。
  • 2010s至今:AI 加持,机器人开始“长脑子”了。

核心观点:机器人发展的本质,是从“能动的机器”走向“能思考的机器”。

1.2 机器人三大定律——不只是科幻

阿西莫夫在1942年提出的三大定律,虽然写在小说里,但做机器人系统的人必须懂:

  1. 第一定律:机器人不得伤害人类,或因不作为让人类受到伤害。
  2. 第二定律:机器人必须服从人类命令,除非与第一定律冲突。
  3. 第三定律:机器人应保护自身存在,除非与第一、第二定律冲突。

你可能会问:这跟写代码有什么关系?

关系大了。我在做医疗机器人项目时,安全逻辑的优先级设计就参考了这套思想——人的安全永远高于任务执行。代码里如果出现“为了完成任务而忽略安全”的逻辑,那一定是架构设计出了问题。

注意:三大定律不是法律条文,而是设计原则。实际工程中,安全冗余、故障降级、急停逻辑都比“服从命令”优先级高。

1.3 机器人系统组成:机械、电气、软件

一个完整的机器人系统,说白了就是三块:骨架(机械)、神经(电气)、大脑(软件)。我习惯用一张图来理解:

机器人系统组成架构图 机器人系统组成架构 机器人系统 机械系统 电气系统 软件系统 本体结构 关节/传动 末端执行器 电机/驱动 传感器 控制器 操作系统 算法/控制 应用层 三者关系 机械提供运动能力,电气提供驱动与感知,软件提供智能与控制 缺一不可,且需要紧密协同设计

具体来说:

子系统 核心组件 我的经验
机械系统 本体结构、关节、传动机构、末端执行器 刚度与重量的平衡最难。我做过一个机械臂,为了轻量化用了太多铝合金,结果末端抖动严重。
电气系统 电机、驱动器、传感器、控制器、电源 传感器选型别只看精度,还要看抗干扰能力。我曾经被一个廉价IMU坑了整整两周。
软件系统 操作系统、中间件、算法库、应用层 软件架构决定了你能走多远。一开始图省事写死逻辑,后面改起来想哭。

1.4 主流机器人操作系统:ROS/ROS2

说到软件,就绕不开 ROS(Robot Operating System)。

ROS 不是真正的操作系统,它是个分布式通信框架。你想想看,一个机器人可能有激光雷达、摄像头、电机控制器、路径规划模块……它们之间怎么通信?ROS 就是干这个的。

小提示:ROS 的核心机制是“节点-话题-服务”模型。节点之间通过话题发布/订阅消息,或者通过服务进行请求/响应。这个设计让模块解耦得非常干净。

ROS 和 ROS2 的区别,我整理了一张表:

特性 ROS 1 ROS 2
通信中间件 自定义 TCPROS/UDPROS DDS(数据分发服务)
实时性 不支持 支持(通过 DDS 的 QoS)
跨平台 主要 Linux Linux、Windows、macOS、RTOS
安全性 无内置安全机制 支持加密和认证
节点发现 依赖 ROS Master 分布式发现,无单点故障
生命周期管理 手动管理 内置节点生命周期管理

我个人建议:新项目直接上 ROS2。为什么?

  • ROS1 的 Master 一旦挂了,整个系统就瘫了。我在一个仓库巡检机器人项目里吃过这个亏。
  • ROS2 的 DDS 天生支持分布式,而且实时性更好。
  • ROS1 官方已经停止更新了,社区都在往 ROS2 迁移。

避坑指南:我曾经在一个项目里为了省事,把 ROS1 和 ROS2 混用,结果通信桥接搞得一塌糊涂。如果你不是非用不可,别这么干。

最后说一句:ROS 不是万能的。它适合做原型验证和中小型系统,但如果你做的是工业级产品,尤其是对实时性和可靠性要求极高的场景,可能需要自己定制通信方案。不过,作为学习起点,ROS/ROS2 是最好的选择。

嗯,这一章就到这里。记住:机器人系统是机械、电气、软件三者的融合,缺一不可。后面我们会一步步深入每个模块。