<style id="7i3y3"></style>

      <sub id="7i3y3"><i id="7i3y3"></i></sub>

        午夜精品一区二区三区成人,中文字幕av一区二区,亚洲AVAV天堂AV在线网阿V,肥臀浪妇太爽了快点再快点,国产网友愉拍精品视频手机,国产精品无码a∨麻豆,久久中文字幕一区二区,a级国产乱理伦片在线观看al
        首頁 新聞 工控搜 論壇 廠商論壇 產品 方案 廠商 人才 文摘 下載 展覽
        中華工控網首頁
          P L C | 變頻器與傳動 | 傳感器 | 現場檢測儀表 | 工控軟件 | 人機界面 | 運動控制
          D C S | 工業以太網 | 現場總線 | 顯示調節儀表 | 數據采集 | 數傳測控 | 工業安全
          電 源 | 嵌入式系統 | PC based | 機柜箱體殼體 | 低壓電器 | 機器視覺
        C#之Delta并聯機械手的視覺相機標定與形狀匹配
        深圳市正運動技術有限公司
        收藏本文     查看收藏

        VPLC711硬件介紹

        VPLC711是正運動推出的一款基于x86平臺和Windows操作系統的高性能機器視覺EtherCAT運動控制器,具備強大的運算能力和靈活性。它具有出色的實時性能和多路高速硬件輸入與多路高速PSO輸出,能夠精準控制多軸同步運動,并與外部設備實現多協議的高速通信。

        VPLC711.png

        VPLC711支持多種硬件接口和通信協議,方便與其他設備的連接和集成。除此之外,VPLC711還具備視覺處理功能,能夠實時處理圖像數據,實現視覺檢測、測量和定位等應用。

        VPLC711架構圖.png

        VPLC711內置Windows運動控制實時內核MotionRT7,形成一種開放式IPC形態實時軟控制器/軟PLC,為用戶提供靈活集成的運動控制+視覺一體化解決方案。

        VPLC711優勢.png

        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的詳情介紹,可以點擊 “ x86平臺實時Windows機器視覺EtherCAT運動控制器VPLC711 ” 查看。

        C#語言進行Delta并聯機械手的開發之運動庫和視覺庫的添加

        1.在VS2010菜單“文件”→“新建”→“項目”,啟動創建項目向導。

        1.png

        2.選擇開發語言為“Visual C#”和.NET Framework 4以及Windows窗體應用程序。

        2.png

        3.找到廠家提供的光盤資料里面的C#函數庫,路徑如下(32位庫為例)。

        1)進入廠商提供的光盤資料找到“04PC函數”文件夾,并點擊進入。

        3.png

        2)選擇“函數庫2.1”文件夾。

        4.png

        3)選擇“Windows平臺”文件夾。

        5.png

        4)根據需要選擇對應的函數庫,這里選擇32位庫。

        6.png

        5)解壓C#壓縮包,里面有C#對應的函數庫。

        7.png

        6)函數庫具體路徑如下。

        8.png

        4. 將廠商提供的C#庫文件以及相關文件復制到新建的項目中(注意這里面的PC函數庫默認提供的是運動庫,如果使用視覺功能還需要獲取視覺庫,視覺庫可以找廠商的相關銷售或技術人員獲取)。

        1) 將Zmcaux.cs(運動庫)和Zvision.cs(視覺庫)文件復制到新建的項目里面中。

        9.png

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

        10.png

        5. 用vs打開新建的項目文件,在右邊的解決方案資源管理器中點擊顯示所有文件,然后鼠標右擊Zmcaux.cs與 Zvision.cs文件,點擊包括在項目中。

        11.jpg

        6. 雙擊Form1.cs里面的Form1,出現代碼編輯界面,在文件開頭寫入using cszmcaux,using ZVision并聲明控制器句柄g_handle 。

        12.png

        PC函數介紹

        1.PC函數手冊可在光盤資料查看,具體路徑如下。

        13.png

        2.鏈接控制器,獲取鏈接句柄。
        20.png

        3. 相機掃描接口說明 。
        21.png

        4.相機采集圖像。
        22.png

        5.用圖像創建模板。
        23.png

        6.形狀匹配并輸出輪廓狀態。

        24.png

        C#例程建設之視覺相機標定與形狀匹配

        1.視覺配置文件的下載

        因為正運動的視覺算法是在控制器里面執行的,所以上位機開發前需要先在控制器里面定義好視覺處理的相關變量。

        正運動控制器里面的視覺變量統一使用ZVOBJECT來修飾,我們可以新建一個.bas的文件,然后輸入“GLOBAL ZVOBJECT ZVOBJ(1000)”進行視覺變量數組的定義,保存后通過上位機接口在上位機系統初始化的時候把這個.bas文件下載到控制器即可。

        14.png

        //下載相關腳本到控制器,進行視覺變量的定義
        string BasPath = "";
        BasPath = string.Format(@"{0}", Application.StartupPath) + @"\Icon\視覺變量定義.bas";
        //.bas文件下載到控制器
        zmcaux.ZAux_BasDown(g_Handle,BasPath,0);
        

        2.相機標定

        15.png

        1)相機標定操作步驟

        16.png

        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)形狀匹配后根據標定系數可獲得匹配到目標點的實際世界坐標。

        17.png

        3.形狀匹配

        18.png

        1)形狀匹配操作步驟

        19.png

        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。

        本文由正運動技術原創,歡迎大家轉載,共同學習,一起提高中國智能制造水平。文章版權歸正運動技術所有,如有轉載請注明文章來源。

        正運動技術專注于運動控制技術研究和通用運動控制軟硬件產品的研發,是國家級高新技術企業。正運動技術匯集了來自華為、中興等公司的優秀人才,在堅持自主創新的同時,積極聯合各大高校協同運動控制基礎技術的研究,是國內工控領域發展最快的企業之一,也是國內少有、完整掌握運動控制核心技術和實時工控軟件平臺技術的企業。主要業務有:運動控制卡_運動控制器_EtherCAT運動控制卡_EtherCAT控制器_運動控制系統_視覺控制器__運動控制PLC_運動控制_機器人控制器_視覺定位_XPCIe/XPCI系列運動控制卡等等。

        企業微信截圖_20240321153031.png


         

        狀 態: 離線

        公司簡介
        產品目錄

        公司名稱: 深圳市正運動技術有限公司
        聯 系 人: 戴德弟
        電  話: 0755-32976042
        傳  真: 0755-2606 6955
        地  址: 深圳市寶安區西鄉洲石路陽光工業園A1棟5樓
        郵  編: 518100
        主  頁:
         
        該廠商相關技術文摘:
        強實時運動控制內核MotionRT750(十):運動控制中的微調軌跡動態補償
        機器視覺運動控制一體機在大功率共模電感多面AI外觀缺陷檢測應用
        MotionRT750 SoftMotion:XPCIE1032H超高速運動控制卡在AOI檢測設備上的應用
        強實時運動控制內核MotionRT750(九):內置C語言的自定義機械手模型實現
        NEPCON ASIA 2025:解鎖行業新機遇,我們在深圳等您
        開放式激光振鏡運動控制器在旋轉飛行打標中的應用
        強實時運動控制內核MotionRT750(八):us級高速交互之LabVIEW,為智能裝備提速
        液態點膠密封解決方案,柔性升級,密封更可靠!
        柔性機械手視覺供料解決方案,提升無序分揀效率!
        【2025上海工博會】正運動展位智造未來(二)
        【2025上海工博會】正運動展位智造未來(一)
        【2025上海工博會】機器視覺運動控制一體機應用預覽(三)
        更多文摘...
        立即發送詢問信息在線聯系該技術文摘廠商:
        用戶名: 密碼: 免費注冊為中華工控網會員
        請留下您的有效聯系方式,以方便我們及時與您聯絡

        關于我們 | 聯系我們 | 廣告服務 | 本站動態 | 友情鏈接 | 法律聲明 | 不良信息舉報
        工控網客服熱線:0755-86369299
        版權所有 中華工控網 Copyright©2022 Gkong.com, All Rights Reserved

        主站蜘蛛池模板: 日韩精品中文字幕综合| 18av千部影片| 韩国无码av片在线观看| 国产91色综合久久高清| 亚洲av二区伊人久久| 老妇xxxxx性开放| 国产日韩综合av在线| 日本一区二区中文字幕在线| 色婷婷综合视频在线观看视频一区 | 国产毛1卡2卡3卡4卡免费观看 | 亚洲精品日韩久久精品| 午夜福利高清在线观看| AV在线亚洲欧洲日产一区二区 | 亚洲а∨精品天堂在线| 国产成人精品1024免费下载| 狠狠色噜噜狠狠狠狠888奇米| 欧美日韩综合在线精品| 国产亚洲天堂另类综合| 在线亚洲午夜片av大片| 亚洲av成人三区国产精品| 成人国产精品中文字幕| 精品无码久久久久久尤物| AV老司机AV天堂| 亚洲老熟女一区二区三区| 国产精品多p对白交换绿帽| 五月激情综合网| 少妇激情a∨一区二区三区| 新久久国产色av免费看| 亚洲精品一区二区麻豆| 国产成人亚洲综合app网站| 亚洲婷婷丁香| 国产无遮挡18禁无码网站免费 | 人妻无码久久中文字幕专区| av一区二区人妻无码| 精品少妇无码一区二区三批| 中文字幕国产精品第一页| 国产男人的天堂在线视频| 成人无码h真人在线网站| 国产丰满乱子伦无码专区| 中文字幕亚洲国产精品| 亚洲av无码国产在丝袜线观看|