如今视觉应用方面单纯依靠2D图像解决问题存在很多问题、稳定性差、定位不准确、还有配合机器人抓取方面只能抓高度一致的物品。
其实在Halcon算法库有非常强大的三维算法。
包括点云重建、激光三角法(2D相机加一个激光器即可),结构光相机、散斑相机。
三维的算法、物体尺寸测量、物体的三维定位、三维物体的匹配。

内容比较多、容我慢慢分享。
1.点云数据的获取

目前比较常用的3D相机(工业领域)、主要是结构光相机和散斑相机。散斑相机相对来说价格比较便宜但精度比较差5k rmb以内 Kinect 奥比中光 之类,精度5mm---30mm之间 并附带2d 图片信息、视野都比较大、体积小巧。
结构光相机 主要是 编码结构光 相机 和线激光相机。这种相机的精度根据视野而定。小视野相机 基本上都是um及精度
编码结构光相机 比较复杂。
但是线激光相机基本上就非常简单了、如果不是要求特别高的精度 完全可以用 2D相机加激光线 自己组装一台根据不同视野 精度基本 在 0.1mm到1mm之间。常规项目上能够满足。
先上一个详细的讲解(从论文里找到的)链接:https://pan.baidu.com/s/1bPApLfoX3SY0JMFNdOhLtQ 密码:78l7
等有时间的时候 再码字

更新:

先解析一下标定 激光三角法的例子calibrate_sheet_of_light_calplate.hdev

准备工作(搭建环境)
2D相机一个
选择2d相机时有个原则是帧率越高越好
目前usb3.0相机的帧率都比较高、但usb线是容易受到干扰丢帧。
根据三角成像原理、激光线条成像所占像素是在一定范围之内的
假设相机像素(1280X960)激光条成像范围跟激光器安装夹角有关。
有一点需要注意 超出相机景深时成像比较模糊 精度会变的很差
假设激光器与相机夹角 30度  结合相机实际景深 ,激光条成像像素基本在400像素以内变化
(1280X960)的分辨率有一部分像素是闲置用不上的。
此时需要设置一下相机的ROI 。
相机有一个特点、ROI越小相机的帧率越高

  例如网口相机、千兆网相机。相机最大的数据吞吐量是每秒千兆、
(1280X960)像素1228800 为 1228800字节  约等于 1.17MB
  网口数据量最大 120MB每秒
  因此 这种情况下 最大理论帧数 =120/1.17=102贞/s
  实际情况下 很难达到最高理论速度,因此相机的帧率受到限制
  但是 把相机的ROI改小 就会有另一种效果了。
  相机 数据传输 之传输 ROI设置部分数据。
  例如(1280X300)相机帧率就会提升很多(前提是相机支持这种模式)
  另外和成品的激光扫描相机相比 成品相机的帧率 会非常高400--600 贞每秒  !成品相机中 会使用移轴镜头(自行百度原理)进一步压缩像素范围。
}
将相机设置成多帧触发模式
设置相机的采集帧率(此参数标定扫描方向时会用到)
设置相机的采集贞数、此参数根据实际场景会 经常变化

扫描时间t=扫描长度/扫描速度
采集帧数 N=t*帧率;
采集帧数根据 扫描长度 和速度 动态变化。
相机 的多帧采集 通常是 给一次触发 以设置的采集速率 采集N张图片
达到设定帧数时自动停止。(需要注意的是相机的曝光时间一定要合理、如果曝光时间太大、是无法达到设定的采集速率的)

另外需要获得的图像是激光线条、可以根据实际情况使用滤波片提高抗干扰能力。
标定相机的时候、为了拍全标定板 可以将相机ROI放开。实际使用时在设置一个小的

激光器一个
运动机构
滑台、直线模组 或 机器人

总体上分三部分
1.相机内外参数的标定
2.光学平面的标定(激光器光线形成的平面标定)
3.运动方向的

1.第一部分比较常规 按照 标定相机 参数的方法进行即可
(初始化参数 采集图片 标定)
最终得到 
相机外参 CameraPose 
相机内参 CameraParameters

2.第二部分比较难理解(详细的原理说明参考网盘论文)
需要准备4张图片 
采集一张标定板图片  和当前状态下的激光线图片
调整高度与上一个采集位置形成高度差 再次采集一张标定板 图片和激光图片
按照流程标定即可。
最终得到 LightPlanePose

3.第三部分比较特别
按照正常标定时 采集在直线模组上 两个位置上的标定板图片完成标定即可。
得到 MovementPose
但是 如果保证 激光线 垂直于扫描方向进行扫描时 可以不用标定

MovementPose 是7位Htuple数据 第1位和第3位是激光线移动倾斜的矫正
如果对精度要求不高 并且保证 激光线与扫描方向大致垂直 填零即可 。
第二位的含义是 每采集一张图片 扫描多少距离 单位米。
可间接得到 MovementPose[1]=(扫描速度m/s)/(相机每秒的采样数量)
剩下4位直接填0即可。

