通过 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\]:相机外参 → 就是我们要求的位姿;

  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 精定位 → 闭环控制对准 → 充电对接

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

相关推荐
机器觉醒时代2 小时前
英伟达GR00T N系列四代模型演进解析
人工智能·机器人·具身智能·vla模型
爆打维c3 小时前
详解 ROS计算图资源的命名与解析
机器人
Alphapeople3 小时前
夸父机器人使用案例
机器人
沫儿笙3 小时前
机器人焊接混合气智能节气装置
人工智能·机器人
红色星际4 小时前
进军具身机器人和Robotaxi的智驾公司
大数据·人工智能·机器人
kobesdu4 小时前
连接大模型与物理机器人-RoboNeuron让机器人真正“听懂人话”
机器人·开源·ros·人形机器人
yzk_20174 小时前
OpenClaw 完整部署指南:安装 + 三大 Coding Plan 配置 + CC Switch + 飞书机器人
arcgis·机器人·飞书
Lhan.zzZ5 小时前
笔记_2026.4.28_003
c++·笔记·qt·opencv
大江东去浪淘尽千古风流人物5 小时前
【RT-1】面向真实世界规模化控制的机器人Transformer
深度学习·机器人·transformer