C#之Delta并联机械手的视觉相机标定与形状匹配

科技   科技   2024-06-26 07:03   广东  

点击上方正运动小助手,随时关注新动态!



本文导读


上节课程我们讲述了如何建立Delta并联机械手正逆解,本节课程我们主要讲解如何通过C#语言开发正运动Delta并联机械手视觉流水线同步分拣的视觉部分。




VPLC711硬件介绍


VPLC711是正运动推出的一款基于x86平台和Windows操作系统的高性能机器视觉EtherCAT运动控制器,具备强大的运算能力和灵活性。它具有出色的实时性能和多路高速硬件输入与多路高速PSO输出,能够精准控制多轴同步运动,并与外部设备实现多协议的高速通信。

VPLC711支持多种硬件接口和通信协议,方便与其他设备的连接和集成。除此之外,VPLC711还具备视觉处理功能,能够实时处理图像数据,实现视觉检测、测量和定位等应用。

VPLC711内置Windows运动控制实时内核MotionRT7,形成一种开放式IPC形态实时软控制器/软PLC,为用户提供灵活集成的运动控制+视觉一体化解决方案。


VPLC711硬件参数

1.采用x86高性能CPU,EtherCAT可支持1ms 64轴同步运行;

2.板载RS232,RS485,EtherNet*5,EtherCAT,USB3.0*4硬件接口;
3.板载20DI,其中4个高速色标锁存,2组高速单端编码器;
4.板载20DO,其中4个高速单端脉冲轴,4组高速PWM;

5.支持DVI-D,HDMI显示,支持双网口不同IP设置。



VPLC711视频介绍
想要了解更多关于VPLC711的详情介绍,可以点击x86平台实时Windows机器视觉EtherCAT运动控制器VPLC711查看。


C#语言进行Delta并联机械手的开发之运动库和视觉库的添加

1.在VS2010菜单“文件”→“新建”→“项目”,启动创建项目向导。

2.选择开发语言为“Visual C#”和.NET Framework 4以及Windows窗体应用程序。

3.找到厂家提供的光盘资料里面的C#函数库,路径如下(32位库为例)。

1)进入厂商提供的光盘资料找到“04PC函数”文件夹,并点击进入。

2)选择“函数库2.1”文件夹。

3)选择“Windows平台”文件夹。

4)根据需要选择对应的函数库,这里选择32位库。

5)解压C#压缩包,里面有C#对应的函数库。

6)函数库具体路径如下。

4.将厂商提供的C#库文件以及相关文件复制到新建的项目中(注意这里面的PC函数库默认提供的是运动库,如果使用视觉功能还需要获取视觉库,视觉库可以找厂商的相关销售或技术人员获取)。
1)将Zmcaux.cs(运动库)和Zvision.cs(视觉库)文件复制到新建的项目里面中。

2)将zauxdll.dll、zmotion.dll和zvision.dll文件放入bin\debug文件夹中。

5.用vs打开新建的项目文件,在右边的解决方案资源管理器中点击显示所有文件,然后鼠标右击Zmcaux.cs与 Zvision.cs文件,点击包括在项目中。

6.双击Form1.cs里面的Form1,出现代码编辑界面,在文件开头写入using cszmcaux,using ZVision并声明控制器句柄g_handle




PC函数介绍

1.PC函数手册可在光盘资料查看,具体路径如下。

2.链接控制器,获取链接句柄。

指令

ZAux_OpenEth

指令原型

int32  __stdcall  ZAux_OpenEth(char  *ipaddr, ZMC_HANDLE * phandle)

指令说明

以太网连接控制器。

输入参数

参数名

描述

Ipaddr

连接的IP地址

输出参数

参数名

描述

Phandle

返回的连接句柄

返回值

成功返回值为0,非0详见错误码说明。

指令示例

网口连接控制器

详细说明

1.网口采用RJ45标准网线接口,通讯速率为100Mbit/s。

2.控制器出厂的IP地址为192.168.0.11,端口号为502。对端通讯设备需与控制器处于同一网段,才可进行连接。

3.最常用的控制器连接方式。

4.ZMC_HANDLE 类型:Zmotion库中,专门用于控制卡连接数据定义类型;

3.相机扫描接口说明

指令

CAM_SCAN

指令原型

int32 __stdcall CAM_SCAN(ZMC_HANDLE handle, const char* type);

指令说明

相机扫描

输入参数

参数名

描述

handle

连接标识。

type

扫描的相机品牌根据相机品牌底层调对应的驱动。

输出参数

/

返回值

成功返回值为0,非0详见错误码说明。

指令示例

机械手的建立

详细说明

type 相机品牌具体说明:

"zmvcbase"    ----USB免驱摄像头

"zmotion"      ----正运动相机

"mvision"      ----海康威视相机

"basler"       ----basler相机

"mindvision"   ----迈德威视相机

"huaray"       ----大华相机

"dvpcamera"    ----度申相机

"daheng"       ----大恒相机

