From Bits to the Physical World

A Full-Stack Robotics Guide for AI and Software Developers

01The Big Picture

What Is a Robot, Really?The Full-Stack Map of RoboticsWho's Who in the Industry?

02Hardware

SensorsActuatorsCompute Platforms

03Operating System

ROS 2DDS Deep Dive

04Algorithms

SLAMNav2MoveIt 2PerceptionBehavior Trees

05Simulation & Training

Why Simulation?NVIDIA Isaac Sim

06AI Meets Robotics

Reinforcement LearningImitation LearningFoundation Models

07Toolchain

Visualization & DebuggingDev Environment & DevOps

08The Harsh Reality of Deployment

Real-Robot DeploymentReliability EngineeringFleet Management

09Industry Reality

Business ModelsChina vs. GlobalCareer Advice

Part 1: The Big Picture · See the whole mountain first

Chapter 2

机器人开发的全栈地图 - 你正在进入的是一片什么样的丛林

如果你做过 Web 开发,你对“全栈”这个词不陌生。前端渲染页面,后端处理逻辑,数据库存数据,DevOps 管部署。每一层有自己的语言、框架、最佳实践,但它们共同服务于一个目标:用户在浏览器里点一下按钮,事情就发生了。

机器人也有一套全栈。只不过“用户点按钮”变成了“机器人接到任务”,“事情发生了”变成了“一个物理实体在真实世界里移动、抓取、放置、不撞人”。

这套全栈的复杂度比 Web 高一个数量级。不是因为每一层更难,而是因为层与层之间的耦合方式完全不同 - Web 全栈的层之间通过 API 调用,延迟在毫秒级,失败了返回 500 就行。机器人全栈的层之间通过物理世界耦合,延迟关乎安全,失败了可能是手臂砸到人。

那么这一章的目标便是给你画一张地图。不深入任何一层的细节 - 那是后面每一章的事 - 而是让你站在高处看清楚整片丛林的结构。你得先知道有哪些山头,才能决定从哪里开始爬。


五层 Robotics Stack

一个能在真实世界里执行任务的机器人系统,从底到顶大致分五层。我准备用 web 开发来做一个平行的对比,这样方便大家更好的比较。

Layer 0:硬件与传感器 - 原材料

这是一切的物理基础。电机让关节转动,传感器让机器人“看到”和“感受到”世界,计算平台提供算力。

对软件工程师来说,这一层最反直觉的地方在于:硬件的限制是硬性的。 你的算法再精妙,传感器看不到的东西就是看不到。相机在暗处拍出噪点,LiDAR 穿透不了玻璃,IMU 会漂移 - 这些不是 bug,是物理定律。你没法 patch 物理定律。

这一层包括:

  • 传感器:相机(RGB / 深度)、LiDAR、IMU、力/力矩传感器
  • 执行器:电机、减速器、夹爪
  • 计算平台:NVIDIA Jetson 系列是目前机器人上最主流的边缘计算方案
NVIDIA Jetson AGX Orin 开发者套件
NVIDIA Jetson AGX Orin 开发者套件 — 目前机器人上最主流的边缘计算平台,为感知和决策提供 GPU 算力。图源:Wikimedia Commons

Web 类比:这是你的服务器硬件。你不需要自己造服务器,但你得知道它的性能边界在哪里 - 内存多大、CPU 几核、网络带宽多少。机器人开发也一样:你不需要设计电路板,但你得知道 Jetson Orin NX 能跑多大的模型、Intel RealSense D435(高性能深度相机) 在多远距离之外深度数据就不可靠了。

Layer 1:ROS 2 - 操作系统与通信总线

机器人身上同时跑着几十个模块:相机驱动、LiDAR 驱动、SLAM、导航、手臂控制、感知、任务调度……这些模块需要一套统一的方式来互相通信和协调。

这就是 ROS 2(Robot Operating System 2)的角色。它不是传统意义上的操作系统(机器人底层跑的是 Ubuntu Linux),而是一套通信框架 + 一堆开源包 + 一种开发范式。你可以把它理解成机器人世界的“微服务架构” - 每个模块是一个独立的 node(节点),节点之间通过 topic(话题,pub/sub 模式)、service(服务,request/response 模式)和 action(动作,长任务 + 实时反馈)来交换数据。

