openpnp - 自动换刀的设置
文章目录
- openpnp - 自动换刀的设置
- 概述
- 笔记
- 采用的openpnp版本
- 自动换刀库的类型选择
- 自动换刀设置前的注意事项
- 先卸掉吸嘴座上所有的吸嘴
- 删掉所有的吸嘴
- 设置自动换刀的视觉识别
- 设置吸嘴座为自动换刀 - 以N1为例
- 备注
- 补充 - 吸嘴轴差个0.3mm, 就有可能怼坏吸嘴
- END
openpnp - 自动换刀的设置
概述
自动换刀的吸嘴库(openpnp - 吸嘴站(Nozzle Tip Changer)的选择)已经做好了.
试了一下, 自动换刀好使. 记录一下自动换刀的设置.
笔记
采用的openpnp版本
经过权衡(openpnp具体版本是否有不可接受的bug? 哪个版本最稳定可以用于生产?) 最终采用2022/8/1的开发版.
自动换刀库的类型选择
为了安全, 吸嘴库中的吸嘴数量最大化, 我采用了 带抱轴的吸嘴库
现在发现抱手层固定吸嘴轴的效果不是很好, 已经改进了抱手层, 送去打样了, 回来再试试.
自动换刀设置前的注意事项
设置自动换刀前, 要保持用手操作openpnp按钮的清醒思路(做每一步之前, 都要想一下, 这么做是否正确), 万一处于迷茫的状态, 很容易发生打刀或者吸嘴电机或者Z轴电机被怼在机械结构上, 出现事故时, 注意及时按下设备急停按钮来止损.
先卸掉吸嘴座上所有的吸嘴
删掉所有的吸嘴
此时, 吸嘴座上没有吸嘴, openpnp定义中也没有任何吸嘴. 这时, 就可以开始设置自动换刀了.
根据自己自动换刀库的实际情况 在openpnp中添加对应的吸嘴, 和吸嘴站上的吸嘴一一对应.
同一个吸嘴只能分配给N1或者N2, 不能同时分配给N1和N2, 因为每一个吸嘴设置时, 都是由实际的吸嘴座完成的吸取吸嘴并记录坐标完成的. 同一个吸嘴不可能由2个吸嘴座来分别完成吸取, openpnp不支持
对于我自己的吸嘴库, 分为2排, 一边各6个吸嘴. 分别插入的是502~507, 绿色和黑色的juki吸嘴都行.
下面一排给N1用, 上面一排给N2用.
在openpp中添加这12个吸嘴, 分别为NT1_502 ~ NT1_507, NT2_502 ~ NT2_507, 都用默认设置就行, 不用改.
将吸嘴分配给吸嘴座, N1_502 ~ N1_507给N1, N2_502 ~ N2_507给N2.
设备归零!
用手触摸试探吸嘴库中的所有吸嘴, 确认吸嘴都在物理停靠位置.
设置吸嘴的自动换刀坐标, 以N1_502为例.
打开N1_502的设置界面
在JOG面板中, 将顶部相机移动到N1_502的正上方, 将顶部相机十字对准吸嘴轴的中心. 坐标越准确越好(偏差应该在0.1mm之内), 可以将图像放大, 结合标尺的格子微调一下.
捕获吸嘴第一步的位置.
将第一步的相机十字换为吸嘴中心, 这时, 吸嘴座子就在吸嘴正上方.
用JOG面板, 将吸嘴座下落, 将吸嘴座和吸嘴扣合. 具体是否扣合, 可以在做这个实验前, 手工上吸嘴, 看看合理扣合时, 具体是个啥深度, 然后心里做个标记.
我这里, 只要吸嘴座下落到吸嘴上的螺丝孔上缘, 就扣合好了.
用1mm将吸嘴座向下落, 接近扣合位置时, 采用0.1mm往下落, 扣合时, 可以听到扣合的声音(再往下落不到0.5mm, 就扣合到位了). 当听到声音后, 再结合是否和自己先前手工装吸嘴时观察到的扣合位置接近, 作为扣合结束的时机.
我这里, N1的Z轴坐标在-34.7mm处, 基本到达扣合位置.
在第2步, 捕获当前Z坐标.
根据自己吸嘴库的吸嘴可以平移出吸嘴停靠位置到不剐蹭其他物体为准, 用JOG面板将吸嘴平移出来.
在第3步中捕获当前坐标.
在JOG面板中Z轴归零
然后在第4步捕获当前位置.
将取吸嘴动作的速度改为0.1, 这样安全一些.
分别点击吸嘴的回收按钮, 要倒着逐个点击, 是吸嘴从吸嘴座上回到吸嘴库中.
当前, 如果按钮点错了, 直接就撞刀了…
设置自动换刀的视觉识别
这步通过吸嘴物理停靠位置的图像判断, 来判断吸嘴库位置是否有吸嘴, 防止发生事故(只有吸嘴库位置为空, 才允许卸掉吸嘴, 将吸嘴自动插入吸嘴库, 只有吸嘴库不为空, 才允许自动将吸嘴载入到吸嘴座)
将视觉定位由默认的None改为第一步的位置
用第一步位置的按钮, 将相机十字自动对准吸嘴轴中心
当前, 吸嘴在吸嘴库停靠位置, 对有吸嘴的模板进行拍照.
如果拍照的图像没有完全容纳下吸嘴轴, 将模板宽度和高度适当调大, 知道拍照的图像可以容纳下吸嘴轴的完整图像. 然后应用.
然后用手(镊子比较方便)将吸嘴取出来, 使吸嘴停靠位置为空.
当前, 吸嘴库停靠位置为空, 对没有吸嘴的模板进行拍照.
将识别精度改精确一些.
现在测试一下, 是否可以自动判断吸嘴停靠位置为空还是有吸嘴.
可以看出, 判断好使. 提示说, 现在吸嘴座为空, 需要去吸取吸嘴, 但是吸嘴停靠位置为空, 没有吸嘴. 这样就很安全.
将吸嘴用镊子和手, 将吸嘴装入吸嘴库的停靠位置. 然后再测试.
当操作安全时, 没有任何提示, 只是图像在变化(顶部相机在突出显示吸嘴), 这说明, 当前可以操作吸嘴.
此时, 需要重新弄确认一下吸嘴位置是否对?(因为用手取出, 插入了吸嘴), 如果位置不对, 重新确认一下坐标, 否则将吸嘴座子落下时, 会直接将吸嘴砸坏(吸嘴坏了还有, 如果将吸嘴电机或Z电机整坏, 就划不来了).
这时, 就可以看出, 抱手层固定吸嘴轴效果是否好的重要性.
此时, 吸嘴已经回到了吸嘴库中的物理停靠位置. N1_502吸嘴的自动换吸嘴的参数已经设置完成.
同理, 将剩下的11个吸嘴坐标都设置好.
最后吸嘴都设置完了, 归零后, 将所有吸嘴的第一位置重新验证一下(如果不对, 将吸嘴位置都调整对), 防止杯具发生.
设置吸嘴座为自动换刀 - 以N1为例
设备刚标定好时, 是手工换刀.
现在点击选项 - 使能自动换刀, 手工换刀改变.
这样我们通过软件手工换吸嘴或者贴不同料时, 就可以来吸嘴站自动换成料指定的吸嘴.
以后归零后, 第一件事情, 先将顶部相机十字落在吸嘴上的第一位置, 看看位置正确(强迫症犯了, 还是担心坐标变了). 然后再干别的事情.
当前, 吸嘴座上没有吸嘴, 现在通过软件换吸嘴, 看看能不能自动换嘴.
现在勾选最后NT1_502吸嘴的载入选项框, 如果正常的话, 就会将NT1_502载入到N1吸嘴座.
正常
前面设置了换嘴时的操作速度为0.1, 如果位置稍有差异, 也会很安全. 换嘴的动作慢的很.
现在先归零, 让吸嘴离吸嘴库远点.
现在N1上载入了N1_502, 现在点击N1的载入框, 使勾消失, 让吸嘴N1_502回到吸嘴库.
现在吸嘴的自动换刀的载入/卸载都成功了.
备注
感觉有以下点比较重要, 可以防止在换刀时出现意外.
- 机械归零的低速距离都设置成5mm, 防止机械归零有时坐标不全为(0,0,0)的状况.
- 一定要开启视觉归零, 防止机械归零出现0.xmm的偏差.
- 视觉归零后, 先去吸嘴库上任意一个吸嘴轴第一位置, 看看坐标是否正确(如果超过0.1mm, 需要调整, 如果吸嘴轴的停靠不稳固/用手动过吸嘴/设备震动厉害, 有可能出现这种问题).
- 设备不用时, 将吸嘴都用openpnp软件放在吸嘴库中, 然后再关闭openpnp软件. 保证任何时候, 运行openpnp软件时, 吸嘴座上都没有吸嘴.
- 吸嘴和N1, N2的高度参数都不同, 设置参数时, 吸嘴座落下来时, 用人工判断扣合的高度值, 不要一股脑都设置成一样, 防止意外.
- 每个吸嘴换嘴时的速度, 还是设置成比较低的速度靠谱(e.g. 0.1), 如果差个0.2mm, 也可以正常换刀, 不至于将吸嘴怼坏.
- 买来的吸嘴, 可能有制造时的突起或毛边, 用砂纸打一下, 光滑了, 再放入吸嘴库.
补充 - 吸嘴轴差个0.3mm, 就有可能怼坏吸嘴
中间不知道哪里整错了(有可能是拍空吸嘴库位置的照片时, 用收拿出/插入了吸嘴), 归零后, 再看吸嘴轴第一位置偏了0.3mm左右, 用手工来测试4个位置是否正确.
手工测试时, 是不会按照设定的换嘴低速走的, 还是正常速度
直接将黑色的NT1_502怼碎了…, 还好吸嘴电机和Z电机都没问题.
看来归零后, 先看看吸嘴库中的吸嘴坐标变了没有很重要.
不过, 只要设置好了吸嘴库上的所有吸嘴, 设备本身没震动, 没有用手拔出/插入过吸嘴, 问题不大.
END
相关文章:
openpnp - 自动换刀的设置
文章目录 openpnp - 自动换刀的设置概述笔记采用的openpnp版本自动换刀库的类型选择自动换刀设置前的注意事项先卸掉吸嘴座上所有的吸嘴删掉所有的吸嘴设置自动换刀的视觉识别设置吸嘴座为自动换刀 - 以N1为例备注补充 - 吸嘴轴差个0.3mm, 就有可能怼坏吸嘴END openpnp - 自动换…...
《HeadFirst设计模式(第二版)》第十章代码——状态模式
如下图所示,这是一个糖果机的状态机图,要求使用代码实现: 初始版本: package Chapter10_StatePattern.Origin;/*** Author 竹心* Date 2023/8/19**/public class GumballMachine {final static int SOLD_OUT 0;final static int…...
day-25 代码随想录算法训练营(19)回溯part02
216.组合总和||| 思路:和上题一样,差别在于多了总和,但是数字局限在1-9 17.电话号码的字母组合 思路:先纵向遍历第i位电话号码对于的字符串,再横向递归遍历下一位电话号码 93.复原IP地址 画图分析: 思…...
PG逻辑备份与恢复
文章目录 创建测试数据pg_dump 备份pg_restore 恢复pg_restore 恢复并行备份的文件PG 只导出指定函数 创建测试数据 drop database if exists test; create database test ; \c test create table t1(id int primary key); create table t2(id serial primary key, name varch…...
图数据库_Neo4j和SpringBoot整合使用_实战创建明星关系图谱---Neo4j图数据库工作笔记0010
然后我们再来看一下这个明星关系图谱 可以看到这里 这个是原来的startRelation 我们可以写CQL去查询对应的关系 可以看到,首先查询出来以后,然后就可以去创建 我们可以把写的创建明星关系的CQL,拿到 springboot中去执行 可以看到,这里我们先写一个StarRelationRepository,然…...
Linux网络编程:Socket套接字编程(Server服务器 Client客户端)
文章目录: 一:定义和流程分析 1.定义 2.流程分析 3.网络字节序 二:相关函数 IP地址转换函数inet_pton inet_ntop(本地字节序 网络字节序) socket函数(创建一个套接字) bind函数(给socket绑定一个服务器地址结…...
Mac OS下应用Python+Selenium实现web自动化测试
在Mac环境下应用PythonSelenium实现web自动化测试 在这个过程中要注意两点: 1.在终端联网执行命令“sudo pip install –U selenium”如果失败了的话,可以尝试用命令“sudo easy_install selenium”来安装selenium; 2.安装好PyCharm后新建project&…...
每天一道leetcode:934. 最短的桥(图论中等广度优先遍历)
今日份题目: 给你一个大小为 n x n 的二元矩阵 grid ,其中 1 表示陆地,0 表示水域。 岛 是由四面相连的 1 形成的一个最大组,即不会与非组内的任何其他 1 相连。grid 中 恰好存在两座岛 。 你可以将任意数量的 0 变为 1 &#…...
【学习日记】【FreeRTOS】FreeRTOS 移植到 STM32F103C8
前言 本文基于野火 FreeRTOS 教程,内容是关于 FreeRTOS 官方代码的移植的注意事项,并将野火例程中 STM32F103RC 代码移植到 STM32F103C8。 一、FreeRTOS V9.0.0 源码的获取 两个下载链接: 官 网 代码托管 二、源码文件夹内容简介 Source…...
Qt 屏幕偶发性失灵
项目场景: 基于NXP i.mx7的Qt应用层项目开发,通过goodix使用触摸屏,走i2c协议。 问题描述 触摸屏使用过程中意外卡死,现场分为多种: i2c总线传输错误,直观表现为触摸屏无效,任何与触摸屏挂接在同一总线上的i2c设备,均受到干扰,并且在传输过程中内核报错以下代码: G…...
如何在pycharm中指定GPU
如何在pycharm中指定GPU 作者:安静到无声 个人主页 目录 如何在pycharm中指定GPU打开编辑配置点击环境变量添加GPU配置信息推荐专栏在Pycharm运行程序的时候,有时候需要指定GPU,我们可以采用以下方式进行设置: 打开编辑配置 点击环境变量 添加GPU配置信息 添加名称:CU…...
C#判断字符串中有没有字母,正则表达式、IsLetter
要判断字符串中是否包含字母,可以使用正则表达式或者循环遍历字符串的方式。 方法一:使用正则表达式 using System.Text.RegularExpressions;string input "Hello123"; bool containsLetter Regex.IsMatch(input, "[a-zA-Z]");上…...
Jtti:Ubuntu怎么限制指定端口和IP访问
在 Ubuntu 系统中,可以使用防火墙规则来限制特定的端口和IP访问。常用的防火墙管理工具是 iptables,以下是使用 iptables 来限制指定端口和IP访问的步骤: 安装 iptables: 如果系统中没有安装 iptables,可以使用以下命…...
机器学习/深度学习需要掌握的linux基础命令
很多深度学习/机器学习/数据分析等领域(或者说大多数在Python环境下进行操作的领域)的初学者入门时是在Windows上进行学习,也得益于如Anaconda等工具把环境管理做的如此友善 但如果想在该领域继续深耕,一定会与Linux操作系统打交…...
C++11 std::async推荐使用 std::launch::async 模式
async真假多线程 std::launch::async真多线程 std::launch::async | std::launch::deferred可能多线程 std::launch::deferred假多线程 枚举变量说明 枚举定义 enum class launch {async 1, // 0b1deferred 2, // 0b10any async | def…...
没有使用springboot 单独使用spring-boot-starter-logging
如果您不使用Spring Boot框架,但想单独使用Spring Boot Starter Logging,您可以按照以下步骤进行: 1. 添加Maven依赖: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boo…...
创建Azure资源锁
锁的介绍 在Azure中,资源锁是一种用于保护订阅、资源组或者单个资源的机制。它可以防止对受锁定的资源进行删除或修改操作,帮助确保资源的连续可用性和安全性。 Azure中的资源锁可以分为两种类型: 删除锁(CanNotDelete…...
卷积神经网络教程 (CNN) – 使用 TensorFlow 在 Python 中开发图像分类器
在这篇博客中,让我们讨论什么是卷积神经网络 (CNN) 以及 卷积神经网络背后的架构——旨在解决 图像识别系统和分类问题。 卷积神经网络在图像和视频识别、推荐系统和自然语言处理方面有着广泛的应用。 目录 计算机如何读取图像? 为什么不是全连接网络?...
MyBatis XML映射处理CLOB和BLOB类型
Mybatis的MapperXML映射文件应该处理数据库字段类型为CLOB和BLOB类型的数据呢?首先我们先看下CLOB和BLOB这两种数据类型的介绍。 介绍 使用Mybatis时涉及到两种特殊类型的处理,分别是Blob(Binary Large Object)和Clob࿰…...
FPGA_学习_14_第一个自写模块的感悟和ila在线调试教程与技巧(寻找APD的击穿偏压)
前一篇博客我们提到了,如果要使用算法找到Vbr,通过寻找APD采集信号的噪声方差的剧变点去寻找Vbr是一个不错的方式。此功能的第一步是在FPGA中实现方差的计算,这个我们已经在上一篇博客中实现了。 继上一篇博客之后,感觉过了很久了…...
【2023新教程】树莓派定时自动拍照并上传腾讯云对象存储COS
1 换源 仅适用于Release date: May 3rd 2023、Debian version: 11 (bullseye)这个树莓派OS版本,其他版本不保证有效。 首先使用如下命令,查看自己树莓派的架构。 uname -a结果如下: 如果红圈处显示为aarch64,使用命令sudo na…...
校企合作谋发展 合作共赢谱新篇|云畅科技与湖南民族职业学院签订校企合作协议
产业是经济发展的重要引擎,人才是产业发展的重要资源。为积极探索软件人才培育新路径,共商政产学研协同新机制,8月8日,云畅科技与湖南省民族职业学院教育技术学院软件技术专业签订校企合作协议。 会上,学院副校长王志平…...
vue技术学习
vue快速入门 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>vue快速入门</title> </head> <body> <!--老师解读 1. div元素不是必须的,也可以是其它元素࿰…...
基于空间的图卷积神经网络:GNN
目录 欧氏空间中神经网络发挥巨大最作用,DNA,知识图谱三维或者多维空间不行 邻接矩阵实现图结构的矩阵化表示:造梦师 局和操作实现层内消息传递:带线的连接机传递消息 GCN通过邻域聚合实现特征提取 SVM支持向量机 编辑 硬分…...
.net core发布到IIS上出现 HTTP 错误 500.19
1.检查.net core 环境运行环境是否安装完成,类似如下环境 2.IIS是否安装全 本次原因就是IIS未安装全导致的 按照网上说的手动重启iis(iisreset)也不行...
01_Redis单线程与多线程
01——Redis单线程与多线程 一、Redis是单线程还是多线程 在谈Redis的单线程或多线程时,需要根据版本来区分。 在redis 3.x之前,redis是单线程的从redis 4.x开始,redis引入多线程。处理客户端请求时,使用单线程;在异…...
机器学习——随机森林【手动代码】
随机森林这个内容,是目前来说。。。最最最简单,最好理解,应该也是最好实现的了!!! 先挖坑,慢慢填 随机森林,这个名字取得,果然深得该算法的核心精髓,既随机&a…...
Vue 2 处理边界情况
访问元素和组件 通过Vue 2 组件基础一文的学习,我们知道组件之间可以通过传递props或事件来进行通信。 但在一些情况下,我们使用下面的方法将更有用。 1.访问根实例 根实例可通过this.$root获取。 我们在所有子组件中都可以像上面那样访问根实例&…...
写一个mysql 正则表达式,每三个img标签图片后面添加<hr>
你可以使用MySQL的REGEXP_REPLACE函数来实现这个需求。下面是一个示例的正则表达式和SQL语句: sql UPDATE your_table SET your_column REGEXP_REPLACE(your_column, (<img[^>]*>){3}, $0<hr>) WHERE your_column REGEXP (<img[^>]*>){3}…...
Spring MVC异常处理
Spring MVC异常处理 Spring MVC异常处理机制HandlerExceptionResolver的实现类DefaultHandlerExceptionResolver实现类DefaultHandlerExceptionResolver 在Controller的请求处理方法中手动使用try…catch块捕捉异常,当捕捉到指定的异常时,系统返回对应的…...
作文网站源码/百度的人工客服
近日荣耀手机CEO赵明在对于荣耀手机是否采用鸿蒙系统一事,做出了回应“荣耀会持续关注鸿蒙生态的发展,并且从消费者体验的角度选择最好的产品和解决方案”,媒体分析认为这意味着荣耀手机暂时不会考虑采用鸿蒙系统,而技术成熟、生态…...
网站建设费用构成/如何宣传自己的网站
1、why: 为啥学NDK开发,其实是为了项目需要调用底层的一些C/C的一些东西;另外就是为了效率更加高些;Android ndk 提供 了 opengls2、what 是什么The NDK is a toolset that allows you to implement parts of your app using nati…...
wordpress facebook login/谷歌外链工具
两个节点,都可以更新数据,并且互为主从,容易产生的问题:数据不一致;因此慎用,考虑要点:自动增长id,配置一个节点使用奇数id 主主复制的配置步骤: (1) 各节点使用一个惟一…...
百度seo和sem/优化营商环境指什么
有两种解决方案: 1. 客户端button一定得是button类型,而不能是submit,且此服务器端的button只能用width0 height0 来隐藏,而不能用style"display:none;" 或visiblefalse来进行隐藏! 2. 在服务器上注册:this.btnStat.At…...
网站前置审批专项/国际婚恋网站排名
环境: 电脑:联想E14 系统:Windows 10 专业版 64位 VMware 16.0 :Ubuntu20.04 问题描述: 如何更新国内源,原因是安装ssh没成功 解决方案: 1.备份原来的源 sudo cp /etc/apt/sources.list…...
作为一个大学生网站 应该怎么做/51趣优化网络seo工程师教程
摘要:酿酒中葡萄,中要萄之被誉白葡为“王”的是。数据使用货币通手价值与流一是段统尺度。应该护主挑战中国界遗要面有(临的当前的世产保。...酿酒中葡萄,中要萄之被誉白葡为“王”的是。创建休克起的紊乱常引时最酸碱是。数据使用货币通手价…...