4.相机采集图像。

指令

CAM_GET

指令原型

int32 __stdcall  CAM_GET(ZMC_HANDLE handle, const char* img, uint32 bufId);

指令说明

以太网连接控制器。

输入参数

参数名

描述

handle

连接标识。

img

获取的图像。

bufId

指定的缓存id,序号为0开始

返回值

成功返回值为0,非0详见错误码说明。

指令示例

/

详细说明

/

5.用图像创建模板。

指令

ZV_SHAPECREATERE

指令原型

int32 __stdcall  ZV_SHAPECREATERE(ZMC_HANDLE handle, const char* img, const char* re, const char* model, float angleStart, float angleEnd, float scaleMin, float scaleMax, uint32 thresh, uint32 levelNum, uint32 ptReduce, float angleStep, float scaleStep, uint32 minContLen);

指令说明

用图像创建模板

参数说明

参数名

描述

handle

连接标识。

img

制作模板的图像,输入参数,8U单通道

re

指定模板图像的有效区域,在模板图像中 re 对应的部分将用来创建模板。

model

制作的模板,输出参数

angleStart

角度匹配的起始值,由图像坐标系确定,范围[-360,360),若超出范围会自动归一化到此范围。

angleEnd

角度匹配的终止值,范围[-360,360),angleEnd要大于等于angleStart,否则报错,并且差值要小于等于360。

scaleMin

匹配缩放最小比例,范围[0.5, 2.0]。

scaleMax

匹配缩放最比例,范围[0.5, 2.0]

thresh

提取边缘轮廓的对比度阈值,范围[0,255],为0时内部会选取一个合适的阈值,对比度越大提取的边缘轮廓强度就越强,此参数可控制提取强边缘或弱边缘,阈值越小提取的弱边缘就越多,同时可能会带来一些噪声

levelNum

金字塔层数,范围[0,无穷),层数越小匹配越耗时,为0或层数过大时会自动选取合适层数,建议为0

ptReduce

优化减少模板点数量,如果设置在查找模板时贪婪度需设置低一些,0-不减少,1-轻微减少,2-减少适中,3-大量减少

angleStep

角度步长,范围[0,12],步长越小精度越好但匹配越耗时,步长越大精度越差但匹配越不耗时,步长设的太小不合理或者为0时内部会自动选择一个合适的步长,建议为0

scaleStep

缩放步长,[0,scaleMax - scaleMin],步长越小精度越好但匹配越耗时,步长越大精度越差但匹配越不耗时

minContLen

最小轮廓长度,小于此长度的轮廓将不会被提取,此参数可控制删除一些短小轮廓

返回值

成功返回值为0,非0详见错误码说明。

指令示例

/

详细说明

注:创建模板时通常选取轮廓分明且具有唯一特性的目标作为模板,特征最好不要具有对称性。模板特征数据量大小通常与模板大小和模板参数有关,其数据量与模板大小、模板轮廓的复杂度、旋转角度范围、缩放范围成正比。模板越大使用的角度步长越小,在同等角度范围下特征数据量就越大,因此匹配时就越耗时。创建模板和匹配具有超时机制,默认的均是5000ms,当创建模板超时可以通过适当地调整模板参数减小模板特征数据量(如缩放范围调小点或使用轮廓点精简参数ptReduce,此参数默认值为0即不精简轮廓点,精简的过于严重可能会影响匹配精度),或者是通过手动设置超时时间,如ZV_SETSYSDBL("ShapeCreateTime out", 5000),ZV_SETSYSDBL("ShapeFindTimeout", 5000)。创建模板也具有内存保护机制,当使用过大的模板图像创建具有缩放的模板时,占用的内存达到保护临界值时,此时报内存错误导致模板创建失败可以通过调整模板参数减少数据量,如使用ptReduce参数精简一些点,或阈值thresh设大点只提取更为明显的轮廓特征。

6.形状匹配并输出轮廓状态。

指令

ZV_SHAPEFINDST

指令原型

int32 __stdcall  ZV_SHAPEFINDST(ZMC_HANDLE handle, const char* model, const char* img, const char* matchs, const char* stats, float minScore, uint32 nums, float minDist, uint32 minThresh, uint32 accuracy, float speedspeed, uint32 polar);

指令说明

形状匹配并输出轮廓状态。

参数说明

参数名

描述

handle

连接标识。

model

要匹配的形状模板

img

平移旋转参数

matchs

待匹配的搜索图像,不能和模板图片1:1等比大小,8U单通道

stats

