1. 课程导入
欢迎进入《移动操作机器人导航抓取工程》。本课程面向已经具备一定机器人学、ROS 与 Python/C++ 基础的学习者,目标是把“会移动”和“会抓取”这两项能力真正融合到一台机器人身上,并能在真实或仿真环境中完成从建图、定位、导航、目标识别到抓取放置的完整闭环。本章作为全课程导入,先建立统一的概念边界、知识地图与项目预期,为后续 29 章打下共同语言。
一、什么是移动操作机器人
移动操作机器人(Mobile Manipulator)通常由移动底盘与机械臂两大部分组成,底盘提供大范围移动能力,机械臂提供精细操作能力。二者组合后,机器人不再受固定工位限制,可以在仓库、实验室、医院、家庭等非结构化环境中自主移动并完成抓取、搬运、放置、开关门等任务。
从系统角度看,移动操作机器人不是“底盘 + 机械臂”的简单叠加,而是需要解决三个耦合问题:
- 运动耦合:底盘移动会改变机械臂基座位姿,机械臂运动也会影响整机重心与稳定性。
- 感知耦合:导航需要全局地图与定位,抓取需要局部高精度点云或视觉位姿,二者对传感器帧率、精度、视野要求不同。
- 任务耦合:先导航到哪个位置、以什么姿态停靠,直接决定机械臂能否在可达空间内完成抓取。
二、导航抓取工程的范畴
“导航抓取工程”覆盖从任务下达到抓取完成的全链路。它既包含传统移动机器人导航栈,也包含机械臂运动规划与视觉伺服,还包含二者之间的任务调度与坐标变换。可以把它理解为一条感知—决策—控制—执行的数据与信号链。
下面这张图给出本课程的整体知识框架与数据流关系,后续章节会沿着这条链路逐段展开。
三、学习目标
完成本课程后,你应当能够独立完成以下工作:
- 搭建移动操作机器人的软件框架,理解 ROS 2 中导航栈与 MoveIt 的协同方式。
- 完成地图构建、定位、全局与局部路径规划,并让底盘稳定到达目标停靠点。
- 完成相机标定、手眼标定与目标位姿估计,把视觉结果转换到机械臂基座坐标系。
- 使用 MoveIt 或自定义规划器完成抓取轨迹规划,并处理可达性、碰撞与奇异点问题。
- 把导航与抓取串成任务状态机,处理失败恢复、超时与安全停止。
- 在仿真与真机上完成端到端调试,能定位“导航到了但抓不到”这类跨模块问题。
四、整体知识框架与实战项目概览
课程按“基础—导航—抓取—耦合—实战”五段推进。下表给出模块划分与关键产出,便于你建立学习节奏。
| 阶段 | 核心内容 | 关键产出 |
|---|---|---|
| 基础篇 | 移动操作机器人定义、坐标系、TF、ROS 2 通信 | 可运行的机器人模型与 TF 树 |
| 导航篇 | SLAM、定位、代价地图、全局/局部规划、恢复行为 | 自主导航到指定停靠点 |
| 抓取篇 | 相机标定、手眼标定、目标检测、位姿估计、运动规划 | 稳定抓取指定物体 |
| 耦合篇 | 停靠位姿优化、任务状态机、时序同步、安全监控 | 导航+抓取端到端任务 |
| 实战篇 | 仿真环境搭建、真机部署、性能调优、故障复盘 | 可复现的完整项目报告 |
实战项目设定为:在仿真仓库场景中,机器人从起点出发,自主导航到货架前指定停靠点,识别货架上的目标物体,完成抓取并搬运到投放区。项目会贯穿全部章节,每章都会为这个项目增加一个可验证的能力模块。
五、常见误区与学习建议
误区二:忽视 TF 与时间戳。导航、视觉、机械臂各自使用不同坐标系或不同时间戳,是跨模块问题的高发区。
误区三:只追求单模块指标。导航成功率 95%、抓取成功率 95%,串联后可能只有 90% 左右,必须做端到端测试。
建议的学习方式是:每学完一个模块,就在同一套仿真环境中做一次小闭环验证,而不是等全部学完再联调。遇到问题时,先检查坐标系、时间戳、话题频率和状态机时序,再怀疑算法本身。
下面给出一个最小的环境检查命令,用于确认 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