找回密码
 立即注册
搜索
查看: 76|回复: 0

PNP算法:一种求解打靶问题的思路

[复制链接]

2

主题

0

回帖

14

积分

新手上路

积分
14
QQ
发表于 2025-8-1 22:01:21 | 显示全部楼层 |阅读模式
本帖最后由 hust_smartcar 于 2025-8-1 22:05 编辑

一.引言
        在完成自动瞄准打靶任务时,我们发现传统的处理策略是基于时序预测的间接控制,即通过识别并预测出靶子的位置进行打靶,这种方法对目标运动模型较为依赖,响应不够快速和稳定。因此,我们想到了基于三维几何的直接控制方案。这种方案的核心是利用PNP算法得到靶子在相机坐标系下的三维位置信息。

二.实现流程和思路
   
   
     坐标变换到激光笔系外参矩阵: 相机到激光笔3×4变换矩阵变换过程将相机坐标转换为激光笔坐标输出: 靶心激光笔坐标计算云台角度目标约束: 旋转后x=0,y=0计算步骤计算距离计算俯仰角计算偏航角角度计算原理俯仰角控制上下方向偏航角控制水平方向输出: 云台控制角度验证与优化重投影验证3D点投影回图像检查误差迭代优化使用LM算法优化光束平差法
     首先分析问题,我们将整个流程分解为几个主要部分
  • 输入:YOLO框的图像和框的信息,即检测到的靶子在图像中的位置
  • 目标输出:云台的两个角度(pitch和yaw)
  • 中间步骤:

    • 利用相机内参和靶子的图像坐标,通过PNP算法,得到靶子在相机坐标系下的三维坐标信息,这一步的核心在于得到靶子的深度信息。
    • 利用相机到激光笔的外参矩阵进行变换,将靶子在相机坐标系下的坐标转换到激光笔坐标系下。
    • 利用云台到激光笔的外参变换矩阵,将靶子在激光笔坐标系下的坐标进行转化,求解方程得到云台角度信息。
    • 通过约束条件和角度信息,对云台进行控制。


三.核心算法分析:PNP算法
        PnP(Perspective-n-Point) 是计算机视觉中用于求解相机位姿(位置和方向)的经典算法,通过已知的3D空间点及其在2D图像上的投影点,结合相机内参,计算出相机坐标系相对于目标坐标系的旋转矩阵(R)和平移向量(t)。

(一)数学原理
        核心是求解投影方程:
          s * [u, v, 1]ᵀ = K * [R | t] * [X, Y, Z, 1]ᵀ

        其中:
  • (u,v):图像上的2D像素坐标
  • (X,Y,Z):3D世界坐标
  • K:相机内参矩阵 [fx, 0, cx; 0, fy, cy; 0, 0, 1]
  • s:比例因子(深度)
  • [R|t]:待求的外参矩阵(3×4)

    (二)EPNP算法步骤

  • 控制点选择:在3D点云中选取4个非共面控制点
  • 权重计算:所有3D点表示为控制点的加权和
  • 建立方程:利用投影关系构建线性方程组
  • SVD求解:奇异值分解求解控制点在相机坐标系的位置
  • 计算位姿:通过控制点坐标求解R和t

    (三)重投影验证

  • 将计算出的3D点重新投影到图像平面
  • 计算与原始点的误差:ε = Σ||p_proj - p_actual||²
  • 典型阈值:重投影误差 < 0.5像素


    四.优势分析

        首先,与传统方法相比,这个方案的核心差异在于目标位置信息的获取方式和控制逻辑的基础。
        通过PNP算法直接求解相机坐标系下的三维位置,再切换到激光坐标系,得到的是目标在激光发射系统坐标系的绝对三维坐标,物理意义明确,减少了因运动模型不匹配导致的误差。
        通过三维坐标直接计算激光打角,属于三维空间的直接几何控制,理论上精度更高,控制逻辑更贴合物理几何关系。
        这种方案不依赖目标的运动历史,每次都是基于当前时刻的绝对三维位置计算打角,对目标的瞬时运动状态更加敏感,响应更加及时。
        PNP算法每次都是独立求解三维位置,坐标转换是基于外参矩阵的刚性变换,可以减少累积误差,提升长期稳定性。

         详细参考代码见附件PDF


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表