模板轮廓点每个点的匹配状态,m x n图像类型,每行一个模板轮廓,行上依次存储每个轮廓点的匹配状态 ,即对于某个轮廓点来说,匹配分数大于等于设置分数时为1(匹配成功),小于匹配分数时为0(匹配失败,为空时则不输出轮廓点匹配状态,不为空时则输出轮廓点匹配状态,此输出参数结合绘制模板指令ZV_DRASHAPEMATCH可将匹配成功点和失败点绘制不同的颜色

minScore

最小匹配分值,(0,100],分值越高匹配的目标越准确,越低容易将非目标当成目标

nums

最大匹配数量,[0, 无穷)

minDist

匹配最小距离

minThresh

目标轮廓的最低边缘阈值,minThresh小于零时将使用创建模板时的阈值

accuracy

匹配精度,0-像素精度,1-插值精度,2-最小二乘拟合精度,3-多次迭代的最小二乘拟合精度

speedspeed

匹配速度0-10,越大速度越快,但可能丢失目标,大于10时取10

polar

匹配极性0正极性、1负极性、2任意极性

返回值

成功返回值为0,非0详见错误码说明。

指令示例

/





C#例程建设之视觉相机标定与形状匹配

1.视觉配置文件的下载

因为正运动的视觉算法是在控制器里面执行的,所以上位机开发前需要先在控制器里面定义好视觉处理的相关变量。
正运动控制器里面的视觉变量统一使用ZVOBJECT来修饰,我们可以新建一个.bas的文件,然后输入“GLOBAL ZVOBJECT ZVOBJ(1000)”进行视觉变量数组的定义,保存后通过上位机接口在上位机系统初始化的时候把这个.bas文件下载到控制器即可。


//下载相关脚本到控制器,进行视觉变量的定义string BasPath = "";BasPath = string.Format(@"{0}", Application.StartupPath) + @"\Icon\视觉变量定义.bas";//.bas文件下载到控制器zmcaux.ZAux_BasDown(g_Handle,BasPath,0);
2.相机标定

1)相机标定操作步骤

2)相关功能代码
/************************************************************************************'任务编号:无'函数功能:视觉提取标定板上实心圆的像素坐标,获取标定板圆心的像素坐标的矩阵'Input:无'Output:无 '返回值:无             **************************************************************************************/private void GetPictureMark(){    float[] temp_thresh = new float[2];    int Err = 0;    //提取圆心图像坐标,得到像素坐标矩阵Inppts    Err = Zvision.ZV_CALGETSCAPTS(form.g_Handle, grabimg, inppts, Convert.ToUInt32(C_CalibThresh.Text), Convert.ToUInt32(C_CalibPolar.Text), Convert.ToUInt32(C_CalibMinArea.Text), Convert.ToUInt32(C_CalibMaxArea.Text));    int[] inppts_info = { 0, 0, 0 };    //获取矩阵行数和列数,行数表示识别到实心圆的个数    Err = Zvision.ZV_MATINFO(form.g_Handle, inppts, inppts_info);    int row, col;    row = (int)inppts_info[0];    col = (int)inppts_info[1];    //视觉识别到9个实心圆和标定板的实心圆数目一致    if (row == 9)    {        Err = Zvision.ZV_GRAYTORGB(form.g_Handle, grabimg, calibshowimg);        //inppts排好序输出排好序的像素坐标矩阵ppts        Err = Zvision.ZV_CALGETPTSMAP(form.g_Handle, inppts, ppts, wpts, Convert.ToSingle(C_CalibDis.Text));        Err = Zvision.ZV_MATINFO(form.g_Handle, ppts, inppts_info);        row = (int)inppts_info[0];        col = (int)inppts_info[1];        if (row >= 9)        {            uint i;            DataGridView1.Rows.Clear();            for (i = 0; i < row; i++)            {                //像素坐标在WinFrom的UI界面是显示出来                string[] tempstr = new string[4];                float[] outvalue = { 0, 0 };                Zvision.ZV_MATGETROW(form.g_Handle, wpts, i, 2, outvalue);                tempstr[2] = "0";                tempstr[3] = "0";                Zvision.ZV_MATGETROW(form.g_Handle, ppts, i, 2, outvalue);                tempstr[0] = outvalue[0].ToString();                tempstr[1] = outvalue[1].ToString();                DataGridView1.Rows.Add(tempstr);                //在原图是画出识别到的实心圆,并标记,然后在Ui界面上显示出图像                Zvision.ZV_MARKER(form.g_Handle, calibshowimg, outvalue[0], outvalue[1], 0, 40, 0, 255, 0);                Zvision.ZV_TEXT(form.g_Handle, calibshowimg, i.ToString(), outvalue[0] - 20, outvalue[1] - 20, 40, 0, 255, 0);                Zvision.ZV_LATCHCLEAR(form.g_Handle, 0);                Zvision.ZV_LATCHSETSIZE(form.g_Handle, 0, Convert.ToUInt32(pictureBox5.Width), Convert.ToUInt32(pictureBox5.Height));                    pictureBox5.Image = Zvision.ZV_LATCH(form.g_Handle, calibshowimg, 0);            }        }        else        {            MessageBox.Show("提取mark点失败!", "提示");        }    }    else    {        MessageBox.Show("提取mark点失败!", "提示");    }}/************************************************************************************'任务编号:无'函数功能:相机标定'Input:无'Output:无 '返回值:无'备注:计算像素坐标和世界坐标的转换关系'备注:标定板圆心的世界坐标可以通过示教的方式获取            **************************************************************************************/private void CamCalib(){    //矩阵行和式    uint row, col;    row = 9;    col = 2;    //从Ui界面上获取世界坐标的矩阵数据    float[] wPontsValue = new float[row * col];    for (int i = 0; i < row; i++)    {        for (int j = 0; j < col; j++)        {            wPontsValue[col * i + j] = float.Parse(DataGridView1.Rows[i].Cells[j + 2].Value.ToString());        }    }    //重新生成世界坐标矩阵    Zvision.ZV_MATGENDATA(form.g_Handle, wpts, row, col, wPontsValue);    //图像坐标矩阵数据    float[] pPontsValue = new float[row * col];    for (int i = 0; i < row; i++)    {        for (int j = 0; j < col; j++)        {            pPontsValue[col * i + j] = float.Parse(DataGridView1.Rows[i].Cells[j].Value.ToString());        }    }    //重新生成图像坐标矩阵    Zvision.ZV_MATGENDATA(form.g_Handle, ppts, row, col, pPontsValue);    float[] outimginfo = { 0, 0, 0, 0, 0 };    //获取图像信息    Zvision.ZV_IMGINFO(form.g_Handle, grabimg, outimginfo);    //进行相机标定    Zvision.ZV_CALCAM(form.g_Handle, ppts, wpts, ZmotionCalPara, (ushort)outimginfo[0], (ushort)outimginfo[1], (uint)Convert.ToInt32(C_CalibType.Text));    float[] outcaliberror = { 0, 0, 0 };    //获取标定误差    Zvision.ZV_CALERROR(form.g_Handle, ZmotionCalPara, ppts, wpts, outcaliberror);    //平均误差小于0.5内算是优,0.5--1为良,1--1.5为一般,1.5以上建议重新标定    if (outcaliberror[0] >= 1.5)    {        MessageBox.Show("标定平均误差过大请重新标定");    }    else    {        //保存标定参数        Zvision.ZV_CALWRITE(form.g_Handle, ZmotionCalPara, form.CalFileDir);    }}
3)形状匹配后根据标定系数可获得匹配到目标点的实际世界坐标。

