精华内容
下载资源
问答
  • ZNL-DM06型 工业机器人打磨去毛刺实操工作站 一、概述 ZNL-DM06型 工业机器人打磨去毛刺实操工作站以真实工厂应用要求为基础,优化功能设计,提高系统灵活度,融入实训教学过程,为具有一定工业机器人基础操作基础的...

    ZNL-DM06型 工业机器人打磨去毛刺实操工作站
    一、概述
    ZNL-DM06型 工业机器人打磨去毛刺实操工作站以真实工厂应用要求为基础,优化功能设计,提高系统灵活度,融入实训教学过程,为具有一定工业机器人基础操作基础的学生提供结合焊接工艺的实训平台。ZNL-DM06型 工业机器人打磨去毛刺实操工作站由工业机器人、去毛刺工具、供气系统、工作台及工装夹具、工业吸尘器、安全防护组件及配套设备构成,利用工业机器人这一柔性执行单元,结合去毛刺工艺实现的实际加工单元,工业机器人打磨实训平台可以完成对任意形状零件的去毛刺加工。在学生充分学习工业机器人基础操作后,完全掌握参数设置、轨迹编程等技能基础上,结合去毛刺工艺完成与真实工厂应用相同的实训项目,了解去毛刺工作站的构成及维护,缩短岗前培训过程,提高就业竞争力。
    在这里插入图片描述
    二、产品特点:
    1、烟尘净化单元(吸管安装在工作区域内,能够直接吸走烟尘和飞溅,减少对环境烟尘排放,能防止打磨粉尘对人体的伤害。)
    2、打磨单元(由附属装置、打磨抛光机、工件承载台及夹具等组成)
    3、控制柜单元(主要由PLC、触摸屏、开关电源、等组成)
    三、工作站运行环境参数 :
    1、交流电源:单相 AC 380 V±10% 50Hz
    2、工作环境:-10~50℃;环境湿度:≤90%无水珠凝结
    3、整机功耗:6kW;
    4、安全保护措施:安全保护措施:具有接地、漏电压、漏电流保护,安全指标符合国家标准
    5、外形尺寸(长宽高):长×宽×高=(4500×4500×2000)mm(±5%)
    四、打磨机参数:
    1、砂带宽度:≥90mm
    2、功率:≥3kw;
    3、打磨转速:≥1800r/min;可根据砂带磨损程度切换转速,保证打磨效果;
    4、其内部设置力反馈系统,让磨削力达到恒力状态,从而提高了抛光的质量,减少不良产品产生。
    五、工业机器人技术参数:
    1、轴数:6轴
    2、负载:6kg
    3、工作范围:1400mm
    4、重复定位精度:±0.1mm
    5、防护等级:IP54
    6、控制方式:AC伺服控制
    7、集成信号源:上臂12路信号,配标准机器控制系统

    展开全文
  • 一种用于植物叶片图像骨架提取的去毛刺方法第 27 卷 第 1 期 电子测量与仪器学报 Vol. 27 No. 1· 52 · JOURNAL OF ELECTRONIC MEASUREMENT AND INSTRUMENT ...

    一种用于植物叶片图像骨架提取的去毛刺方法

    第 27 卷 第 1 期 电子测量与仪器学报 Vol. 27 No. 1

    · 52 · JOURNAL OF ELECTRONIC MEASUREMENT AND INSTRUMENT 2013 年 1 月

    DOI: 10.3724/SP.J.1187.2013.00052

    一种用于植物叶片图像骨架提取的去毛刺方法*

    郭斯羽 董红霞 张 翌

    (湖南大学电气与信息工程学院 长沙 410082)

    摘 要: 为了获取能描述植物叶片区域主要分支结构的骨架, 提出了一种植物叶片图像骨架中的毛刺去除方法。方法基于修剪

    后骨架所重构区域的质量判定骨架中的毛刺分支。重构区域与原区域的面积差指标被作为主控指标, 以保证修剪不会明显影响

    区域的宏观形状; 提出了突出部分骨架长度显著性指标作为保护性指标, 以保护对于叶片识别分类具有重要意义的尖细状边缘

    细节不被剪除。完整的剪除过程由贪婪策略控制。在实际图像上的实验结果表明, 所提方法能有效除去毛刺, 并能得到更为准

    确的叶片区域骨架。

    关键词: 骨架化; 骨架去毛刺; 距离变换; m 邻接性

    中图分类号: TP391.41 文献标识码: A 国家标准学科分类代码: 510.4050

    Pruning method for skeletonization of plant leaf images

    Guo Siyu Dong Hongxia Zhang Yi

    (School of Electrical and Information Engineering, Hunan University, Changsha 410082, China)

    Abstract: A skeleton pruning method for plant leaf image is proposed in order to obtain a skeleton representation for de-

    scribing major branches of the leaf regions. The method utilizes the region reconstruction quality of the pruned skeleton to

    determine the spurious branches in the skeleton. The difference between areas of the reconstructed region and the original

    region is used as the main control criterion to guarantee that the pruning does not affect the macro appearance of the re-

    gion. An index of the length of skeleton segment in spike region is proposed as the protective criterion to avoid pruning

    out thin and elongated boundary details, which are important for leaf recognition and classification. The pruning process

    as a whole is controlled by a greedy strategy. The experimental results on real-world images show that the proposed

    method can prune spurious branches effectively and give more accurate leaf

    展开全文
  • itk中的毛刺去除算法

    千次阅读 2017-06-14 16:22:02
    图像毛刺去除是图像处理中的一个重要...作用:该过滤能输入图像中移除小于一定长度的“刺”。 输入:二值图像。 该滤波器是一种顺序剪枝算法,计算时间依赖于图像的大小。 该算法用在二维图像,用法很简单: typedef

    图像毛刺去除是图像处理中的一个重要内容。在图像特征提取的过程中,毛刺会严重影响图像的结构,属于噪声污染。


    itk中提供了专门的毛刺去除算法类:itkBinaryPruningImageFilter。
    作用:该过滤器能输入图像中移除小于一定长度的“刺”。
    输入:二值图像。
    该滤波器是一种顺序剪枝算法,计算时间依赖于图像的大小。

    该算法用在二维图像,用法很简单:

      typedef itk::BinaryPruningImageFilter <ImageType, ImageType >
              ImageFilterType;
      ImageFilterType::Pointer pruneFilter = ImageFilterType::New();
      pruneFilter->SetInput(image);
      pruneFilter->SetIteration(iteration);
      pruneFilter->Update();
    代码分析:
    1..h中的私有变量:

    unsigned int           m_Iteration; //迭代次数 1
    2.准备数据:这里能看到又一种数据初始化方法,开源就是这样,八仙过海,各显神通~

    template <class TInputImage,class TOutputImage>
    void 
    BinaryPruningImageFilter<TInputImage,TOutputImage>
    ::PrepareData(void) 
    {  
      itkDebugMacro(<< "PrepareData Start");
      OutputImagePointer pruneImage = GetPruning();
    //开辟内存空间
      InputImagePointer  inputImage  = 
        dynamic_cast<const TInputImage  *>( ProcessObject::GetInput(0) );
    
      pruneImage->SetBufferedRegion( pruneImage->GetRequestedRegion() );
      pruneImage->Allocate();
    
      typename OutputImageType::RegionType region  = pruneImage->GetRequestedRegion();
    
    //迭代器
      ImageRegionConstIterator< TInputImage >  it( inputImage,  region );
      ImageRegionIterator< TOutputImage > ot( pruneImage,  region );
    
      it.GoToBegin();
      ot.GoToBegin();
    
      itkDebugMacro(<< "PrepareData: Copy input to output");
     
      while( !ot.IsAtEnd() )
          {
    	  //数据一一对应
          ot.Set( static_cast< typename OutputImageType::PixelType >( it.Get() ) );
          ++it;
          ++ot;
          }
      itkDebugMacro(<< "PrepareData End");
    }
    3.起细化作用的后处理方法,是不是感觉和细化算法有什么瓜葛?用的基础结构都差不多。

    template <class TInputImage,class TOutputImage>
    void 
    BinaryPruningImageFilter<TInputImage,TOutputImage>
    ::ComputePruneImage() 
    {
      itkDebugMacro( << "ComputeThinImage Start");
      OutputImagePointer    pruneImage          =  GetPruning();
    
      typename OutputImageType::RegionType region  = pruneImage->GetRequestedRegion();
    //NeighborhoodIterator 这个迭代器设计的帅啊
      typename NeighborhoodIteratorType::RadiusType radius;
      radius.Fill(1);//邻域半径设为1
      NeighborhoodIteratorType ot( radius, pruneImage, region );//参数1:半径;参数2:图像;参数3:区域
    //二维8邻域
      typename NeighborhoodIteratorType::OffsetType offset1 = {{-1,-1}};
      typename NeighborhoodIteratorType::OffsetType offset2 = {{-1,0}};
      typename NeighborhoodIteratorType::OffsetType offset3 = {{-1,1 }};
      typename NeighborhoodIteratorType::OffsetType offset4 = {{0,1}};
      typename NeighborhoodIteratorType::OffsetType offset5 = {{1,1}};
      typename NeighborhoodIteratorType::OffsetType offset6 = {{1,0}};
      typename NeighborhoodIteratorType::OffsetType offset7 = {{1,-1}};
      typename NeighborhoodIteratorType::OffsetType offset8 = {{0,-1}};
      
      unsigned int count = 0;
      while(count < m_Iteration)//m_Iteration:迭代次数,默认3次
      {
        ot.GoToBegin();//迭代开始
        while( ! ot.IsAtEnd() )//不止不休
        {
          if (ot.GetCenterPixel())
           {
             PixelType genus;
             genus  = ot.GetPixel(offset1) + ot.GetPixel(offset2);
             genus += ot.GetPixel(offset3) + ot.GetPixel(offset4);
             genus += ot.GetPixel(offset5) + ot.GetPixel(offset6);
             genus += ot.GetPixel(offset7) + ot.GetPixel(offset8);
             if (genus < 2)//如果8邻域的灰度值小于2,则把该点抹掉
               {
                 genus = 0;
                 ot.SetCenterPixel( genus );
               }
           }
    
          ++ot;//下一个
    	}
        ++count;
      }  
        itkDebugMacro( << "ComputeThinImage End");
    }
    4.#include "itkNeighborhoodIterator.h"
    注意这里用到一个很帅的迭代器:itkNeighborhoodIterator,用法看上面代码中的注释,比起自己写的函数好用多了。
    5.最后,看下算法设计的作者:
     * Rafael C. Gonzales and Richard E. Woods. 
     * Digital Image Processing. 
     * Addison Wesley, 491-494, (1993).
    又见冈萨雷斯 and 伍兹~ 什么叫经典?他俩几乎把数字图像处理领域的基础方法都写完了!膜拜吧!

    参考文献:
    1.http://www.vtk.org/Wiki/ITK/Examples/Morphology/BinaryPruningImageFilter
    2.http://blog.chinaunix.net/uid-25510439-id-3126204.html
    3.http://blog.163.com/zhoumhan_0351/blog/static/3995422720084190493758/

    展开全文
  • 完善触发器 &...示波 3.准备工作 1)翻出上周的同步板代码 2)翻出上周的同步板测试记录 4.运行测试 结语:本来触发器想用freertos任务调度重构实现类似多线程的效果,这样触发器接收信息和发送方

    完善触发器 & 去除同步板毛刺

    2020.08.04~2020.08.07

    1.任务

    1)触发器可以选择管脚输出,并且实现轮番发送信息实现多个管脚依次触发
    2)同步板毛刺去除

    2.环境 & 工具

    ubuntu16.04
    ROS kinetic
    Windows
    keil
    STM32CubeMX
    FluMcu
    示波器

    3.准备工作

    1)翻出上周的触发器代码
    2)翻出上周的同步板测试记录

    4.方案

    1)增加一个判断函数,新增管脚的初始化

    /* USER CODE END WHILE */
        char rx_message[RXSIZE] = {0};
    
        /* USER CODE END 2 */
    
        HAL_UART_Receive(&huart1, (uint8_t *)&rx_message, RXSIZE, 0xffff);
        // HAL_UART_Transmit(&huart1, (uint8_t *)&rx_message, RXSIZE, 0xffff);
        // while (HAL_UART_GetState(&huart1) == HAL_UART_STATE_BUSY_RX);
    
        PPS_trasmitter(rx_message);
    
        /* USER CODE BEGIN 3 */
    
    /* USER CODE BEGIN 4 */
    void PPS_trasmitter(char *message) {
      uint16_t rx_int = 0;
      uint8_t choose_pin = -1;
    
      choose_pin = (int)message[0] - 48;
    
      for (int i = 1; i < RXSIZE; i++) {
        rx_int = rx_int + ((int)message[i] - 48) * pow(10, RXSIZE - i - 1);
      }
    
      switch (choose_pin) {
      case 0:
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET);
        HAL_Delay(rx_int);
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);
        break;
    
      case 1:
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_SET);
        HAL_Delay(rx_int);
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_14, GPIO_PIN_RESET);
        break;
    
      case 2:
        HAL_GPIO_WritePin(GPIOC, GPIO_PIN_6, GPIO_PIN_SET);
        HAL_Delay(rx_int);
        HAL_GPIO_WritePin(GPIOC, GPIO_PIN_6, GPIO_PIN_RESET);
        break;
    
      case 3:
        HAL_GPIO_WritePin(GPIOC, GPIO_PIN_8, GPIO_PIN_SET);
        HAL_Delay(rx_int);
        HAL_GPIO_WritePin(GPIOC, GPIO_PIN_8, GPIO_PIN_RESET);
        break;
    
      case 4:
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_SET);
        HAL_Delay(rx_int);
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET);
        break;
    
      case 5:
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);
        HAL_Delay(rx_int);
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET);
        break;
    
      case 6:
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15, GPIO_PIN_SET);
        HAL_Delay(rx_int);
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_15, GPIO_PIN_RESET);
        break;
    
      case 7:
        HAL_GPIO_WritePin(GPIOC, GPIO_PIN_7, GPIO_PIN_SET);
        HAL_Delay(rx_int);
        HAL_GPIO_WritePin(GPIOC, GPIO_PIN_7, GPIO_PIN_RESET);
        break;
    
      case 8:
        HAL_GPIO_WritePin(GPIOC, GPIO_PIN_9, GPIO_PIN_SET);
        HAL_Delay(rx_int);
        HAL_GPIO_WritePin(GPIOC, GPIO_PIN_9, GPIO_PIN_RESET);
        break;
    
      case 9:
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_11, GPIO_PIN_SET);
        HAL_Delay(rx_int);
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_11, GPIO_PIN_RESET);
        break;
    
      default:
        break;
      }
    }
    /* USER CODE END 4 */
    
    
    
    
    

    2)代码看通了,再结合测试一看,显而易见毛刺的直接原因就是校正,但校正不能丢啊。
    还是很简单,校正错位半个波形就没毛刺了。具体操作就是动一些变量的位置。


    结语:
    本来触发器想用freertos任务调度重构实现类似多线程的效果,这样触发器接收信息和发送方波就能同时进行,但时间要求比较仓促,最后只好先用单线程写了个。
    同步板的原代码差点看不下去,全都堆在main.c中,测试用代码都没注释掉,没有一句注释,反复看了几遍,才慢慢理解代码逻辑,好歹终于看见了问题所在。

    注:本文为自用实习记录

    展开全文
  • 示波

    2020-05-11 21:10:31
    高分辨率:一般来说,原始信号都有很多噪声,表现为毛刺,故而有两种思维,一是对于重复信号,对于连续几帧做处理,处理的是同一位置,这个算法的前提是,该位置的信号具有重复性,比如求平均值可以去除噪声。...
  • 在DAC输出端引入去毛刺(Deglitch)电路,可以有效消除高速DAC开关切换期间产生的毛刺,从而提升电路无杂散动态范围(SFDR)。仿真结果表明,电路实现了0.75 LSB的DNL和0.5 LSB的INL,去毛刺电路可以在高频下将DAC的SFDR...
  • 贵州西驰变频售后服务-成都兴百川在新市场应用的不时扩展之中,原先的各种变频...对线路板、母排等除尘后,停止必要的防腐处置,涂刷绝缘漆,对已呈现部分放电、拉弧的母排须去除其毛刺后,再停止处置。对已绝缘...
  • 电容的四大特性是什么

    千次阅读 2017-10-11 13:23:18
     旁路电容是为本地器件提供能量的储能器件,它能使稳压的输出均匀化,降低负载需求。 就像小型可充电电池一样,旁路电容能够被充电,并向器件进行放电。 为尽量减少阻抗,旁路电容要尽量靠近负载器件的供电电源...
  • 状态机与序列检测的实现 1. 什么是状态机 状态机(State Machine)/有限状态机(Finite State Machine,简称FSM)在有限个状态之间按一定规律转换的时序电路。...1、可以有效地滤组合逻辑输出的毛刺; 2、
  • CAM Function支持的加工工艺包括:弧焊焊接、激光焊接、激光切割、喷涂、抛光、去毛刺以及一般用途等。在MotoSim EG-VRC软件中使用CAM Function时,加工工件模型必须是外部导入的模型,使用软件自...
  • 本人有台Z4,不过年份还是有点久的,最近4s店做召回,师傅说你这个渗油可以处理一下了,虽然问题不大,但是作为完美党不能忍决定换了4s店报价1千多,我就自己采购材料在外面换了,为了避免大家走弯路给大家看看副...
  • 电容的分类及作用

    2017-05-24 14:21:07
    旁路电容是为本地器件提供能量的储能器件,它能使稳压的输出均匀化,降低负载需求。就像小型可充电电池一样,旁路电容能够被充电,并向器件进行放电。为尽量减少阻抗,旁路电容要尽量靠近负载器件的供电电源管脚和...
  • 竞争冒险的Proteus8.6仿真,按键消除冒险毛刺,示波或者波形仿真可以直接观察
  • 基于NI LabVIEW建立一个机器人单元以精确地去除毛刺并用NI 1722智能相机为涡轮机翼进行质量检查。在去除之后,机器人会用NI 1722智能照相机随机检查表面缺陷,比如裂痕,压痕,擦痕以及在表面的加工痕迹。  LabVIEW...
  • 一、管路加工工具管路加工工具也是电冰箱维修人员的重要工具。其中以切管、扩管工具、...使用切管对铜管切割完毕后,还应当使用切管上端的刮管刀将切割铜管管口处的毛刺去除。操作时,将铜管管口垂直向下,...
  • 纯组合电路容易产生毛刺,时序逻辑电路对于组合逻辑的毛刺具有容忍度,从而改善电路的时序特性 2)纯组合逻辑电路完成不了什么功能? 纯组合逻辑只能由当前输入决定当前输出,而不能实现带反馈的逻辑(纯组合电路...
  • 特点 90m ΩΩΩ的高边 MOSFET ( G547E 、 G547 F 、 G547G 、 G557H 、 G5947M ) 提供 5 个版本的电流限制 折页 工作范围:2.7 V 至5.5 V ...带输出关断拉低电阻的输出( OC ) SOT - 23 - 6 、 SOP - 8
  • 下面是 I2C 总线的一些特征 • 只要求两条总线线路 一条串行数据线 SDA 一条串行时钟线 SCL...• 片上的滤波器可以滤总线数据线上的毛刺波 保证数据完整 • 连接到相同总线的 IC 数量只受到总线的最大电容 400pF 限制
  • 旁路电容是为本地器件提供能量的储能器件,它能使稳压的输出均匀化,降低负载需求。就像小型可充电电池一样,旁路电容能够被充电,并向器件进行放电。 为尽量减少阻抗,旁路电容要尽量靠近负载器件的供电电源管...
  • 旁路电容是为本地器件提供能量的储能器件,它能使稳压的输出均匀化,降低负载需求。 就像小型可充电电池样,旁路电容能够被充电,并向器件进行放电。 为尽量减少阻抗,旁路电容要尽量靠近负载器件的供电电源管脚和...
  • 想在32中根据串口收到的值不断修改定时器的周期,然后写了如下代码 ``` while(1) { //串口接受 数据给val ...后来用示波看了一下 ...也尝试过添加延时 但波形出现的毛刺很厉害 是不是不能这种方式改周期啊
  • 吃一堑长一智吧

    2010-01-19 21:04:00
     刚拿到板的时候,怀疑有一个极小的毛刺导致短路,但是很快就否决了,若是短路的话,放在读卡上必然也是不能用的,很快就想到周工的建议,于是回家去除认为有问题的电感,用一个跳线代替,上手机测试,刚开始时还...
  • 电容的作用

    千次阅读 2011-03-16 13:45:00
    下面分类详述之:1)旁路 旁路电容是为本地器件提供能量的储能器件,它能使稳压的输出均匀化,降低负载需求。 就像小型可充电电池样,旁路电容能够被充电,并向器件进行放电。 为尽量减少阻抗,旁路电容要尽量...
  • 自动生成文章目录1. 同步复位的优点2. 同步复位的缺点3. 异步复位的优点4. 异步复位的缺点5. recovery time 复位恢复时间6....同步复位可能需要一个脉冲展宽,以保证复位信号能出现在时钟有效沿出。 在
  • verilog latch

    2020-10-21 20:20:26
    在 Verilog 中用来暂时存放参与运算的数据和运算结果的变量。一个变量声明为寄存器时,它既可以被综合成触发器,也可能被综合成 Latch,甚至是 wire 型变量。... 3)锁存的出现使得静态时序分析变得更
  • 电容元件常规用法

    千次阅读 2013-08-13 15:15:14
    1、应用于电源电路,实现旁路、藕、滤波和储能的作用,下面分类详述之: 1)旁路 旁路电容是为本地器件提供能量的储能器件,它能使稳压的输出均匀化,降低负载需求。就像小型可充电电池一样,旁路电容能够被...
  • 2020-09-19

    2020-09-19 12:19:19
    低通滤波,从字面意思理解就是低频信号可以通过,高频信号会被滤掉,主要用于去除信号的毛刺和干扰,工程上应用较多。 低通滤波器的基本理论公式是: y(t) = K*u(t) + (1-K)y(t-1) = y(t-1) + K[u(t)-y(t-1)] 其中,...
  • 电容在电路中的作用

    2012-04-24 19:35:23
    1、应用于电源电路,实现旁路、藕、滤波和储能的作用,下面分类详述电容的作用: 1)旁路 旁路电容是为本地器件提供能量的储能器件,它能使稳压的输出均匀化,降低负载需求。就像小型可充电电池一样,旁路...
  • 周期为基准,由软件产生计数闸门,这时要满足频率测量结果为4 位有效数字, 则计数闸门宽度大于1s 即可。当待测信号的频率小于2Hz 时,定时/ 计数器构 成为定时器,由频率计的予处理电路把待测信号变成方波,方波宽度...
  • 地弹是地连接处在通过大 电流毛刺时的电压降。 3)藕,又称解藕。从电路来说,总是可以区分为驱动的源和被驱动的负载。如果负载电容比较大,驱动电路要把电容充电、放电,才能完成信号的跳变,在上 升沿...

空空如也

空空如也

1 2
收藏数 32
精华内容 12
关键字:

去毛刺器