0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C#之Delta并联机械手的视觉同步分拣

正运动技术 来源:正运动技术 作者:正运动技术 2024-07-03 09:52 次阅读

本文导读

前面两节课程我们介绍了怎么建立Delta并联机械手的正逆解以及如何通过视觉进行匹配定位。本节课程给大家分享如何通过C#语言开发正运动Delta并联机械手传送带同步的视觉分拣。

VPLC711硬件介绍

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

wKgZomZ7vT-AQUGfAATEZEEcnQY989.png

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

wKgaomSuBgKAfwvPAAP2e_t0m3I135.png

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

wKgaomZ7vU2AfKbMAAGN_SO6-4Q279.png

VPLC711硬件参数

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

2.板载RS232RS485EtherNet*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菜单“文件”→“新建”→“项目”,启动创建项目向导。

wKgZomZ7vX2AJ3R_AABq6AhfRSo071.png

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

wKgaomZ7vYGAV_xXAAFwzZf56Bw151.png

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

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

wKgaomZ7vYaAaXB0AAHXfDSiyik568.png

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

wKgaomZ7vYmAHa9bAAGbBrVuQZ8047.png

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

wKgZomZ7vYyAd9-lAAEuaVsobUk562.png

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

wKgaomZ7vZGAU8-OAAEZuUmX8mk399.png

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

wKgZomZ7vZaAJOYOAAGiJAn1QZI072.png

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

wKgZomZ7vZqAYOQOAAGoEa8S6tE832.png

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

1)将Zmcaux.cs(运动库)和Zvision.cs(视觉库)文件复制到新建的项目里面中。

wKgaomZ7vZ6ANJo5AACGKDpmeyo890.png

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

wKgaomZ7vaGAL_VAAABeNxxojLY082.png

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

wKgZomZ7vaSAYKQmAAC_x1ZsREI927.png

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

wKgZomZ7vaeAQDs-AADXCWgRD38104.png

二、PC函数介绍

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

wKgZomaErPGAUrHHAABJo7YSs_s073.png

2.皮带同步指令。

wKgZomaErPeAEw-gAADQ9hb7hBk143.png

三、Basic脚本快速验证指令用法

1.编写Basic测试脚本进行MoveSync指令的用法测试。

'**************************************************************************************
'背景:假设有一对对射型的光电传感器固定在流水线的两端,来实时检测流水线上的产品到位情况
'MOVESYNC指令参数填写说明:
'syncposition:物体到感应点时皮带轴的位置,需要通过编码器锁存把产品的对应位置记录下来。
'pos1:跟随轴1原点到光电传感器感应点的位置,对于每个产品都是固定的。
'**************************************************************************************
GLOBAL CONST BeltAxis=4  '皮带轴是轴4
GLOBAL CONST FollowAxis1=0  '跟随轴1是轴0
GLOBAL CONST InducPos1=30  '跟随轴1原点到光电传感器感应点的位置
GLOBAL CONST StandbyPos1=50'跟随轴1的待机位
GLOBAL CONST EmptyPos1=400  '跟随轴1的放料位
'停止所有轴
RAPIDSTOP(2)
WAIT IDLE     
'初始化相关轴的轴参数
BASE(FollowAxis1, BeltAxis)
ATYPE = 1,1
UNITS = 1000,1000
SPEED = 50,100
DPOS = 0,0
'触发示波器采集波形
TRIGGER
DELAY(1000)
'跟随轴先运动到待机位
BASE(FollowAxis1)
MOVEABS(StandbyPos1)
'皮带轴开始运动
VMOVE(1)  AXIS(BeltAxis)
'假设皮带运动到200的位置时,有一个产品被检测到
BASE(FollowAxis1)
Wait UNTIL MPOS(BeltAxis)> 200
MOVESYNC(0, 2000, 200, BeltAxis, InducPos1) '跟随轴加速同步段该指令执行完后将同步上产品
MOVE_OP(0, ON)                               '同步上后打开真空吸          
MOVESYNC(0, 1000, 200, BeltAxis, InducPos1)  '继续同步1s
MOVESYNC(-1, 0, 0, -1, EmptyPos1)            '走到放料位置
MOVE_OP(0, OFF)                              '到放料位后关闭真空吸  

