这可以理解为一个分步的“感知-决策-行动”过程,其核心目标是让机器人回答三个问题:

- 我在哪里?
- 我周围有什么?
- 我该如何到达目标位置?
下面我们将其分解为几个核心部分来阐述。
核心概念:什么是3D视觉定位?
3D视觉定位就是利用摄像头(通常是深度相机或普通RGB相机)来获取机器人周围环境的3D信息,并通过对这些信息进行分析和理解,来确定机器人自身在某个参考坐标系下的精确位置和姿态(位置 + 旋转角度)。
这个过程也常被称为SLAM (Simultaneous Localization and Mapping),即即时定位与地图构建,机器人一边探索环境,一边绘制地图,并利用这张地图来定位自己。
核心原理:从2D图像到3D空间
视觉定位的基础是三维重建,即将2D的图像信息转换成3D的空间信息,这主要依赖于两种核心技术:

深度相机 - 直接获取3D信息
这是最直接的方式,深度相机能够直接测量每个像素点到相机镜头的距离(即深度值),从而生成一个深度图。
-
原理:
- 结构光: 相机发射预先设计好的红外光图案到物体表面,通过观察图案的形变来计算深度,类似用投影仪投射一个棋盘格,通过观察棋盘格的拉伸和扭曲来判断物体远近。
- ToF (Time-of-Flight, 飞行时间): 相机发射红外光脉冲,然后测量光线从发射到返回相机所花费的时间。
距离 = (光速 × 时间) / 2,这就像激光测距仪的原理。 - 双目立体视觉: 模拟人眼,使用两个或多个摄像头从不同角度同时拍摄同一场景,通过计算同一个物体在两个图像上的视差,利用三角测量原理来计算深度,视差越大,物体离得越近。
-
输出: 深度图,每个像素不仅有RGB颜色值,还有一个Z轴(深度)值,这样,每个像素点就构成了一个三维点
(X, Y, Z),大量的三维点就构成了点云。
普通RGB相机 - 间接计算3D信息
如果没有深度相机,也可以使用普通的单目或双目RGB相机来获取3D信息,但过程更复杂。

