6
云台视觉设计方案
李傲琦 edited this page 2026-04-24 04:11:41 +00:00
This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

云台和视觉部分的机械结构和硬件选型

yaw轴云台采用DM-G6220中空电机,pitch轴电机采用DM-J4310-2EC关节电机,使用3D打印技术制作云台框架,从而制作二维云台。

云台上安装DM-MC02 主控板,用于通过CAN通信控制两个电机,主控板上搭载了高性能的STM32H723VGT6芯片,同时板载了BMI088传感器用于获取角度信息。

云台上安装Jetson Orin Nano Super,连接海康全局相机,装配工业无畸变镜头,用于获取视觉信息。

软件系统设计

ROS2系统结构

  • 节点 A:相机驱动节点 (Camera Driver Node)
  • 节点 B:视觉算法节点 (Vision Node)
  • 节点 C:Web 图传及键盘操作节点 (Web Server Node)
  • 节点 D:云台节点(Gimbal Node)
  • 节点 E:底盘节点(Chassis Node)

云台部分

两个电机均为驱控一体,均具有速度闭环,主控板可按照通信协议控制速度环的目标值。同时,主控板读取BMI088传感器中的角度信息,在STM32芯片上计算PID控制量输出,输出量直接作为速度环的目标值,从而形成角度闭环。STM32通过UART接收从视觉处理器中传回的激光点误差信息,使用PID控制器计算控制量输出,对输出量积分后作为角度环的目标值,从而形成激光点位置闭环。另外,在系统中合适位置加入适当的Kalman估计器、低通滤波器和饱和器等,从而避免执行器超出物理限位、缓解比例冲击和微分冲击等。总之,采用三环串联PID结构,最终实现稳定的目标跟踪效果。

视觉部分

Jetson Orin Nano Super通过视觉处理获取像素误差,像素误差信息通过UART传输至STM32。算法流程大致为:图像采集与预处理、目标矩形检测、PnP解算、激光点位置解算、计算激光点误差、发送串口数据,其中激光点位置解算部分不依赖于画面中激光点色块,而是基于预先标定完成的电激光器和摄像头的绑定关系,通过数学模型进行解算。

激光点位置解算详细说明

本方案旨在通过视觉PnP算法解算相机位姿,结合预先标定的“相机-激光器”刚体关系,计算激光点在矩形平面(世界坐标系)上的精确位置。

1. 前置准备:相机内参标定

首先对相机进行内参标定,获取相机内参矩阵 K 和畸变系数。这是后续所有像素坐标转空间坐标的基础。

2. 第一阶段:激光器与相机的联合标定(离线)

由于激光器与相机刚性绑定,激光束在相机坐标系下表现为一条固定的空间直线。我们需要通过以下步骤求出这条直线的方程(起点与方向)。

  1. 数据采集:

    • 开启激光器,将激光点投射在平面标定板(如棋盘格)上。
    • 保持相机与激光器相对静止,改变整体姿态(距离、角度),拍摄多组(建议10组以上)包含标定板和激光点的图像。
  2. 解算相机坐标系下的激光点:

    • 外参获取:对每张图像使用PnP算法,根据标定板角点计算相机相对于标定板的外参矩阵 $T_{wc}$(即世界到相机的变换)。
    • 反投影求交:
      • 提取激光点的像素坐标 $(u, v)$。
      • 利用 K^{-1} 将其转换为归一化射线方向。
      • 关键步骤:利用标定板在相机坐标系下的平面方程与该射线求交,计算出激光点在相机坐标系下的三维坐标 $P_{c_i}$。
  3. 拟合激光线方程:

    • 收集所有图像对应的相机坐标系下的激光点 ${P_{c_1}, P_{c_2}, ...}$。
    • 使用最小二乘法或PCA(主成分分析)拟合这些点,得到相机坐标系下的激光直线方程。
    • 记录参数:
      • 方向向量 $\vec{d}_{cam}$:拟合直线的单位方向向量。
      • 基准起点 $O_{cam}$:选取该直线与相机坐标系 Z=0 平面的交点作为参考原点。

3. 第二阶段:在线测量与位置解算

标定完成后,即可在实际应用中实时计算激光点位置。

  1. 获取当前相机位姿:

    • 拍摄包含目标矩形平面的图像。
    • 根据成像原理:$\text{像素坐标} \approx K \cdot [\text{归一化平面}] (T_{wc} \cdot \text{世界坐标})$。
    • 已知像素坐标、内参 K 以及矩形平面的特征点世界坐标,利用PnP算法解算出当前的外参矩阵 $T_{wc}$(包含旋转矩阵 R 和平移向量 $t$)。
  2. 坐标变换至世界坐标系: 将标定阶段得到的激光线参数从相机坐标系变换到世界坐标系:

    • 变换方向向量(仅受旋转影响): \vec{d}_{world} = R^T \cdot \vec{d}_{cam}
    • 变换基准起点(受旋转和平移共同影响,即乘以 T_{wc} 的逆矩阵): O_{world} = R^T \cdot (O_{cam} - t)
  3. 求解世界坐标:

    • 构建世界坐标系下的激光射线方程:$L(s) = O_{world} + s \cdot \vec{d}_{world}$。
    • 平面约束:已知目标平面在世界坐标系中满足 $Z_{world} = 0$。
    • 联立求解:令射线的Z分量等于0,解出参数 $s$,代回方程求得 $X, Y$。
    • 最终输出:激光点在矩形平面上的世界坐标 $(x, y, 0)$。

前端界面

基于VUE框架,搭建前端界面,前端界面可以实时显示摄像头画面,并可以读取键盘操作,用于控制小车移动以及二维云台云台旋转。