2.通过RTSys软件的示波器观察波形,分析同步过程。

wKgZomaErS-AMP_DAAPz5iU7f2g921.pngwKgaomaErTaAU9t9AABQp_3mM7U314.png

根据示波器的数据分析

1、产品刚刚被检测到时,皮带的位置是200,跟随轴的位置是50。

2、跟随轴追上产品,并保持速度和皮带轴同步时皮带的位置是400,跟随轴1的位置是230。

3、由1和2可知,产品在同步过程中前进了200(400-200)。

4、因为跟随轴1原点到光电传感器感应点的位置InducPos1我们给的数据是30,所以在跟随轴1和皮带平行的情况下,皮带带着产品往前跑了200后,此时此刻跟随轴1原点到光产品的实际距离是230(200+30)。

5、那么第4点计算的结果和第2的同步完成后跟随轴1的实际位置是一致的,所以流水线同步指令测试正常。

四、C#例程建设之视觉流水线同步分拣

1.皮带同步指令关键参数详细介绍。

ZAux_Direct_MoveSync(ZMC_HANDLE handle,float imode,int synctime,float syncposition,int syncaxis,int imaxaxises,int *piAxislist,float *pfDisancelist).

(1)参数imode:

imode = 0+angle,表示同步模式,如果皮带和X轴平行,填0即可。

imode = -1,表示结束同步模式,可运动到指定的绝对位置,一般同步上抓取完物料后运动到放料位使用。

(2)参数synctime: 同步时间,ms单位.运动在指定时间内完成,完成时轴跟皮带轴上物体保持速度一致。0表示根据运动轴的速度加速度来估计同步时间。

(3)参数syncposition: 视觉或传感器识别到皮带是的产品时,皮带此时此刻的位置信息MPOS。

(4)参数pfDisancelist:

如果是视觉定位产品时,这个参数直接填视觉识别到产品时产品的世界坐标。

如果用光电传感器检测产品时,这个参数是固定的,在传感器刚刚好感应到产品时,产品当前位置的绝对坐标。可以在此时此刻手动运动从轴来定位到产品处来获取位置信息。

2.视觉流水线同步分拣流程图。

wKgaomaErVqAARASAAJhxaSRpC0551.png

(1)视觉匹配定位代码详情。

