通过 Marker(视觉标记)获取机器人位姿

文章目录

前言

  我用最简单、最实用的方式讲清楚:怎么从视觉二维码 / 标记 → 算出机器人的位置和朝向(位姿)。

现在的场景和需求是:

  • 机器人上有摄像头
  • 环境里贴了 ArUco 视觉标记(Marker)
  • 想通过摄像头看到 Marker → 解算出机器人在地图中的坐标和朝向

一句话解释如何得到:摄像头看到 Marker → 计算出摄像头相机相对于 Marker 的位姿 → 通过坐标变换(TF)得到机器人相对于地图 / 世界坐标系的位姿。

实现步骤

ROS/ROS2 中,通过视觉 Marker 解算机器人位姿,一般按四个标准步骤实现:

前期标定

首先完成两个关键标定:

  • 相机内参标定
    使用标定板得到相机内参矩阵和畸变系数,用于后续去畸变和位姿解算。
  • 2、手眼标定(外参)
    得到相机相对于机器人本体坐标系(base_link)的变换关系
    T_{base}^{camera} 或 T_{camera}^{base}。
视觉 Marker 检测与位姿解算

使用 ArUco :

1、启动相机驱动usb_cam ,发布图像话题。

2、运行 Marker 检测节点,识别图像中的 Marker ID 与角点。

3、基于 Marker 实际物理尺寸,通过 PnP 算法 解算相机相对于 Marker 的旋转矩阵和平移向量。

4、节点会输出 Marker 的位姿话题(pose),并发布 TF 坐标变换。

构建完整 TF 坐标树

关键是建立一条完整坐标变换链:

bash 复制代码
map → marker → camera  → base_link
复制代码
预先发布 Marker 在地图 / 世界坐标系下的固定位姿 TF
视觉节点发布 marker → camera
手眼标定结果发布 camera → base_link
TF 树会自动闭合,直接可查机器人在世界系下的位姿。
获取并使用机器人位姿

1、 通过 TF 监听 map → base_link,直接得到机器人 6DoF 位姿。

2、 可将该位姿用于:

  • 里程计漂移校正

  • 全局重定位

  • 精准停靠 / 抓取

    工程上通常会与轮速里程计、IMU 进行 EKF/UKF 融合,提升平滑度和鲁棒性。

总结

  整体流程就是:标定 → 检测解算 → TF 坐标变换 → 多传感器融合定位,最终得到机器人在世界坐标系下的精确位姿;

  详细流程总结:

  • 先做相机内参标定和相机与机器人的手眼标定,得到相机内参和坐标系外参。
  • 摄像头识别 ArUco这类 Marker,用PnP 算法解算出相机相对于 Marker 的位姿。
  • 已知 Marker 在世界 / 地图中的固定坐标,通过TF 坐标变换,把坐标系串起来: 世界→Marker→相机→机器人本体。
  • 最终直接得到机器人在世界坐标系下的完整位姿,工程上还会和里程计、IMU 融合,让定位更稳定。

常见问题解答

1、 为什么要用 PnP?

 因为已知 3D 物理点(Marker 角点)和 2D 图像点,

PnP 能唯一求解相机相对于 Marker 的旋转和平移,是视觉定位标准算法。

2、 只有一个 Marker 够吗?

 单个 Marker 可定位,但容易受遮挡、抖动影响。工程上一般用多个 Marker 构成标签板,增加观测约束,提高精度和稳定性。

3、怎么和导航融合?

 将视觉解算的位姿作为观测值,输入到 robot_localization 等滤波节点,与里程计、IMU 融合,输出平滑、连续、抗漂移的定位结果。

PnP 算法详解

  1. PnP 就是已知 2D点、3D点、内参 K,反解外参 R、t。
    简述:PnP 是根据已知的 3D 空间点和对应 2D 图像点,求解相机位姿的算法。在 Marker 定位中,用 Marker 四个角的 3D 坐标和图像 2D 坐标,结合相机内参,通过 PnP 解算出相机相对于 Marker 的旋转和平移,最终推导出机器人位姿