ROS 2 Topic 通信模型:多个 Node 通过 Topic 实现 Pub/Sub 通信
ROS 2 的 Topic 通信模型 — 多个 Node 通过 Topic 实现发布/订阅,就像微服务之间通过消息队列通信。图源:ROS 2 Documentation

Web 类比:ROS 2 ≈ Kubernetes + gRPC + 消息队列。它管节点的启动和通信,就像 K8s 管容器的编排和服务发现。区别在于 ROS 2 的消息传输必须满足实时性要求 - 导航模块拿到的传感器数据如果延迟了 200ms,机器人可能已经撞墙了。

Layer 2:核心算法框架 - 感知、导航、操控、调度

这是机器人的“大脑”和“小脑”所在的层。每一个子领域都有成熟的开源框架:

  • SLAM(同时定位与建图):机器人第一次进入一个环境,边走边建地图、边定位自己。主流工具包括 slam_toolbox(2D)、LIO-SAM(3D LiDAR)
  • Nav2(导航框架):有地图之后,从 A 走到 B 不撞东西。包含全局规划器、局部控制器、避障、卡住后的恢复行为
  • MoveIt 2(机械臂运动规划):手臂怎么从当前姿态移到目标姿态,不碰自己也不碰环境
  • 感知(Perception):把原始的相机图像和点云变成有意义的信息 - “那里有一瓶水,坐标是 [x, y, z]”
  • 行为树(Behavior Tree):上面这些模块谁先跑、谁后跑、出错了怎么办 - 任务级别的调度逻辑
Nav2 + SLAM:机器人边导航边建图的实时可视化
Nav2 + SLAM 实时可视化 — 左侧是 RViz 中逐步构建的 2D 占据栅格地图,右侧是仿真环境中的机器人视角。图源:Nav2 Documentation

Web 类比:这一层对应你的业务逻辑层。SLAM 像是第一次爬取和索引一个网站结构,Nav2 像是路由,MoveIt 像是复杂的业务流程引擎,感知像是 NLP/CV 推理服务,行为树像是工作流编排(Temporal / Airflow)。

Layer 3:仿真与训练 - 虚拟世界里先跑通

机器人软件不像 Web 应用 - 你不能写完代码就直接 deploy 看效果。原因很简单:真机太贵、太慢、太危险。一个 bug 可能让一条价值几十万的机械臂撞到货架上。

所以机器人开发的标准流程是先在仿真环境里验证。NVIDIA Isaac Sim 是目前保真度最高的仿真平台,能模拟真实的物理引擎、传感器输出、光照条件。你的 ROS 2 节点连到 Isaac Sim 和连到真机,跑的是同一套代码 - 仿真环境只是把真实的传感器和执行器替换成了虚拟的。

另一个关键用途是训练。强化学习需要让机器人反复试错几百万次,这只有在仿真里才能做到。Isaac Lab 能在 GPU 上并行跑几千个机器人实例,大幅加速训练。

NVIDIA Isaac Lab 中大规模并行训练人形机器人
NVIDIA Isaac Lab — 在 GPU 上并行运行数千个机器人实例进行强化学习训练,这在真机上永远不可能实现。图源:NVIDIA

Web 类比:仿真 ≈ staging 环境 + 单元测试 + 集成测试。只不过你的 staging 环境模拟的不是 HTTP 请求,而是整个物理世界。

Layer 4:部署与运维 - 从实验室到真实世界

仿真里跑得再好,上真机还是会翻车。地面不平导致里程计漂移,光照变化让感知模型抽风,传感器标定有偏差,WiFi 信号不稳导致通信丢包。

这一层的工作是把实验室里验证过的系统搬到真实环境中,然后持续地调参、监控、排错。涉及传感器标定(calibration)、参数调优、远程监控和日志分析、异常检测与恢复机制,以及多台机器人的车队管理(fleet management)。

Web 类比:这就是 DevOps / SRE。部署、监控、告警、故障排查、滚动更新。区别在于你的“服务器”会在仓库里走来走去,而且它挂了不能简单地重启 pod - 你可能得派人过去物理重置它。