3.形状匹配

1)形状匹配操作步骤

2)相关功能代码
/************************************************************************************'任务编号:无'函数功能:通过相机采集图像'Input:无'Output:无 '返回值:无             **************************************************************************************/public Image CameAcquisition(){    float Temp = 0;    Image ImageBuff = null;    Zvision.CAM_COUNT(form.g_Handle, ref Cam_Num);    //选择相机    Zvision.CAM_SEL(form.g_Handle, 0);    //采集一张图像    Zvision.CAM_TRIGGER(form.g_Handle);    //更新皮带位置    zauxBrr = zmcaux.ZAux_Direct_GetMpos(form.g_Handle, form.ConveyorAxisId, ref Temp);    form.BeltMpos = Temp;    //从相机缓存取里面获取刚刚采集的图像    Zvision.CAM_GET(form.g_Handle, grabimg, 0);    //RGB转灰度    Zvision.ZV_RGBTOGRAY(form.g_Handle, grabimg, grabimg);    //锁存数据清空    Zvision.ZV_LATCHCLEAR(form.g_Handle, 0);    //设置锁存的大小为图片显示控件的大小    Zvision.ZV_LATCHSETSIZE(form.g_Handle, 0, Convert.ToUInt32(ImgShow1.Width), Convert.ToUInt32(ImgShow1.Height));      //获取锁存中的图像    ImgShow1.Image = Zvision.ZV_LATCH(form.g_Handle, grabimg, 0);    //导出获取到的图像信息    return ImgShow1.Image;}/************************************************************************************'任务编号:无'函数功能:创建形状模版'Input:无'Output:无 '返回值:无             **************************************************************************************/private void CreateTemplate(){    //通过图像创建模板    Zvision.ZV_SHAPECREATERE(form.g_Handle, SubImg, mod_re, shape_mod, Convert.ToInt32(modStartAngle.Text), Convert.ToInt32(modEndAngle.Text), Convert.ToInt32(modMinScale.Text), Convert.ToInt32(modMaxScale.Text), Convert.ToUInt32(modThresh.Text), Convert.ToUInt32(modNum_Level.Text), Convert.ToUInt32(modPt_Reduce.Text), Convert.ToInt32(modAngle_Step.Text), Convert.ToInt32(modScale_Step.Text), 20);    //获取模板轮廓    Zvision.ZV_SHAPECONTOURS(form.g_Handle, shape_mod, modconlist, 0);    //灰度转rgb    Zvision.ZV_GRAYTORGB(form.g_Handle, cutimg, modimg);    float[] getimginfo = { 0, 0, 0, 0, 0 };    //图像信息    Zvision.ZV_IMGINFO(form.g_Handle, modimg, getimginfo);    //刚性变换    Zvision.ZV_GETRIGIDVECTOR(form.g_Handle, mod_matrigid, 0, 0, 0, getimginfo[0] / 2, getimginfo[1] / 2, 0);    //仿射变换    Zvision.ZV_CONTAFFINE(form.g_Handle, modconlist, mod_matrigid, tsmodconlist);    //绘制轮廓到图像上    Zvision.ZV_CONTLIST(form.g_Handle, modimg, tsmodconlist, 0, 255, 0, 1);    //清空控制器的锁存缓冲区    Zvision.ZV_LATCHCLEAR(form.g_Handle, 1);    //设置锁存缓冲区大小,设置锁存通道大小和显示控件picgbox控件一样大    Zvision.ZV_LATCHSETSIZE(form.g_Handle, 1, Convert.ToUInt32(pictureBox2.Width), Convert.ToUInt32(pictureBox2.Height));                                                                                                            //显示图像    pictureBox2.Image = Zvision.ZV_LATCH(form.g_Handle, modimg,1); //截取图像显示到ui上    pictureBox3.Image = pictureBox2.Image;    //清空控制器的锁存缓冲区    Zvision.ZV_LATCHCLEAR(form.g_Handle, 1);    //设置锁存缓冲区大小    Zvision.ZV_LATCHSETSIZE(form.g_Handle, 1, Convert.ToUInt32(pictureBox4.Width), Convert.ToUInt32(pictureBox4.Height));    //设置锁存通道大小和picgbox控件一样大                                                                                                                      //显示图像    pictureBox4.Image = Zvision.ZV_LATCH(form.g_Handle, modimg, 1);//截取图像显示到Ui上}/************************************************************************************'任务编号:无'函数功能:形状匹配,在图像是查找模板'Input:无'Output:无 '返回值:无             **************************************************************************************/public Image ShapeFind(){    //结果数组清空    for (int m = 0; m < 10; m++)    {        for (int n = 0; n < 5; n++)        {            form.VisionRst[m, n] = 0;        }    }    //形状模板匹配    Zvision.ZV_SHAPEFIND(form.g_Handle, shape_mod, grabimg, find_outlist, Convert.ToInt32(findminscore.Text), Convert.ToUInt32(findnum.Text), Convert.ToInt32(findmindis.Text), Convert.ToInt32(findthresh.Text), Convert.ToUInt32(findaccuracy.Text), Convert.ToInt32(findspeed.Text), Convert.ToUInt32(findpolar.Text));    int[] mat_info = { 0, 0, 0 };    //输出信息    Zvision.ZV_MATINFO(form.g_Handle, find_outlist, mat_info);    //生成绘制彩图    Zvision.ZV_GRAYTORGB(form.g_Handle, grabimg, show_img);    //匹配到目标了    if ((int)mat_info[0] > 0)    {        for (uint i = 0; i < (int)mat_info[0]; i++)        {            float[] rst_value = { 0, 0, 0, 0, 0 };            Zvision.ZV_MATGETROW(form.g_Handle, find_outlist, i, 5, rst_value);            rstScore.Text = rst_value[0].ToString();            rstPixX.Text = rst_value[1].ToString();            rstPixY.Text = rst_value[2].ToString();            rstAngle.Text = rst_value[3].ToString();            rstScale.Text = rst_value[4].ToString();            //分数筛选            if (rst_value[0] >= form.VisionScore)            {                //输出结果                for (int k = 0; k < 5; k++)                {                    form.VisionRst[i, k] = rst_value[k];                }                float[] outworldpos = { 0, 0 };                //像素转世界坐标                Zvision.ZV_CALTRANSW(form.g_Handle, ZmotionCalPara, rst_value[1], rst_value[2], outworldpos);                rstWorldX.Text = outworldpos[0].ToString();                rstWorldY.Text = outworldpos[1].ToString();                //输出世界坐标                for (int k = 1; k < 3; k++)                {                    form.VisionRst[i, k] = outworldpos[k - 1];                }                //显示匹配结果                string RstWorldStr;                RstWorldStr = "OK_坐标(" + rstWorldX.Text + "," + rstWorldY.Text + ")";                Zvision.ZV_TEXT(form.g_Handle, show_img, RstWorldStr, rst_value[1], rst_value[2], 50, 0, 255, 0);                //计算刚性变换矩阵                Zvision.ZV_GETRIGIDVECTOR(form.g_Handle, find_matrigid, 0, 0, 0, rst_value[1], rst_value[2], rst_value[3]);                //轮廓序列仿射变换                Zvision.ZV_CONTAFFINE(form.g_Handle, modconlist, find_matrigid, tsmodconlist2);                //绘制轮廓数列                Zvision.ZV_CONTLIST(form.g_Handle, show_img, tsmodconlist2, 0, 255, 0, 1);                Zvision.ZV_TEXT(form.g_Handle, show_img, i.ToString(), rst_value[1], rst_value[2], 40, 255, 0, 0);            }        }    }    else    {        //显示匹配结果        string RstWorldStr;        RstWorldStr = "NG";        Zvision.ZV_TEXT(form.g_Handle, show_img, RstWorldStr, 20, 120, 100, 0, 255, 0);    }    //清空缓冲区显示图片    Zvision.ZV_LATCHCLEAR(form.g_Handle, 0);    Zvision.ZV_LATCHSETSIZE(form.g_Handle, 0, Convert.ToUInt32(ImgShow1.Width), Convert.ToUInt32(ImgShow1.Height));    //设置锁存通道大小和picgbox控件一样大    ImgShow1.Image = Zvision.ZV_LATCH(form.g_Handle, show_img, 0);//截取图像显示到图像上    return ImgShow1.Image;}
操作演示
本次,正运动技术C#之Delta并联机械手的视觉相机标定与形状匹配,就分享到这里。

更多精彩内容请关注“正运动小助手”公众号,需要相关开发环境与例程代码,请咨询正运动技术销售工程师:400-089-8936。

本文由正运动技术原创,欢迎大家转载,共同学习,一起提高中国智能制造水平。文章版权归正运动技术所有,如有转载请注明文章来源。

回顾往期内容

开奖啦!参与《运动控制系统应用与实践》赠书活动的粉丝们看这里

送书福利!全自主IDE的《运动控制系统应用与实践》

C#之Delta并联机械手正逆解的建立和手动运动

PCIe EtherCAT实时运动控制卡PCIE464的安装与调试

PCIe EtherCAT实时运动控制卡的DXF图形的CAD导图与多条运动指令的快速加工


EtherCAT运动控制器在UVW对位平台中的应用

EtherCAT运动控制器Delta机械手应用

EtherCAT运动控制器的MATLAB开发


运动控制器/运动控制卡配套ZCAN总线ZIO模块的使用

运动控制卡/运动控制器的ZCAN总线ZMIO310扩展模块使用

EtherCAT运动控制器在ROS上的应用(下)

EtherCAT运动控制器在ROS上的应用(上)


皮带同步跟随:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(十四)

自定义电子凸轮曲线的运动:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(十三)

连续轨迹加工和速度前瞻:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(十二)

PT/PVT运动模式介绍:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(十一)

项目工程下载与XML配置文件下载:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(十)

EtherCAT驱动器回零与控制器回零:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(九)

二维/三维的多轴PSO视觉飞拍与精准输出:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(八)

单轴PSO视觉飞拍与精准输出:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(七)

硬件位置比较输出和编码器锁存:EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(六)

EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(五):通过RTSys进行调试与诊断

EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(四):板载IO与总线扩展IO的编码器与脉冲配置的应用

EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(三):EtherCAT总线CSP,CSV,CST模式切换

EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(二):EtherCAT总线初始化

EtherCAT超高速实时运动控制卡XPCIE1032H上位机C#开发(一):驱动安装与建立连接

全国产EtherCAT运动控制边缘控制器(六):RtBasic文件下载与连续轨迹加工的Python+Qt开发

全国产EtherCAT运动控制边缘控制器(五):IO配置与回零运动的Python+Qt开发

全国产EtherCAT运动控制边缘控制器(四):轴参数配置与单轴运动PC上位机C++控制

全国产EtherCAT运动控制边缘控制器(三):外设读写与RTSys开发诊断

全国产EtherCAT运动控制边缘控制器(二):统一的上位机API接口

全国产EtherCAT运动控制边缘控制器(一):ZMC432H硬件接口

简单易用的以太网数据采集卡应用开发之C#

高柔SS加减速曲线在锂电池焊接中的应用

EtherCAT和Ethernet的不同点有哪些, 通信周期又是什么意思?

工业以太网时代,该如何选择总线运动控制器?

正运动技术运动控制器如何快速实现单轴/多轴同步跟随功能?


EtherCAT运动控制器Delta机械手应用

EtherCAT运动控制器的MATLAB开发

EtherCAT运动控制器在数控加工手轮随动中的应用

EtherCAT运动控制器在数控加工手轮随动中的应用之C++

EtherCAT运动控制器在LabVIEW中的运动控制与实时数据采集

运动控制器PSO视觉飞拍与精准输出的C++开发(三):二维/三维/多轴PSO输出

运动控制器PSO视觉飞拍与精准输出的C++开发(二):多轴PSO等距/周期输出

运动控制器PSO视觉飞拍与精准输出的C++开发(一):单轴PSO

运动控制器八通道PSO的视觉飞拍与精准输出

Windows实时运动控制软核(七):LOCAL高速接口测试之Labview

Windows实时运动控制软核(六):LOCAL高速接口测试之Matlab

Windows实时运动控制软核(五):LOCAL高速接口测试之VC6.0

Windows实时运动控制软核(四):LOCAL高速接口测试之VB.NET

Windows实时运动控制软核(三):LOCAL高速接口测试之C++

Windows实时运动控制软核(二):LOCAL高速接口测试之Qt

Windows实时运动控制软核(一):LOCAL高速接口测试之C#

开放式激光振镜运动控制器:C++ 快速调用图形库应用

开放式激光振镜运动控制器:C++振镜矫正方法与实现

开放式激光振镜运动控制器:C++快速开发


开放式激光振镜运动控制器(五):ZMC408SCAN 光纤激光器的能量控制

开放式激光振镜运动控制器(四):ZMC408SCAN振镜控制光纤激光器加工

开放式激光振镜运动控制器(三):ZMC408SCAN轴控光纤激光器加工

开放式激光振镜运动控制器(二):ZMC408SCAN激光接口与控制

开放式激光振镜运动控制器(一):ZMC408SCAN接口与功能


运动控制器PSO位置同步输出(三):高精度等间距二维三维PSO输出

运动控制器PSO位置同步输出(二):PSO模式详解

运动控制器PSO位置同步输出(一):硬件平台与PSO指令简介


经济型EtherCAT运动控制器(十):EtherCAT总线快速入门

经济型EtherCAT运动控制器(九):示波器使

经济型EtherCAT运动控制器(八):轴参数与运动指令

经济型EtherCAT运动控制器(七):运动缓冲

经济型EtherCAT运动控制器(六):数据储存

经济型EtherCAT运动控制器(五):多任务运行

经济型EtherCAT运动控制器(四):ModbusRTU或ModbusTcp与触摸屏通讯

经济型EtherCAT运动控制器(三):PLC实现多轴直线插补与电子凸轮

经济型EtherCAT运动控制器(二):ZBasic实现多轴直线插补运动

经济型EtherCAT运动控制器(一):功能简介与应用场景


运动控制+机器视觉Demo软件框架(三):视觉纠偏+连续插补的配方编辑

运动控制+机器视觉Demo软件框架(二):移动标定和形状匹配

运动控制+机器视觉Demo软件框架(一):机械参数和配方文件的管理

运动控制+机器视觉Demo软件框架系统概述


开放式激光振镜+运动控制器(六):双振镜运动

开放式激光振镜+运动控制器(五):ZMC408SCAN控制器硬件介绍

开放式激光振镜+运动控制器(四):PSO位置同步输出在激光振镜加工中的应用

开放式激光振镜+运动控制器(三):振镜矫正

开放式激光振镜+运动控制器(二):振镜填充

开放式激光振镜+运动控制器(一):硬件接口


EtherCAT轴扩展模块EIO16084在运动控制系统中的应用
EtherCAT运动控制器中脉冲接口的快速调试与诊断
EtherCAT运动控制器之ZMIO300模块的使用
EtherCAT运动控制器的PLC编程(四) 电子凸轮
EtherCAT运动控制器的PLC编程(三) 电子齿轮
EtherCAT运动控制器的PLC编程(二) 圆弧插补
EtherCAT运动控制器的PLC编程(一) 直线插补


快速入门 | 篇二十一:运动控制器ZHMI组态编程简介一

快速入门 | 篇二十一:正运动技术运动控制器自定义通讯

快速入门 | 篇二十:正运动技术运动控制器MODBUS通讯

快速入门 | 篇十九:正运动技术运动控制器多轴同步与电子凸轮指令简介


快速入门 | 篇十八:正运动技术脉冲型运动控制器的使用

快速入门 | 篇十七:运动控制器多轴插补运动指令的使用

快速入门 | 篇十六:正运动控制器EtherCAT总线快速入门

快速入门 | 篇十五:运动控制器运动缓冲简介

快速入门 | 篇十四:运动控制器基础轴参数与基础运动控制指令

快速入门 | 篇十三:正运动技术运动控制器ZDevelop 编程软件的使用


快速入门 | 篇十二:正运动技术运动控制器U盘接口的使用

快速入门 | 篇十一:正运动技术运动控制器中断的应用

快速入门 | 篇十:运动控制器多任务运行特点

快速入门 | 篇九:如何进行运动控制器示波器的应用?

快速入门 | 篇八:如何进行运动控制器EtherCAT总线的基础使用?

快速入门 | 篇七:如何进行运动控制器ZCAN总线扩展模块的使用?


快速入门 | 篇六:如何进行运动控制器数据与存储的应用?

快速入门 | 篇五:如何进行运动控制器输入/输出IO的应用?

快速入门 | 篇四:如何进行运动控制器与触摸屏通讯?

快速入门 | 篇三:如何进行运动控制器ZPLC程序开发?

快速入门 | 篇二:如何进行运动控制器ZBasic程序开发?

快速入门 | 篇一:如何进行运动控制器固件升级?


EtherCAT与RTEX驱动器轴回零的配置与实现

G代码在运动控制器上的应用

运动控制器的自定义G代码编程应用

离线仿真调试,加快项目进度!

8轴EtherCAT轴扩展模块EIO24088的使用

运动控制器之追剪应用Demo

运动控制器激光振镜控制
运动控制器轴回零的配置与实现

运动控制器位置锁存功能的应用

ZMC运动控制器SCARA机械手应用快速入门

运动控制器RTEX总线使用入门

正运动技术CAD导图软件配合控制器的使用方法

EtherCAT总线运动控制器应用进阶一


EtherCAT运动控制卡开发教程之Qt(下):SCARA机械手正反解的建立

EtherCAT运动控制卡开发教程之Qt(中):小线段连续轨迹加工、暂停与继续

EtherCAT运动控制卡开发教程之Qt(上):开发环境配置与简单运动控制应用


EtherCAT运动控制卡开发教程之python

EtherCAT运动控制卡的SCARA等机器人指令的应用

EtherCAT运动控制卡的PWM与模拟量输出和运动速度同步

EtherCAT运动控制卡硬件比较输出以及编码器锁存

EtherCAT运动控制卡IO动作与运动控制的同步

EtherCAT运动控制卡实时程序的运行和读写控制


EtherCAT运动控制卡的运动暂停、恢复与系统安全设置

EtherCAT运动控制卡小线段前瞻的连续插补运动

EtherCAT运动控制卡的多轴插补运动和手轮运动

EtherCAT运动控制卡的辅助调试工具与方法介绍

EtherCAT运动控制卡的总线轴参数设置和轴运动

EtherCAT运动控制卡的硬件接线与C#的硬件外设读写与回零运动

EtherCAT运动控制卡的硬件接线与C#的单轴运动控制


简单易用的运动控制卡(十六):螺距补偿和反向间隙补偿

简单易用的运动控制卡(十五):PC启停控制器的实时程序

简单易用的运动控制卡(十四):PWM、模拟量输出与运动控制的同步

简单易用的运动控制卡(十三):IO动作与运动控制的同步

简单易用的运动控制卡(十二):运动控制系统的安全设置

简单易用的运动控制卡(十一):运动的暂停恢复和速度倍率设置


简单易用的运动控制卡(十):连续插补和小线段前瞻

简单易用的运动控制卡(九):圆弧插补和螺旋插补

简单易用的运动控制卡(八):直线插补和手轮运动

简单易用的运动控制卡(七):一次性加载多条连续小线段数据

简单易用的运动控制卡(六):Basic文件下载和连续轨迹加工


简单易用的运动控制卡(五):IO配置与回零运动

简单易用的运动控制卡(四):函数库的封装

简单易用的运动控制卡(三):轴参数配置和单轴运动控制

简单易用的运动控制卡(二):外设读写与ZDevelop诊断

简单易用的运动控制卡(一):硬件接线和上位机开发


运动控制卡在ROS上的应用(下)

运动控制卡在ROS上的应用(上)


EtherCAT运动控制卡和LabVIEW构建智能装备(五)

EtherCAT运动控制卡和LabVIEW构建智能装备(四)

EtherCAT运动控制卡和LabVIEW构建智能装备(三)

EtherCAT运动控制卡和LabVIEW构建智能装备(二)

EtherCAT运动控制卡和LabVIEW构建智能装备(一)

EtherCAT运动控制卡在LabVIEW中的运动控制与数据采集


运动控制卡应用开发教程之MATLAB

运动控制卡应用开发教程之C++

运动控制卡应用开发教程之Python

运动控制卡应用开发教程之C#

运动控制卡应用开发教程之Linux

运动控制卡应用开发教程之VB.NET


运动控制卡应用开发教程之VB6.0

运动控制卡应用开发教程之VC6.0

运动控制卡应用开发教程之使用Qt

运动控制卡应用开发教程之LabVIEW

运动控制卡应用开发教程之激光振镜控制

运动控制卡应用开发教程之硬件比较输出


关于正运动技术



深圳市正运动技术有限公司成立于2013年,专注于纯国产运动控制技术研究和通用运动控制软硬件平台和产品的研发,是国家级高新技术和专精特新“小巨人”企业。

正运动技术汇集了来自华为、中兴等公司的优秀人才。力求创新,目前公司拥有专利、著作权等知识产权五十余项。在坚持自主创新的同时,积极联合各大高校和科研院所协同运动控制基础技术的研究,是国内工控领域发展最快的企业之一,也是国内少有、完整掌握运动控制核心技术和实时工控软件平台技术的企业。

正运动技术除本部研发中心外,设有中山、武汉、上海三个研发分部。为更好地服务客户,本部之外设有苏州、东莞两个区域性服务中心,设有佛山、厦门、青岛、西安、武汉、成都、天津、郑州等销售和技术服务机构。

经过众多合作伙伴多年的开发应用,正运动技术的产品广泛地应用于3C电子、半导体、新能源、机器人、包装印刷、纺织服装、激光加工、医疗制药、数控机床、传统加工等领域。

正运动小助手
正运动小助手是正运动技术旗下技术资料平台,可第一时间发布最新产品技术文档,为您奉上最全面的运动控制产品基础知识介绍、使用注意事项及操作步骤指引等资料。
 最新文章