- 单目视觉: 只有一个摄像头,它无法直接测量深度,但可以通过运动恢复结构技术,通过相机自身的移动(平移或旋转),在不同时间点拍摄多张图像,通过图像中特征点的匹配来反向推算出相机的运动轨迹和周围环境的3D结构。
- 双目视觉: 原理与深度相机的结构光类似,但它使用可见光而不是红外光,通过两个摄像头拍摄到的图像,匹配同一物体在两张图上的像素,然后计算视差,从而得到深度信息。
定位流程:机器人如何“认路”?
有了3D信息(点云)后,机器人如何定位呢?这个过程通常分为三个关键步骤:
环境建图
机器人需要先“环境,它会在工作区域内移动,使用3D视觉传感器扫描周围,构建一个三维地图。
- 地图类型:
- 点云地图: 最原始的地图,由海量的3D点组成,优点是信息完整,缺点是数据量大,难以直接用于路径规划。
- 栅格地图: 将空间划分为一系列小方格(如10cm x 10cm),每个方格用一个值(如0表示空,1表示障碍物)表示,2D或3D的栅格地图非常适合路径规划算法。
- 拓扑地图: 将环境表示为一个由节点(位置)和边(路径)组成的图,这种地图抽象程度高,易于理解,但信息较少。
这个过程通常就是SLAM算法的核心任务,Cartographer, ORB-SLAM, LIO-SAM 等。
特征提取与匹配
这是定位的“大脑”,机器人需要将实时看到的景象与预先建好的地图进行比对,从而确定自己在哪里。
- 特征提取: 无论是实时图像还是地图中的图像,机器人都需要提取具有独特性和稳定性的特征点,这些特征点应该是易于识别的,比如物体的角点、边缘、纹理丰富的区域等,常用的算法有 SIFT, SURF, ORB 等。
- 特征匹配: 将实时图像中提取的特征点,与地图中存储的特征点进行一一匹配,想象一下,你在一个熟悉的房间里快速扫视一眼,大脑会自动将你看到的桌子、椅子、门等特征与记忆中的地图进行匹配。
位姿估计
通过特征匹配,机器人得到了两组对应点:一组是“当前视角下看到的特征点”,另一组是“地图中这些特征点的位置”,现在需要求解一个数学问题:如何将当前视角的坐标系,变换到地图坐标系中?
这个变换由两部分组成:
- 平移: 机器人相对于地图原点移动了多远。
- 旋转: 机器人相对于地图朝向哪个方向。
这个求解过程通常使用PnP (Perspective-n-Point) 算法或ICP (Iterative Closest Point) 算法。
- PnP (Perspective-n-Point): 当使用RGB相机或2D-3D匹配时使用,它知道2D图像上几个点的像素坐标,也知道这些点在3D地图中的实际坐标,然后通过几何关系反推出相机的位置和姿态。
- ICP (Iterative Closest Point): 当使用点云数据时使用,它将实时扫描到的点云与地图中的点云进行对齐,通过不断迭代,找到一个最优的旋转和平移矩阵,使得两个点云之间的距离最小。
机器人就得到了一个精确的6自由度位姿: (x, y, z) 表示位置, (roll, pitch, yaw) 表示旋转。
一个完整的例子:机器人抓取桌面上的杯子
让我们用一个完整的流程来串联所有原理:
-
初始化与建图:
- 机器人被放置在桌子附近,但它不知道自己在哪里。
- 它启动SLAM程序,缓慢移动头部或身体,用3D视觉传感器扫描整个桌面和周围环境。
- 在这个过程中,它构建了一张3D点云地图,并识别出桌子的平面、几个杯子、一个键盘等特征。
-
任务与定位:
- 接收到任务:“请抓取桌子上的蓝色杯子”。
- 机器人需要先找到自己现在的位置,它再次环顾四周,用摄像头捕捉当前帧的图像。
- 特征提取: 从当前图像中提取出杯子、桌子边缘等特征点。
- 特征匹配: 将这些特征点与第一步建好的地图中的特征点进行匹配。
- 位姿估计: 使用PnP或ICP算法,计算出机器人相对于地图的精确位姿,现在它知道了:“我正对着桌子,距离桌子边缘30cm,我的朝向是正北”。
-
目标识别与路径规划:
- 机器人知道了自己在哪,现在需要找到“蓝色杯子”,它可以在地图中搜索与当前视觉特征匹配的目标,或者使用目标检测算法(如YOLO)在实时图像中直接识别出杯子。
- 识别出杯子的3D坐标后,机器人进行路径规划,计算出一条从当前位置到杯子位置的、无碰撞的机械臂运动轨迹。
-
执行与闭环:
- 机器人按照规划的轨迹移动机械臂,成功抓取杯子。
- 在这个过程中,3D视觉系统会持续工作,不断进行定位,确保机器人即使因为地面不平或轻微移动导致位置发生微小偏移,也能实时修正,保持抓取的准确性,这就是闭环控制。
常用技术栈与挑战
常用技术栈
- 传感器: Intel RealSense, Orbbec, Kinect (深度相机); ZED, Intel T265 (双目相机); 激光雷达。
- SLAM算法: Cartographer, ORB-SLAM3, LIO-SAM, RTAB-Map。
- 视觉库: OpenCV, PCL (Point Cloud Library)。
- 机器人操作系统: ROS/ROS2 是目前机器人领域事实上的标准框架,集成了大量视觉定位相关的功能包。
主要挑战
- 光照变化: 光线太暗、太亮或光照剧烈变化会影响图像质量,导致特征提取失败。
- 纹理缺失: 在白墙、玻璃等缺乏纹理的表面上,很难提取到有效的特征点。
- 动态物体: 环境中有人或移动的物体时,它们会干扰地图的构建和定位的准确性。
- 计算复杂度: 实时处理高分辨率的3D点云和图像对计算能力要求很高。
- 运动模糊: 机器人快速移动时,图像会变得模糊,影响特征匹配。
机器人3D视觉定位的原理可以概括为:以3D视觉传感器为“眼睛”,通过SLAM算法构建环境的“记忆”(地图),再通过特征匹配和位姿估计算法,将实时感知到的“眼前景象”与“记忆”进行比对,从而精确地知道自己身在何处,并据此做出正确的行动决策。 这是一个融合了光学、几何、代数和人工智能的复杂而精妙的过程。
标签: 机器人3D视觉定位核心原理 机器人视觉定位技术基础 3D视觉定位机器人工作原理