未完!等待更新。。。。。。

激光三角法点云重建分享——halcon 方法的更多相关文章

  1. 激光三角测量(sheet of light)halcon示例详解 Reconstruct_Connection_Rod_Calib.hdev 三维重建

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/11555100.html 前言:最近项目用到halcon的3d模板匹配,三维重建,相机标定,所以 ...

  2. photometric_stereo halcon光度立体法三维表面重建

    官方文档翻译 名称: photometric_stereo -- 通过光度立体技术重建表面. 签名: photometric_stereo(Images : HeightField, Gradient ...

  3. 恒天云技术分享系列5 – 虚拟化平台性能对比(KVM & VMware)

    恒天云技术分享系列:http://www.hengtianyun.com/download-show-id-14.html 概述 本性能测试报告将详细陈述各虚拟化平台基准性能测试的主要结论和详细结果. ...

  4. 恒天云技术分享系列4 – OpenStack网络攻击与防御

    恒天云技术分享系列:http://www.hengtianyun.com/download-show-id-13.html 云主机的网络结构本质上和传统的网络结构一致,区别大概有两点. 1.软网络管理 ...

  5. 恒天云技术分享系列3 – KVM性能调优

    恒天云技术分享:http://www.hengtianyun.com/download-show-id-11.html KVM是什么 KVM 是 kernel-based Virtual Machin ...

  6. 【腾讯云的1001种玩法】几种在腾讯云建立WordPress的方法(Linux)(二)

    版权声明:本文由张宁原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/126547001488207964 来源:腾云阁 ht ...

  7. 融云技术分享:解密融云IM产品的聊天消息ID生成策略

    本文来自融云技术团队原创分享,原文发布于“融云全球互联网通信云”公众号,原题<如何实现分布式场景下唯一 ID 生成?>,即时通讯网收录时有部分改动. 1.引言 对于IM应用来说,消息ID( ...

  8. 融云技术分享:融云安卓端IM产品的网络链路保活技术实践

    本文来自融云技术团队原创分享,原文发布于“ 融云全球互联网通信云”公众号,原题<IM 即时通讯之链路保活>,即时通讯网收录时有部分改动. 1.引言 众所周知,IM 即时通讯是一项对即时性要 ...

  9. 3D点云重建原理及Pytorch实现

    3D点云重建原理及Pytorch实现 Pytorch: Learning Efficient Point Cloud Generation for Dense 3D Object Reconstruc ...

随机推荐

  1. 错误解决记录-------------验证启动HDFS时遇到的错误

    主要解决验证启动HDFS时: 1) jps:bash: jps: command not found... 原因:主要是java/bin 环境变量没配置好. 解决办法: 在  ~/.bash_prof ...

  2. BZOJ 4644

    可以把修改当成删除再插入一个新的, 线性基不容易删除,就用线段树分治 好像手写的bitset在这里很慢 #include<bits/stdc++.h> using namespace st ...

  3. 201771010118《面向对象程序设计(java)》第四周学习总结

    1.实验目的与要求 (1) 理解用户自定义类的定义: (2) 掌握对象的声明: (3) 学会使用构造函数初始化对象: (4) 使用类属性与方法的使用掌握使用: (5) 掌握package和import ...

  4. __x__(11)0906第三天__图片标签

    图片标签  <img src="images/1.gif" alt="冰河世纪的大松鼠" width="80%" /> Hell ...

  5. Servlet 参数

    1.应用参数,在web.xml配置,所有Servlet共用 <context-param> <param-name>driver</param-name> < ...

  6. Unity进阶----AssetBundle_01(2018/10/30)

    AssetBundle作用和定义 1).AssetBundle是一个压缩包包含模型.贴图.预制体.声音.甚至整个场景,可以在游戏运行的时候被加载: 2).AssetBundle自身保存着互相的依赖关系 ...

  7. iview menu组件手动收起与展开

    本文主要介绍menu组件在有子菜单时如何手动的展开与收起. 展开: 在需要展开的地方先设置openname变量如this.openname = ["设置"]; 再在$nextTic ...

  8. C++中的Public 、Private、Protected 区别

    第一: private,public,protected的访问范围: private: 只能由该类的成员函数.友元的成员函数访问,不能被其他类的成员函数访问,即使是该类的对象也不能直接访问 publi ...

  9. 汇编入门——使用DOSBox写一个HelloWorld以及相关软件安装

    0.0.0) 在D盘建立一个ASM文件夹 0.0.1) 放入所需要的文件 1所标示的红色框为必须要存在的文件,要处理汇编文件.百度网盘中下载. 2自己编写的汇编(asm)文件. 3编译汇编自己生成的文 ...

  10. task CancellationTokenSource

    使用CancellationTokenSource对象需要与Task对象进行配合使用,Task会对当前运行的状态进行控制(这个不用我们关心是如何控制的).而CancellationTokenSourc ...