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

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

相关推荐
研來如此1 分钟前
OpenCV官方下载界面下载opencv库
人工智能·opencv·计算机视觉
成都方航科技1 小时前
FA6无人巡逻机器人 L4级无人驾驶安保巡逻车 AI摄像头劝导系统解决方案
机器人
workflower3 小时前
矿用机器人人工智能安全与治理体系
人工智能·安全·机器学习·机器人·云计算·无人机
Axis tech7 小时前
SenseGlove Nova2 触觉手套:重新定义工业机器人遥操作体验
机器人
程序人生8887 小时前
PDF 转 Word 版式错乱、表格丢失?DocConverter Web 格式互转引擎的保真实践
前端·人工智能·opencv·机器学习·pdf·word
HUANGZHENXUAN12311 小时前
代码解析(一):从 `opencv_basics/` 说起
opencv
水圈模拟11 小时前
世界模型:让 AI 预判水怎么流
人工智能·机器人
深圳多奥智能一卡(码、脸)通系统11 小时前
实现机器人、梯控与电梯的无缝对接,成为了一个亟待解决的痛点
机器人·agv·机器狗·门禁·梯控·amr
做个有深度的老李12 小时前
中小机加工车间协作机器人落地难点|从集成交付能力角度选型
大数据·人工智能·机器人·自动化·柔性机器人
数智工坊13 小时前
视觉SLAM第2讲|初识SLAM:经典框架、传感器选型与工程环境全梳理
人工智能·深度学习·数码相机·机器人