当前位置: 首页 > news >正文

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框架&#xff0c;但想单独使用Spring Boot Starter Logging&#xff0c;您可以按照以下步骤进行&#xff1a; 1. 添加Maven依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boo…...

创建Azure资源锁

锁的介绍 在Azure中&#xff0c;资源锁是一种用于保护订阅、资源组或者单个资源的机制。它可以防止对受锁定的资源进行删除或修改操作&#xff0c;帮助确保资源的连续可用性和安全性。 Azure中的资源锁可以分为两种类型&#xff1a; 删除锁&#xff08;CanNotDelete&#xf…...

卷积神经网络教程 (CNN) – 使用 TensorFlow 在 Python 中开发图像分类器

在这篇博客中,让我们讨论什么是卷积神经网络 (CNN) 以及 卷积神经网络背后的架构——旨在解决 图像识别系统和分类问题。 卷积神经网络在图像和视频识别、推荐系统和自然语言处理方面有着广泛的应用。 目录 计算机如何读取图像? 为什么不是全连接网络?...

MyBatis XML映射处理CLOB和BLOB类型

Mybatis的MapperXML映射文件应该处理数据库字段类型为CLOB和BLOB类型的数据呢&#xff1f;首先我们先看下CLOB和BLOB这两种数据类型的介绍。 介绍 使用Mybatis时涉及到两种特殊类型的处理&#xff0c;分别是Blob&#xff08;Binary Large Object&#xff09;和Clob&#xff0…...

FPGA_学习_14_第一个自写模块的感悟和ila在线调试教程与技巧(寻找APD的击穿偏压)

前一篇博客我们提到了&#xff0c;如果要使用算法找到Vbr&#xff0c;通过寻找APD采集信号的噪声方差的剧变点去寻找Vbr是一个不错的方式。此功能的第一步是在FPGA中实现方差的计算&#xff0c;这个我们已经在上一篇博客中实现了。 继上一篇博客之后&#xff0c;感觉过了很久了…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...