Web 全栈 → Robot 全栈:一张映射表

如果你有 Web 全栈背景,这张对照表能帮你快速建立直觉:

Web 全栈Robot 全栈相似点关键差异
服务器硬件传感器 + 执行器 + Jetson都是底层基础设施机器人硬件有物理局限,不可 patch
K8s + gRPC + 消息队列ROS 2都管进程编排和通信机器人通信有硬实时性要求
业务逻辑 + 推理服务SLAM / Nav2 / MoveIt / 感知都是核心功能实现算法输出直接驱动物理动作
Staging + CI/CD 测试Isaac Sim + Isaac Lab都是上线前验证仿真要模拟整个物理世界
DevOps / SRE传感器标定 + 参数调优 + Fleet都是持续运维“服务器”会走动,出故障可能需要现场处理

一个贯穿始终的区别:Web 全栈的失败模式是返回错误码,Robot 全栈的失败模式是物理碰撞。 这不是程度的区别,是性质的区别。它改变了你对延迟、可靠性和异常处理的所有直觉。


一个任务的全链路拆解:“去货架拿水瓶送到打包台”

抽象分层讲完了,来看一个具体任务怎么穿过所有层。

假设一台移动机械臂机器人收到指令:“去 A3 货架取一瓶矿泉水,送到打包台”。

行为树启动任务调度。 最顶层的行为树把这个任务拆成一个执行序列:导航到 A3 货架 → 识别矿泉水 → 规划抓取 → 执行抓取 → 导航到打包台 → 放置。同时挂载异常处理分支:如果导航卡住就触发恢复行为,如果抓取失败就重试,如果电量低就先去充电。

Nav2 负责走过去。 行为树把目标点发给 Nav2。全局规划器在 SLAM 建好的地图上规划一条从当前位置到 A3 货架的路径。局部控制器实时跟踪这条路径,同时用 local costmap 上的实时传感器数据来躲避沿途出现的人或障碍物。底盘电机按照控制器输出的速度指令转动。整个过程中,AMCL 持续用 LiDAR 数据和地图比对来修正定位。

感知模块识别目标。 到达货架附近后,感知模块启动。RGB 相机拍到货架画面,YOLO 或 GroundingDINO 检测出矿泉水的位置。深度相机给出目标的 3D 坐标。如果需要精确抓取,6DoF 位姿估计模型(比如 FoundationPose)会计算出矿泉水的精确朝向。

MoveIt 2 规划手臂动作。 拿到目标的 3D 位姿后,MoveIt 2 开始工作。逆运动学(IK)算出目标关节角度,运动规划器(比如 RRT*)找到一条从当前姿态到目标姿态的无碰撞路径。手臂沿着规划好的轨迹移动,接近目标时切换到力控模式,以合适的力度闭合夹爪。

再次导航 + 放置。 抓到水瓶后,行为树推进到下一步。Nav2 规划去打包台的路径,手臂保持在安全姿态避免碰撞。到达后,MoveIt 2 规划放置动作,夹爪松开。

全程通信通过 ROS 2。 以上所有模块 - 传感器驱动、SLAM、Nav2、MoveIt、感知、行为树 - 全部以 ROS 2 node 的形式运行,通过 topic 和 action 互相通信。相机驱动发布图像 topic,感知节点订阅图像 topic 并发布检测结果 topic,MoveIt 接收目标位姿并通过 action 反馈执行进度。整个系统像一个高速运转的齿轮组,任何一个齿轮的延迟或卡顿都会传导到整个链条。


这张地图有一个特点值得注意:层与层之间不是单向依赖的。SLAM 输出的地图质量直接影响 Nav2 的导航效果,Nav2 的定位精度又反过来影响感知的坐标准确性,感知的输出质量决定了 MoveIt 能不能规划出合理的抓取路径。所以你在深入任何一层的时候,脑子里始终要挂着上下游的数据流 - 这也是后面每一章都会讲“它的输出喂给谁”的原因。

← Previous01. What Is a Robot, Really?Next→03. Who's Who in the Industry?