/************************************************************************************
'任务编号:     无
'函数功能:     视觉定位产品
'Input:        无
'Output:       无 
'返回值:       子线程---进行视觉定位             
**************************************************************************************/
public void RunSubTaskVisua()
{
   int TempArrid = 0;
   float TempVar = 0;
   WriteLog("视觉功能正常启动");
   while (SysRunFlag > 0)
   {
       //暂停按钮没有按下时
       while (SysRunFlag == 1) 
       {
           //采集图像
           VisuaOper.CameAcquisition();
           //进行模板匹配
           RTDisplay.Image = VisuaOper.ShapeFind();
           if (MainWindows.BeltMpos != 0)//如果采集照片的时候皮带编码器位置获取正常
           {
               //操作MoveSyncBuff数据先加锁
               while (true)
               {
                   if (MainWindows.SetMoveSyncFlag == 0)
                   {
                       MainWindows.SetMoveSyncFlag = 1;
                       break;
                   }
               }
               //找到可以存储数据的数组起始下标
               int ArrId = 0;
               for (int i = 0; i < 50; i++)
               {
                   if (MainWindows.MoveSyncBuff[i, 0] == 0)
                   {
                       ArrId = i;
                       break;
                   }
               }
               //开始存储数据  一次匹配最多10个结果
               TempArrid = ArrId;
               for (int i = 0; i < 10; i++)
               {
                   //如果分数满足要求
                   if (MainWindows.VisionRst[i, 0] >= MainWindows.VisionScore)
                   {
                       int j;
                       //如果有重复的目标需要剔除
                       for (j = 0; j < TempArrid; j++)
                       {
                           TempVar = MainWindows.VisionRst[i, 1] - MainWindows.BeltMpos - MainWindows.MoveSyncBuff[j, 1] + MainWindows.MoveSyncBuff[j, 4];
                           if (((TempVar) <= 10) && (TempVar >= -10))
                           {
                               j = -10;
                               break;
                           }
                       }
                       if (j >= 0)
                       {
                           MainWindows.MoveSyncBuff[ArrId, 0] = 1;
                           MainWindows.MoveSyncBuff[ArrId, 1] = MainWindows.VisionRst[i, 1];   //存储匹配结果的X坐标
                           MainWindows.MoveSyncBuff[ArrId, 2] = MainWindows.VisionRst[i, 2];   //存储匹配结果的Y坐标
                           MainWindows.MoveSyncBuff[ArrId, 3] = MainWindows.VisionRst[i, 3];   //存储匹配结果的角度偏移
                           MainWindows.MoveSyncBuff[ArrId, 4] = MainWindows.BeltMpos;          //存储匹配到产品时,传送带的位置信息
                           ArrId = ArrId + 1;
                           IdentiNum.Text = (Convert.ToInt32(IdentiNum.Text) + 1).ToString();
                           WriteLog("视觉目标:" + "(" + MainWindows.VisionRst[i, 1].ToString("0,0") + "," + MainWindows.VisionRst[i, 2].ToString("0,0") + ")");
                       }
                   }
                   //分数清空
                   MainWindows.VisionRst[i, 0] = 0;
               }
               //解锁
               MainWindows.SetMoveSyncFlag = 0;
           }
       }
       Thread.Sleep(100);
   }
}

(2)流水线同步分拣代码详情。

