1. 课程导入

欢迎进入《移动操作机器人导航抓取工程》。本课程面向已经具备一定机器人学、ROS 与 Python/C++ 基础的学习者,目标是把“会移动”和“会抓取”这两项能力真正融合到一台机器人身上,并能在真实或仿真环境中完成从建图、定位、导航、目标识别到抓取放置的完整闭环。本章作为全课程导入,先建立统一的概念边界、知识地图与项目预期,为后续 29 章打下共同语言。

一、什么是移动操作机器人

移动操作机器人(Mobile Manipulator)通常由移动底盘与机械臂两大部分组成,底盘提供大范围移动能力,机械臂提供精细操作能力。二者组合后,机器人不再受固定工位限制,可以在仓库、实验室、医院、家庭等非结构化环境中自主移动并完成抓取、搬运、放置、开关门等任务。

从系统角度看,移动操作机器人不是“底盘 + 机械臂”的简单叠加,而是需要解决三个耦合问题:

  • 运动耦合:底盘移动会改变机械臂基座位姿,机械臂运动也会影响整机重心与稳定性。
  • 感知耦合:导航需要全局地图与定位,抓取需要局部高精度点云或视觉位姿,二者对传感器帧率、精度、视野要求不同。
  • 任务耦合:先导航到哪个位置、以什么姿态停靠,直接决定机械臂能否在可达空间内完成抓取。
核心判断:移动操作机器人的工程难点,往往不在“单模块能不能跑”,而在“模块之间的接口、时序与坐标系是否一致”。

二、导航抓取工程的范畴

“导航抓取工程”覆盖从任务下达到抓取完成的全链路。它既包含传统移动机器人导航栈,也包含机械臂运动规划与视觉伺服,还包含二者之间的任务调度与坐标变换。可以把它理解为一条感知—决策—控制—执行的数据与信号链。

下面这张图给出本课程的整体知识框架与数据流关系,后续章节会沿着这条链路逐段展开。

移动操作机器人导航抓取工程 · 知识框架 任务层 任务解析 / 目标点 抓取位姿生成 停靠点选择 状态机 / 调度 导航层 SLAM / 定位 全局/局部规划 代价地图 · 路径跟踪 · 避障 · 恢复行为 抓取层 目标检测 / 分割 位姿估计 / 抓取点 手眼标定 · 逆运动学 · 轨迹规划 · 夹爪控制 耦合与协调 TF 坐标树 · 停靠位姿 · 时序同步 · 安全监控 执行层 底盘速度控制 机械臂关节控制 夹爪开合 / 力控

三、学习目标

完成本课程后,你应当能够独立完成以下工作:

  1. 搭建移动操作机器人的软件框架,理解 ROS 2 中导航栈与 MoveIt 的协同方式。
  2. 完成地图构建、定位、全局与局部路径规划,并让底盘稳定到达目标停靠点。
  3. 完成相机标定、手眼标定与目标位姿估计,把视觉结果转换到机械臂基座坐标系。
  4. 使用 MoveIt 或自定义规划器完成抓取轨迹规划,并处理可达性、碰撞与奇异点问题。
  5. 把导航与抓取串成任务状态机,处理失败恢复、超时与安全停止。
  6. 在仿真与真机上完成端到端调试,能定位“导航到了但抓不到”这类跨模块问题。

四、整体知识框架与实战项目概览

课程按“基础—导航—抓取—耦合—实战”五段推进。下表给出模块划分与关键产出,便于你建立学习节奏。

阶段 核心内容 关键产出
基础篇 移动操作机器人定义、坐标系、TF、ROS 2 通信 可运行的机器人模型与 TF 树
导航篇 SLAM、定位、代价地图、全局/局部规划、恢复行为 自主导航到指定停靠点
抓取篇 相机标定、手眼标定、目标检测、位姿估计、运动规划 稳定抓取指定物体
耦合篇 停靠位姿优化、任务状态机、时序同步、安全监控 导航+抓取端到端任务
实战篇 仿真环境搭建、真机部署、性能调优、故障复盘 可复现的完整项目报告

实战项目设定为:在仿真仓库场景中,机器人从起点出发,自主导航到货架前指定停靠点,识别货架上的目标物体,完成抓取并搬运到投放区。项目会贯穿全部章节,每章都会为这个项目增加一个可验证的能力模块。

五、常见误区与学习建议

误区一:先调机械臂,再补导航。实际上停靠位姿决定了机械臂是否可达,导航精度不足会让抓取规划反复失败。
误区二:忽视 TF 与时间戳。导航、视觉、机械臂各自使用不同坐标系或不同时间戳,是跨模块问题的高发区。
误区三:只追求单模块指标。导航成功率 95%、抓取成功率 95%,串联后可能只有 90% 左右,必须做端到端测试。

建议的学习方式是:每学完一个模块,就在同一套仿真环境中做一次小闭环验证,而不是等全部学完再联调。遇到问题时,先检查坐标系、时间戳、话题频率和状态机时序,再怀疑算法本身。

本课程后续所有代码与配置均以 ROS 2 为主,机械臂规划以 MoveIt 2 为主,视觉部分以 RGB-D 相机与点云处理为主。建议提前准备 Ubuntu 22.04 + ROS 2 Humble 环境,并熟悉基本的 launch 文件与参数配置。

下面给出一个最小的环境检查命令,用于确认 ROS 2 与关键功能包是否就绪:

# 检查 ROS 2 环境
source /opt/ros/humble/setup.bash
ros2 doctor

# 检查导航与机械臂相关包
ros2 pkg list | grep -E "nav2|moveit|robot_state_publisher|tf2"

# 查看当前 TF 树(运行机器人后)
ros2 run tf2_tools view_frames