gclx番外篇:通信
引子通信方式有很多种,常见的网络通信,如TCP/UDP、串口通信和IO通信;如电脑跟PLC之间常见的是网络通信,TCP/UDP是基础架构,各个厂商在此基础之上定义了各种自家的通信协议;作为最基础的,我们在gclx框架下实现了TCP/UDP的数据通信,主要包含以下几个方面:1、通信设备管理&通信协议编写;2、结点全局数据暴漏;3、数据接收端解析(主要在拍照模块解析:如条形码、触发等);4、发送结点数据绑定。 通信设备&协议管理通信设备和协议作为一个单独的模块进行管理,主要包含链接参数设置、通信协议管理等,如下图所示,以下以UDP为例说明; UDP通信不同于TCP,不需要Connect即可通信,是一种只管发不管结果的通信方式,主要用于流媒体对稳定性要求不是很高的场景,在初始化时需要本地需要绑定到一个端口上,发送数据时,根据服务端的ip及port号进行发送; 数据格式:支持固定长度及分隔符模式,固定长度每次发送接收数据长度一致,每个数据位置及长度需要配置,分隔符模式(如按照','进行分割),只需要位置信息,长度不需要,分隔符模式下目前仅支持纯字符串通信...
矩阵的旋转平移正变换及反变换
假设一个点P(x,y,z),旋转矩阵T,平移向量V,则旋转后的平移表达式为T*P+V,此处采用右乘准则,用矩阵表示为: [T V;0 1]*[T0 V0;0 1]=[T*T0 T*V0+V;0 1] 其中T0为P原始坐标系的旋转矩阵,V0是P原始坐标系的评议向量,则相应的逆变换为 [inv(T) - inv(T)*V ; 0 1]*[T0 V0;0 1]=[inv(T)*T0 inv(T)*V0-inv(T)*V;0 1] 从上式可以看出,正变换在先旋转后平移的情况下,其逆变换是先平移后旋转
直线拟合之最小二乘法AX+BY+C=0
最小二乘法拟合直线,对于大多数人都不是很陌生,直线方程 y=kx+b,令sum((y-kx-b)^2),分别对k和b求导便可求出最佳的参数,但是如果遇到诸如“X=5”这样的直线方程,又该如何呢?这时候就不再适用了,参考这个方法,这样拟合出来的才是直线的一般方程。 Let the line sought be Ax + By + C = 0, with no restriction on A, B,and C, except not both of A and B are zero. Then the distance from apoint (x[n],y[n]) to this line is given by d[n] = |A*x[n]+B*y[n]+C|/sqrt(A^2+B^2). Then the sum of the squares of the distances of the r points from theline is F(A,B,C) = SUM d[n]^2 = SUM (A*x[n]+B*y[n]+C)^2/(A^2+B^2). H...
多频相移外差相位展开算法
原理 参数设置12345678910111213141516clc;clear;close allT1=70; % 周期T2=64;T3=59;T1=76;T2=57;T3=37;row=1140;col=912;f1=1/T1; %频率f2=1/T2;f3=1/T3;f123=f1*f2*f3/(f1*f2+f2*f3-2*f1*f3) %3频合成后的频率为1L1=col/T1; % 单周期像素个数 单位:像素/周期, 即可理解位波长L2=col/T2;L3=col/T3;L2048=L1*L2*L3/(L1*L2+L2*L3-2*L1*L3) 多频条纹生成1234567891011121314151617181920212223242526272829303132333435363738394041424344%% f1 生成4频条纹x=1:col;theta1=[0,pi/2,pi,3*pi/2];I1=127.5+127.5*sin(theta1(1)+2*pi*x/L1);I2=127.5+127.5*sin(theta1(2)+2*pi*x/L1);I3=12...
多频外差相位展开李中伟
原理本文参考文献:基于数字光栅投影的结构光三维测量技术与系统研究 12345678910111213F12=F1-F2;F12(F1<F2)=F12(F1<F2)+2*pi;F23=F2-F3;F23(F2<F3)=F23(F2<F3)+2*pi;F12=round(F12*10^8)/10^8;F23=round(F23*10^8)/10^8;F123=F12-F23;F123(F12<F23)=F123(F12<F23)+2*pi;figure,imshow(F123,[]);FF12=2*pi*round((F123*L123/L12-F12)/(2*pi))+F12;FF1=2*pi*round((FF12*L12/L1-F1)/(2*pi))+F1; 实验结果
单幅图像远心镜头畸变标定及矫正
本文参考文献:Lens distortion correction using ideal image coordinates;但是最小化方法不同,本文采用了非线性优化,而且原文非线性优化方程似乎不太对 基本步骤步骤一:提取mark点提取mark点坐标,尽量让图像中心对齐某一个mark点中心,视野布满mark点,这一步不多介绍 步骤二:构建标准mark点基本方法:以离图像中心最近的一个mark点为中心,选择其领域的8个mark点,计算平均角度,并以中心点4领域mark点距离平均值为Gap,构建理想mark点,此时理想点应该是等间距及绝对平行和垂直的 步骤三: 初始化畸变参数及图像中心本文计算像素当量,是利用步骤2中Gap和物理距离直接计算的,而且没有考虑角度这个参数,原文不是很理解,有懂的大家可以一起交流畸变参数初始化参见:a flexible new technique for camera calibration 步骤四: 非线性优化畸变模型如下所示 畸变模型是建立在无畸变坐标系下面的,就是用无畸变求解畸变坐标下的坐标是正向解,反之是反向解,反向解会比较麻烦,但是原文最优...
一种非线性相位误差的全场补偿方法
参考文献:一种非线性相位误差的全场补偿方法 原理误差平面求解相位误差补偿
QT 调用QT界面DLL
DLL导出定义 Common_Global.h1234567#if defined(COMMON_LIBRARY)# define COMMON_EXPORT Q_DECL_EXPORT#else# define COMMON_EXPORT Q_DECL_IMPORT#endif 定义接口 IGrr.h1234567891011#pragma once#include "../Common/Common_global.h"class QDetectObj;class COMMON_EXPORT IGRR{public: virtual void Show() = 0;}; ##定义界面导出类QGrrUI.h 123456789101112131415161718192021#include <QObject>#include "IGrr.h"#include "GRR.h"class COMMON_EXPORT QGrrUI : public IGRR{public: Q...
Object c 调用标准C/C++代码
因项目需求,需要在mac平台下开发程序, 其中引用了标准c/c++代码,涉及混合编程, 其实很简单, 只需要在工程中添加.mm文件及.h文件即可,.mm文件就是我们常见的.cpp文件,包含所有的头文件及实现函数,但是出口函数前面要添加 extern "C" void Function() 而头文件里面, 只有函数的声明, 同时将.cpp文件修改为.mm文件, xcode编译器选项选择为自动根据文件选择编译器即可
Hello World
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub. Quick StartCreate a new post1$ hexo new "My New Post" More info: Writing Run server1$ hexo server More info: Server Generate static files1$ hexo generate More info: Generating Deploy to remote sites1$ hexo deploy More info: Deployment