/************************************************************************************
'任务编号:     无
'函数功能:     流水线同步分拣
'Input:        无
'Output:       无 
'返回值:       无             
**************************************************************************************/
public void RunSubTaskMotion()
{
   float[] MoveSyncTemp = new float[5];
   float TempMpos = 0;
   while (SysRunFlag > 0)
   {
       while (SysRunFlag == 1)
       {
           if (MainWindows.MoveSyncBuff[0, 0] == 1)
           {
               MainWindows.ZauxErr = zmcaux.ZAux_Direct_GetMpos(MainWindows.g_Handle, MainWindows.ConveyorAxisId, ref TempMpos);
               //如果编码器位置抓取正确
               if (0 == MainWindows.ZauxErr) 
               {
                   //编码器往前运动了多少
                   TempMpos = TempMpos - MainWindows.MoveSyncBuff[0, 4];

                   //判断是否处于同步起始区
                   if (((MainWindows.MoveSyncBuff[0, 1] + TempMpos) >= MainWindows.SyncReX[0]) && ((MainWindows.MoveSyncBuff[0, 1] + TempMpos) <= MainWindows.SyncReX[1]))
                   {
                       WriteLog("开始同步抓取");
                       //取一组数据
                       MoveSyncTemp[0] = MainWindows.MoveSyncBuff[0, 1] ;    //X
                       MoveSyncTemp[1] = MainWindows.MoveSyncBuff[0, 2] ;    //Y  
                       MoveSyncTemp[2] = MainWindows.GetBinHigt;            //取料高度
                       MoveSyncTemp[3] = MainWindows.MoveSyncBuff[0, 3];    //Aanle
                       MoveSyncTemp[4] = MainWindows.MoveSyncBuff[0, 4];    //Mpos
                      //下发同步运动的指令
                      //0、复位输出口
                       zmcaux.ZAux_Direct_MoveOp(MainWindows.g_Handle, MainWindows.gVAxisList[0], MainWindows.VacSucIo, 0);
                       //1、先同步上传送带
                       zmcaux.ZAux_Direct_MoveSync(MainWindows.g_Handle, 0, 0, MainWindows.MoveSyncBuff[0, 4], MainWindows.ConveyorAxisId, 4, MainWindows.gVAxisList, MoveSyncTemp);
                       //2、同步一段时间(关节轴有滞后) 50ms
                       zmcaux.ZAux_Direct_MoveSync(MainWindows.g_Handle, 0, 50, MainWindows.MoveSyncBuff[0, 4], MainWindows.ConveyorAxisId, 4, MainWindows.gVAxisList, MoveSyncTemp);
                       //3、打开真空吸嘴
                       zmcaux.ZAux_Direct_MoveOp(MainWindows.g_Handle, MainWindows.gVAxisList[0], MainWindows.VacSucIo, 1);
                       //4、同步一段时间 1500ms
                       zmcaux.ZAux_Direct_MoveSync(MainWindows.g_Handle, 0, 700, MainWindows.MoveSyncBuff[0, 4], MainWindows.ConveyorAxisId, 4, MainWindows.gVAxisList, MoveSyncTemp);
                       //5、同步段把Z轴提升到安全高度,选择轴到放料角度
                       MoveSyncTemp[2] = MainWindows.StandPos[2];             //取料高度
                       zmcaux.ZAux_Direct_MoveSync(MainWindows.g_Handle, 0, 100, MainWindows.MoveSyncBuff[0, 4], MainWindows.ConveyorAxisId, 4, MainWindows.gVAxisList, MoveSyncTemp);
                       //4、解除同步去放料点
                       MoveSyncTemp[0] = MainWindows.EmptPos[0];    //X
                       MoveSyncTemp[1] = MainWindows.EmptPos[1];    //Y  
                       MoveSyncTemp[2] = MainWindows.EmptPos[2];    //放料高度
                       MoveSyncTemp[3] = MainWindows.EmptPos[3];    //Aanle
                       zmcaux.ZAux_Direct_MoveSync(MainWindows.g_Handle, -1, 0, 0, -1, 4, MainWindows.gVAxisList, MoveSyncTemp);
                       //5、关闭真空吸嘴放料,Delay100ms
                       zmcaux.ZAux_Direct_MoveOp(MainWindows.g_Handle, MainWindows.gVAxisList[0], MainWindows.VacSucIo, 0);
                       zmcaux.ZAux_Direct_MoveDelay(MainWindows.g_Handle, MainWindows.gVAxisList[0], 100);
                       //6、去安全高度
                       MoveSyncTemp[0] = MainWindows.EmptPos[0];    //X
                       MoveSyncTemp[1] = MainWindows.EmptPos[1];    //Y  
                       MoveSyncTemp[2] = MainWindows.StandPos[2];    //放料高度
                       MoveSyncTemp[3] = MainWindows.EmptPos[3];    //Aanle
                       zmcaux.ZAux_Direct_MoveAbs(MainWindows.g_Handle, 4, MainWindows.gVAxisList, MoveSyncTemp);

                       //操作MoveSyncBuff数据先加锁
                       while (true)
                       {
                           if (MainWindows.SetMoveSyncFlag == 0)
                           {
                               MainWindows.SetMoveSyncFlag = 1;
                               break;
                           }
                       }
                       //视觉匹配缓冲区数据往前覆盖
                       for (int k = 0; k < 49; k++)
                       {
                           MainWindows.MoveSyncBuff[k, 0] = MainWindows.MoveSyncBuff[k + 1, 0];
                           MainWindows.MoveSyncBuff[k, 1] = MainWindows.MoveSyncBuff[k + 1, 1];
                           MainWindows.MoveSyncBuff[k, 2] = MainWindows.MoveSyncBuff[k + 1, 2];
                           MainWindows.MoveSyncBuff[k, 3] = MainWindows.MoveSyncBuff[k + 1, 3];
                           MainWindows.MoveSyncBuff[k, 4] = MainWindows.MoveSyncBuff[k + 1, 4];
                       }
                       //解锁
                       MainWindows.SetMoveSyncFlag = 0;
                       //等待输出口打开
                       int TimeOut = 10000;
                       TimeOut = 100000;
                       //等待轴停止
                       int AxisIdle = 0;                 //轴停止状态
                       while (TimeOut > 0)
                       {
                           zmcaux.ZAux_Direct_GetIfIdle(MainWindows.g_Handle, MainWindows.gVAxisList[0], ref AxisIdle);
                           if (AxisIdle == (-1))
                           {
                               break;
                           }
                           Thread.Sleep(10);
                           TimeOut = TimeOut - 10;
                       }
                       if (TimeOut <= 0)
                       {
                           //超时要报错,程序要停止
                           WriteLog("等待轴停止超时");
                           //Thread.Sleep(100);
                           SysRunFlag = 0;
                           break;
                       }
                       SortNum.Text = (Convert.ToInt32(SortNum.Text) + 1).ToString();
                       WriteLog("放料成功");
                       //退出while 单次循环
                       continue;
                   }
                   else if ((MainWindows.MoveSyncBuff[0, 1] + TempMpos) > MainWindows.SyncReX[1])
                   {
                       //操作MoveSyncBuff数据先加锁
                       while (true)
                       {
                           if (MainWindows.SetMoveSyncFlag == 0)
                           {
                               MainWindows.SetMoveSyncFlag = 1;
                               break;
                           }
                       }
                       //视觉匹配缓冲区数据往前覆盖
                       for (int k = 0; k < 49; k++)
                       {
                           MainWindows.MoveSyncBuff[k, 0] = MainWindows.MoveSyncBuff[k + 1, 0];
                           MainWindows.MoveSyncBuff[k, 1] = MainWindows.MoveSyncBuff[k + 1, 1];
                           MainWindows.MoveSyncBuff[k, 2] = MainWindows.MoveSyncBuff[k + 1, 2];
                           MainWindows.MoveSyncBuff[k, 3] = MainWindows.MoveSyncBuff[k + 1, 3];
                           MainWindows.MoveSyncBuff[k, 4] = MainWindows.MoveSyncBuff[k + 1, 4];
                       }
                       //解锁
                       MainWindows.SetMoveSyncFlag = 0;
                       //如果视觉匹配缓冲区没有数据了
                       if (MainWindows.MoveSyncBuff[0, 0] == 0)
                       {
                           //Delta去待机位
                           zmcaux.ZAux_Direct_MoveAbs(MainWindows.g_Handle, 4, MainWindows.gVAxisList, MainWindows.StandPos);
                           WriteLog("去待机位");
                       }
                   }
               }
           }
           else
           {
               //Delta去待机位
               zmcaux.ZAux_Direct_MoveAbs(MainWindows.g_Handle, 4, MainWindows.gVAxisList, MainWindows.StandPos);
           }
           Thread.Sleep(50);
       }
       //停止传送带
       zmcaux.ZAux_Direct_Single_Cancel(MainWindows.g_Handle, MainWindows.ConveyorAxisId, 2);
   }
}

