第一讲:课程导论与预备知识
各位同学好,我是这门课的主讲。今天咱们聊聊联合建图——说白了,就是让机械臂和移动平台一起干活,共同构建一张环境地图。
我最早接触这个方向是在一个仓储机器人项目里。当时机械臂和底盘各干各的,结果机械臂抓取时总差那么几厘米。后来才发现,问题出在坐标系没对齐。嗯,这节课咱们就把这些基础打牢。
1.1 联合建图到底是个啥?
联合建图,全称是「机械臂与移动平台联合建图」。它解决的是这样一个问题:
- 移动平台(AGV/AMR)带着机械臂到处跑
- 机械臂在移动过程中执行抓取、操作等任务
- 两者需要共享同一个环境模型
你想想看,如果底盘建了一张地图,机械臂又建了一张地图,两张图对不上,那还怎么干活?
核心目标:让机械臂和移动平台在同一个坐标系下,实时构建并更新环境地图。
我在项目中遇到过最典型的情况:机械臂在移动平台上做视觉抓取。底盘SLAM建了全局地图,但机械臂的视觉系统只看到局部。如果不联合建图,抓取精度根本没法保证。
1.2 应用场景
联合建图不是花架子,它有很多实际用途:
- 仓储物流:移动机械臂在货架间穿梭,同时建图并抓取货物
- 家庭服务:扫地机器人加个机械臂,边清扫边整理物品
- 工业巡检:移动平台搭载机械臂,在工厂里巡检并操作阀门
- 医疗辅助:移动手术机器人,需要精确的环境感知
我记得有个做仓储的朋友跟我说,他们试过分开建图,结果机械臂抓取时误差超过5厘米。后来用了联合建图,误差直接降到毫米级。这就是联合建图的价值。
1.3 坐标系基础
坐标系是联合建图的命根子。搞不懂坐标系,后面全白搭。
咱们先看几个关键坐标系:
| 坐标系名称 | 符号 | 说明 |
|---|---|---|
| 世界坐标系 | W | 全局参考系,固定不动 |
| 基座坐标系 | B | 移动平台底盘中心 |
| 工具坐标系 | T | 机械臂末端执行器 |
| 相机坐标系 | C | 视觉传感器中心 |
它们之间的关系是这样的:
世界坐标系 (W)
↓ 移动平台位姿
基座坐标系 (B)
↓ 机械臂运动学
工具坐标系 (T)
↓ 手眼标定
相机坐标系 (C)
个人习惯:我一般把世界坐标系放在房间的某个固定角落,比如墙角。这样所有坐标系变换都有个参考。
为什么要搞这么多坐标系?因为每个传感器都有自己的参考系。激光雷达看到的是激光雷达坐标系下的点,相机看到的是像素坐标系下的图像。你得把它们都转换到同一个坐标系下,才能联合建图。
1.4 坐标系变换
坐标系变换说白了就是「从一个坐标系看另一个坐标系」。数学上用一个4x4的齐次变换矩阵表示:
T_W_B = [R_W_B t_W_B]
[0 1 ]
其中R是旋转矩阵,t是平移向量。
举个例子:如果移动平台在世界坐标系中的位置是(1, 2, 0),朝向是30度,那么:
T_W_B = [cos30 -sin30 0 1]
[sin30 cos30 0 2]
[0 0 1 0]
[0 0 0 1]
避坑指南:我曾经在项目里搞混了旋转顺序。ROS2里默认是ZYX欧拉角,但有些传感器用XYZ。一定要先确认旋转顺序,不然后果很严重。
1.5 ROS2基础回顾
ROS2是咱们这门课的主力工具。如果你之前用过ROS1,上手ROS2不难。但有几个关键点要注意:
- 节点:每个功能模块一个节点,比如底盘节点、机械臂节点
- 话题:节点间通过话题通信,比如/odom、/joint_states
- 服务:请求-响应模式,适合一次性操作
- TF树:坐标系变换的管理工具,联合建图的核心
我个人习惯用TF树来管理所有坐标系变换。你想想看,如果每个节点都自己算变换,那不乱套了?TF树统一管理,谁需要变换直接查树就行。
ROS2里常用的命令:
# 查看TF树
ros2 run tf2_tools view_frames
# 发布静态变换
ros2 run tf2_ros static_transform_publisher x y z yaw pitch roll frame_id child_frame_id
# 监听变换
ros2 run tf2_ros tf2_echo frame_id child_frame_id
小技巧:调试时先用view_frames看看TF树对不对。我见过太多人代码写完了才发现TF树连不上,那叫一个痛苦。
1.6 本章知识体系
下面这张图展示了咱们这章的核心逻辑:
这张图把咱们这章的内容串起来了。联合建图是目标,坐标系基础、坐标系变换和ROS2工具是三大支柱。后面每一章都会围绕这些展开。
1.7 本章小结
这节课咱们讲了:
- 联合建图的概念:让机械臂和移动平台共享地图
- 应用场景:仓储、家庭、工业、医疗
- 坐标系基础:W、B、T、C四个关键坐标系
- 坐标系变换:齐次变换矩阵
- ROS2基础:节点、话题、服务、TF树
嗯,内容不少。但这些都是后面章节的基石。你想想看,如果坐标系都没搞明白,后面建图、定位、路径规划全都会出问题。
我建议你课后做两件事:
- 打开ROS2,用view_frames看看你手头机器人的TF树
- 手动算一个坐标系变换,比如从基座到工具
下一节课咱们会深入讲机械臂的运动学模型。到时候这些坐标系知识就用得上了。
记住:联合建图的核心就是坐标系对齐。对齐了,万事大吉;对不齐,寸步难行。