news 2026/6/10 22:51:29

激光三角 光平面标定-多高度

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
激光三角 光平面标定-多高度

工业 3D 视觉最高精度、最稳定的标定方案

我会从0 推导到最终平面方程,包含:多高度平台定义 → 几何约束 → 联立方程 → SVD 求解 → 测量公式 → Halcon 算子对应全程无跳步、无黑箱、纯数学

多高度平台标定 = 利用 N 个已知高度的标准平面,直接建立激光平面约束,不依赖标定板外参 R、t,直接求解

AXc​+BYc​+CZc​+D=0

1、问题分析

1.1 相机坐标系(Cam)

  • 原点:相机光心
  • Xc​:向右
  • Yc​:向下
  • Zc​:光轴向前(深度)

1.2 激光平面方程(待求)

π:AXc​+BYc​+CZc​+D=0(1)

  • (A,B,C):单位法向量
  • D:光心到平面的有向距离
  • 目标:求(A,B,C,D)

1.3 多高度平台定义

你有K 个固定高度平台:Zw​=h1​, h2​, ..., hK​每个高度h 已知、精确、固定

2. 多高度平台标定的 3 个强约束

对任意激光点 (u,v),必须同时满足

约束 1:点在激光平面上

AXc​+BYc​+CZc​+D=0

约束 2:点在已知高度平台上

Zw​=hk​

约束 3:针孔相机投影

3. 数学推导

1、像素->归一化坐标

2、带入光平面方程

3、高度平台的关键约束

4、联立约束(最关键)

5、构建超定方程组

6、SVD分解

Halcon 使用SVD 最小二乘解这个方程:

M=UΣVT

V 的最后一列作为最优解:β=V(:,end)

即得到:β=[A,B,C,D]T

最后 Halcon 会自动归一化法向量:A2+B2+C2=1

4、多高度平台的几何意义

  • 平台 1 高度 h1​ → 提供一条直线约束
  • 平台 2 高度 h2​ → 提供第二条直线约束
  • 平台 3 高度 h3​ → 提供第三条直线约束

三条直线确定唯一平面!

这就是为什么多高度平台 ≥3 个才能标定

算子解释

算子数学功能
create_calib_data创建标定模型
set_calib_data_height设置平台高度 h1​,h2​,h3​
find_laser_line提取激光线 (u,v)
image_points_to_world_plane计算 x,y
create_planar_laser_planeSVD 求解 A,B,C,D
get_laser_plane_param获取平面参数
intersect_ray_with_plane计算深度 Zc​=−D/(Ax+By+C)

多高度平台标定最终测量公式

为什么多高度平台精度远高于棋盘格?

  • 不计算外参 R、t少一层误差传递,精度提升 50%~300%
  • 高度 h 是物理真值约束极强
  • 不受姿态影响不会出现标定板倾斜误差
  • SVD 直接求解平面,数值稳定

多高度平台标定 = 用多个已知高度平面 → 构建直线约束 → 拟合激光平面测量 = 像素射线与平面求交点核心公式:

Zc​=−D/(Ax+By+C)

5、多高度标定调试步骤

1、准备工作

1. 硬件

  1. 线激光 + 相机固定好,绝对不能动
  2. 3~5 个已知高度的标准平台(平面度 < 0.01mm)
    • 例:h1=0mm,h2=10mm,h3=20mm,h4=30mm
  3. 平台表面哑光黑,避免反光
  4. 相机已标定内参 + 畸变

2. 软件(Halcon)

  1. 加载相机内参
  2. 准备好激光提取算法(高斯拟合 / 重心法)

2、步骤

第 1 步:放置第 1 个高度平台(h1)

  • 平台放平稳
  • 激光线完整打在平台上
  • 激光线清晰、不断裂、无反光
  • 拍摄 1 张图

第 2 步:提取激光线(亚像素)

  • 阈值分割
  • 亚像素重心拟合
  • 输出:一行整齐的 (u, v) 亚像素点

第 3 步:记录平台高度 h1

  • 在 Halcon 中设置:

    plaintext

    set_plane_height (h1)
  • 保存当前所有激光点坐标

第 4 步:更换第 2 个高度平台(h2)

  • 相机、激光绝对不动
  • 只换平台高度
  • 激光线依然清晰完整
  • 提取激光点 → 保存
  • 设置高度 h2

第 5 步:更换第 3 个高度平台(h3)

  • 同上
  • 至少3 个高度才能标定
  • 推荐4~5 个高度精度最高

第 6 步:Halcon 开始标定

算子:

plaintext

create_planar_laser_plane (CameraParam, HeightList, LaserPointsList, LaserPlanePose)

内部数学:

  • 把所有高度的激光点代入
  • 构建超定方程组
  • SVD 求解平面 A,B,C,D
  • 归一化法向量

第 7 步:查看标定结果(现场必查)

plaintext

get_laser_plane_param (LaserPlanePose, A, B, C, D)

检查:

  1. 平面残差 < 0.01mm
  2. 法向量单位化 A²+B²+C²=1
  3. 无明显倾斜突变

第 8 步:验证测量(现场必做)

  • 放一个已知高度的标准块
  • 测量高度
  • 误差 < 0.02mm 为合格
  • 误差 > 0.05mm 重新标定
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 22:47:50

确保PLC程序安全,编程时记住这几条就够了

想让程序跑得稳、数据不被乱搞&#xff0c;就得遵守一些基本的编程规范。下面这六条规则&#xff0c;能帮你有效提升程序的安全性和稳定性&#xff0c;值得记下来。规则一&#xff1a;验证实际值程序一开始&#xff0c;就要检查输入的变量值是不是在合理范围内&#xff0c;特别…

作者头像 李华
网站建设 2026/6/10 22:38:05

112、飞控中的数学库优化:arm_math与CMSIS-DSP

飞控中的数学库优化:arm_math与CMSIS-DSP 从一次炸机说起 去年夏天,我在调试一架四轴飞行器的姿态解算代码。飞控板用的是STM32F405,主频168MHz,跑着FreeRTOS。一切看起来都很正常——直到我做了个急转弯动作,飞机直接翻了个跟头栽进草丛里。 抓回log一看,姿态更新周期…

作者头像 李华
网站建设 2026/6/10 22:37:51

114、飞控中的数字信号处理基础

飞控中的数字信号处理基础 一次炸机引发的思考 去年调试一架四轴,悬停时电机偶尔出现“打嗝”现象——转速突然抖动一下,机身跟着晃。示波器抓PWM波形,发现控制信号上叠加了高频毛刺。当时第一反应是电调响应问题,换了三个品牌无果。最后用逻辑分析仪看IMU数据流,才发现…

作者头像 李华
网站建设 2026/6/10 22:33:24

AI助手如何重塑开发工作流

引言&#xff1a;AI助手如何重塑开发工作流从代码补全到智能代理的演进历程当前开发者面临的效率瓶颈与AI带来的变革Copilot时代的开发模式GitHub Copilot的核心功能与使用场景代码补全如何提升日常编码效率局限性&#xff1a;上下文理解深度与主动决策能力Agent技术的突破性能…

作者头像 李华
网站建设 2026/6/10 22:29:08

毕业设计 基于大数据淘宝用户行为分析

文章目录 0 简介1. 数据集说明2. 数据处理2.1 数据导入2.2 数据清洗 3.数据分析可视化3.1 用户流量及购物情况3.2 用户行为转换率3.3 用户行为习惯3.4 基于 RFM 模型找出有价值的用户3.5 商品维度的分析 0 简介 今天学长向大家介绍一个机器视觉的毕设项目&#xff0c;大数据电…

作者头像 李华