本次,正运动技术C#之Delta并联机械手的视觉同步分拣,就分享到这里。

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

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

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 运动控制器
    +关注

    关注

    2

    文章

    366

    浏览量

    24449
  • 机器视觉
    +关注

    关注

    161

    文章

    4173

    浏览量

    118983
  • 机械手
    +关注

    关注

    7

    文章

    323

    浏览量

    29395
  • 0C
    0C
    +关注

    关注

    0

    文章

    4

    浏览量

    7998
  • 正运动技术
    +关注

    关注

    0

    文章

    81

    浏览量

    104
收藏 人收藏

    评论

    相关推荐

    基于机器视觉机械手装配系统方案设计

    本文设计并实现了基于机器视觉机械手装配系统,可在线完成对不同型号和任意摆放工件的装配任务。系统主要由机器视觉系统和机械手装配系统组成。
    发表于 06-23 10:21 3551次阅读
    基于机器<b class='flag-5'>视觉</b>的<b class='flag-5'>机械手</b>装配系统方案设计

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

    以正运动ZMC406R运动控制器为例,讲解Delta机械手运动控制应用开发。
    的头像 发表于 05-09 10:47 1158次阅读
    EtherCAT运动控制器<b class='flag-5'>Delta</b><b class='flag-5'>机械手</b>应用

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

    本文主要介绍如何通过正运动VPLC711视觉接口来实现相机标定和形状匹配功能。
    的头像 发表于 06-26 15:11 486次阅读
    <b class='flag-5'>C#</b><b class='flag-5'>之</b><b class='flag-5'>Delta</b><b class='flag-5'>并联机械手</b>的<b class='flag-5'>视觉</b>相机标定与形状匹配

    delta并联机械手2~

    实验室机械手行业芯事机械设计及工艺经验分享
    ZSH实验室
    发布于 :2022年04月08日 11:50:41

    delta滑台并联机械手

    实验室机械手行业芯事机械设计及工艺经验分享
    ZSH实验室
    发布于 :2022年04月08日 11:51:42

    深圳机械手视觉分拣系统在手机盖板的应用

    的装配精度,不便于将产品的精度稳定地控制在所需的精度范围内。因而,当组装效率和装配精度均需要提升时,人工装配的方式便于实现效率和精度之间的平衡。四元数机械手视觉分拣系统应用于手机盖板,末端工位识别抓取
    发表于 05-18 09:40

    湖北视觉分拣机械手系统在手机盖板的应用

    视觉分拣机械手是工厂自动化立体仓库及物流配送中心对物流进行分类、整理的关键设备之一,通过应用分拣机可实现物流中心准确、快捷的工作。因此,在快递行业他被誉为“智能机器
    发表于 08-11 09:43

    深圳机械手视觉分拣系统有哪些特点及参数?

    可操作性好,可支持与触摸屏联机操作;4、通过识别产品特征,计算产品偏移值,控制机械手进行定位抓取;5、可根据客户具体机型进行定制化的高效方案;6、机械手操作灵活、占地空间小。深圳机械手
    发表于 09-22 15:33

    PLC控制机械手设计

    PLC机械手控制的实现二、设计要求:1. 阐述机械手的工作原理2. 如何实现PLC对机械手的控制3. 机械手控制程序设计第一节 
    发表于 12-13 14:15 371次下载

    机械手图册——机械手设计必看

    机械手设计必看
    发表于 02-01 15:14 72次下载

    基于SJA1000芯片和82C250芯片实现机械手控制系统的设计

    物料搬运机械手机械手和物料分拣两部分装置组成。如图1所示,机械手主要由机座(采用步进电机驱动旋转)、水平手臂(采用直线坐标气缸HMP-20-200)、垂直手臂(采用滑块气缸SLT-1
    发表于 05-17 10:10 1786次阅读

    使用并联机器人和机器视觉技术实现自动分拣机器视觉软件系统的设计

    针对我国食品生产行业的实际需求,基于并联机器人,机器视觉等先进技术,构建了面向食品生产包装的高速机器人分拣系统,研究了输送带上运动食品的机器视觉定位算法,设计了运动食品分级与定位的机器
    发表于 11-16 18:05 26次下载
    使用<b class='flag-5'>并联机</b>器人和机器<b class='flag-5'>视觉</b>技术实现自动<b class='flag-5'>分拣</b>机器<b class='flag-5'>视觉</b>软件系统的设计

    机械手视觉引导相机和伺服电机算法

    机械手分为:4轴,6轴或者XY模组或UVW模组。相关的视觉引导项目主要包括:抓取,放置,位置补正,贴合。
    发表于 10-11 15:44 1889次阅读

    Delta并联机械臂实现电磁铁搬运功能

    1. 功能说明    R037样机是一款Delta并联机械臂。本文示例将利用Delta并联机械臂实现不同点定点搬运磁铁物料的效果。 2. 结构说明    
    的头像 发表于 03-09 08:43 831次阅读
    <b class='flag-5'>Delta</b><b class='flag-5'>并联机械</b>臂实现电磁铁搬运功能

    机器视觉控制机械手的具体过程

    机器视觉控制机械手是一种将机器视觉技术与机械手控制技术相结合的自动化技术。它通过机器视觉系统获取目标物体的图像信息,然后利用图像处理技术对图
    的头像 发表于 07-04 10:40 136次阅读