作用:已知N个3D空间点,以及它们在图像上的 2D 投影点,求解相机在空间中的6DoF位姿(旋转 R + 平移 t)。

  • 3D点:Marker 四个角点在Marker 自身坐标系下的坐标(已知);
  • 2D 点:这四个角在图像上的像素坐标(检测出来);
  • 求解:相机相对于 Marker 的 R、t;

2、 核心原理

根据小孔成像模型:

简单解释:

  • 左边:图像 2D 像素点;
  • 右边 K:相机内参(焦距、光心,已标定);
  • R\|t:相机外参 → 就是我们要求的位姿;
  • XYZ:3D 空间点
  1. 需要多少个点?
    P3P:最少 3 个点,可求出 4 组解,再用第 4 点验证
    Marker 正好 4 个角点,非常适合 PnP,点越多,鲁棒性越强,通常配合 RANSAC 去除外点噪声;
  2. 常用求解方法
    1、P3P
    几何解法,速度快,适合实时视觉定位。
    2、EPnP(Efficient PnP)
    精度高、速度快,OpenCV 默认用这个,是工程首选。

5、PnP 到底是怎么算出相机位姿的?

 可以这么理解:我在空间里放了几个已知精确位置的点(就是 Marker 的四个角),相机拍下它们,得到图像上的像素点。因为相机的成像规律是固定的(小孔成像),同一个空间点,相机站在不同位置、不同角度,拍到的像素位置是不一样的。

PnP 就是反过来算:根据这几组 "空间点 ↔ 像素点" 的对应关系,反推出相机当时站在哪儿、朝哪个方向拍;
精简后总结一句话:PnP 就是利用已知的 3D 点和对应的 2D 像素点,根据成像几何关系,反算出相机在空间里的位置和朝向。

用Marker 如何实现自动回充

实现思路:

1、机器人在导航快接近充电桩时,启动视觉检测寻找充电桩上贴的Marker。

2、通过 PnP 算法解算相机相对于 Marker 的精确位姿得到相机到充电桩的距离、偏角、俯仰角。

3、通过坐标变换,得到机器人base_link 相对于充电桩的位姿知道机器人离充电座还有多远、偏了多少角度。

4、进入精细对准阶段

机器人根据视觉位姿,进行小范围平移、旋转,一步步调整姿态,精准对准充电电极。 完成对接后缓慢后退 / 前进,实现自动充电

整个过程就是:

全局导航粗略靠近 → 视觉 Marker 精定位 → 闭环控制对准 → 充电对接

以上讲解如果帮到您请点赞加收藏哦,如有错误欢迎指正!

相关推荐
倍利福猎头公司官方账号17 小时前
大企业HR如何向猎头公司清晰传达AI岗位的技术需求?
人工智能·算法·机器人·求职招聘·业界资讯
由你创机器人20 小时前
工业具身智能机器人:感知到执行全链路软硬件搭配与长效运营思路
机器人·全栈开发·具身机器人·机器人定制
由你创机器人21 小时前
具身智能机器人定制交付、安全设计与验收落地要点
安全·机器人
AI的探索之旅21 小时前
OpenCV Day40 —— K-means 聚类与 EM 高斯混合
opencv·kmeans·聚类
AI的探索之旅1 天前
OpenCV Day39 —— 无缝克隆 seamless cloning(cloning_demo / cloning_gui)
人工智能·opencv
小豆庄1 天前
会议录屏忘打码后的技术复盘:本地自动化隐私脱敏方案
运维·opencv·目标检测·自动化·视频·纹理贴图
具身AGI1 天前
机器人基础模型开始按小时对外开放
机器人
罗迪尼亚的熔岩1 天前
联合kuka机器人, 海康visonmaster 的手眼9点标定方法
机器人·c#·工业相机·标定
海盗12341 天前
微软技术日报 2026-11-01:语言模型 API 免申请、8 个威胁组织被分四档
人工智能·microsoft·语言模型·机器人·人工智能aigc
小豆庄1 天前
监控视频脱敏:夜视/低光线条件下人脸检测的工程处理思路
opencv·计算机视觉·阿里云·视觉检测·音视频·视频