倍福TwinCAT(贝福Beckhoff)应用教程13.2 TwinCAT控制松下伺服 NC自定义直线插补
对于MOVEJ的关节运动来说,我们只关心每个电机的角度(只需要考虑多个电机协同开始运动和结束运动,关键是对每个电机加速度均一化,从而一起跑一起停,这部分内容可以参考机器人学导论以获取更加详细的说明),我们要注意整个的流程是更新关节位置(MOVEJ)=>更新TCP(正解)=>更新关节速度和TCP速度
且由于正解是唯一的,在主程序的每个周期都要执行(当然你也可以不在主程序每个周期都执行,放在MoveUpdate里面也可以,不管执行何种运动都刷新一次正解)
对于MOVEL的TCP运动来说,我们只关心末端的位置和姿态(只需要考虑末端能否到目标位置,关键是求逆解,并把每个周期逆解对应的关节位置传递给电机,从而实现末端动,所有轴跟着联动的效果,同样可以参考机器人学导论研究更复杂的情况)。我们要注意整个的流程是更新TCP位置(MOVEL)=>更新关节位置(逆解)=>更新关节速度和TCP速度
且由于逆解不一定要做,只在MOVEL的时候才会执行,并且即便执行也是划归为跟MOVEJ一样的流程(MOVEUpdateDATA),更新数据之前判断关节位置,速度是否超过限制
对于两轴的直线模组来说比较简单,只有XY两个自由度,不涉及姿态,但是算法的流程和含义却是一样的。可以添加监控捕捉每个关节的位置和TCP的位置在启停的时候是否平滑(在本例中只有表示设备关节位置的theRadius和表示设备TCP位置的posRPYRadius两个数组是重要的,核心的)。点动的按钮都是会相互影响的,JOG关节会影响TCP位置,JOGTCP会影响关节位置。当然在直线模组中每个自由度是独立的,比如X的自由度只受J1电机控制(电机的角度算上丝杠导轨或者减速机,等比例的映射为多少mm,甚至可以测量得到简单结论)
J0:36CM=>72弧度
-45 弧度=>27 弧度
J1:40CM=>80弧度
-40 弧度=>40 弧度
因此可以简单认为每个模组每个关节1弧度运动量对应了X或者5mm的偏移(用弧度表示比较简洁,更多时候我们不关心电机的具体角度,只关心这个输出部分是多少)
要充分理解化归的思想,X和Y的点动本质上都是直线运动的一种,比如X+就是目标的Y不变,X给一个很大的值,然后执行直线运动。不管是JOG,还是回原点,还是弹出面板输入目标位置然后运动,本质都是同样的,只不过执行的目标位置和执行的流程有所区别。
虽然是直线插补,但是依然有很多讲究,比如启动过程可以直接按给定的速度,加速度进行孤立点位的计算(实际上就是等分直线段,每个PLC周期要求TCP到达孤立的直线段即可),还有一种方法是启动过程TCP的步子越来越大(想象人百米加速启动,也是越走越快,加速到指定速度之后再保持匀速)。再比如停止的时候还是可以分成多种情况讨论,再次只是简单演示了梯形加速和S形加速两种情况,停止的时候沿用了MOVEJ的关节停止,所以本质上末端TCP停止不再是保持直线,可以继续优化。
为了虚拟和真实模式的统一,在停止的时候也只采集虚拟的关节位置和关节速度(这两个虚拟的变量也可能是真实的,如果在真实模式下就从真实的驱动器获取)
由于是自定义的算法,我们无法从绝对运动模块中获取是否运动完毕,但是其实也可以自己写这样一个模块(执行的过程中不断判断是否当前位置和目标位置很接近,比如接近到一定范围之后就认为到位了),如果要在几个点来回运动,则必然需要等前面运动结束才能开始下一个运动。
最后虽然定义了MOVEJ和MOVEL运动方法,但是本质上绘制的轨迹却都是直线,因为关节和TCP是一个简单正比例关系(如果是串联纯转动结构的机器人,MOVEJ绘制的是空间不规则弧线,而MOVEL则保持TCP轨迹为直线)。MOVEJ由于不考虑求逆,所以大部分情况下可以获得比MOVEL更加平滑的轨迹和电机启停效果。
更多教学视频和资料下载,欢迎关注以下信息:
我的优酷空间:
http://i.youku.com/acetaohai123
我的在线论坛:
http://csrobot.gz01.bdysite.com/
问题交流:
QQ:910358960
倍福TwinCAT(贝福Beckhoff)应用教程13.2 TwinCAT控制松下伺服 NC自定义直线插补的更多相关文章
- 倍福TwinCAT(贝福Beckhoff)应用教程12.3 TwinCAT控制松下伺服 NC进阶
在前面一节,我们简单介绍了通过PLC+HMI实现完整控制松下伺服的上使能-运动,采集位置,速度等功能,这里我们会大量简化用到的贝福功能块(为了更加实用).首先依然是对单个轴的封装,我们之前的做法,例如 ...
- 倍福TwinCAT(贝福Beckhoff)应用教程13.1 TwinCAT控制松下伺服 NC高级
本节主要演示了使用自定义函数实现电机的运动(梯形曲线和S曲线都有实现),这里的JOG+和JOG-,针对单个关节实现了PTP的运动(跟贝福的MoveAbsolute功能块实现效果一致),在此没有介绍运动 ...
- 倍福TwinCAT(贝福Beckhoff)应用教程12.2 TwinCAT控制松下伺服 NC初步
在前面我们已经学会了使用贝福自带的调试软件完成试运行,接下来是使用TWINCAT PLC实现这个功能,右击PLC添加一个PLC项目 在VISUs上右击添加一个HMI人机界面 目前PLC程序和人 ...
- 倍福TwinCAT(贝福Beckhoff)应用教程13.3 TwinCAT控制松下伺服 NC配合完整上位
这是TwinCAT教程的最后一节,简单讲述了以C#为上位,通过ADS控制TwinCAT下位,实现完整控制两轴模组的功能.可以发现,在上位层已经没有了运动控制的代码,不管是要执行哪种运动,无非是把目标参 ...
- 倍福TwinCAT(贝福Beckhoff)应用教程13.2 TwinCAT控制松下伺服 CS说明
虚拟仿真上,要注意仿真只是为了可视化,可以看到数据的变动是否和实际一致,所以Robot2D才是主要因素,虚拟仿真采集机器人的关节位置或者TCP位置来显示而已,为了测试一些别的算法,我们还可以在虚拟仿真 ...
- 倍福TwinCAT(贝福Beckhoff)基础教程1.2 TwinCAT安装配置
由于TC2和TC3都有可能用到,个人推荐都安装,但是注意必须是先安装的TwinCAT2,然后安装TwinCAT3,如果反了可能两个都没法用(打开TcSwitchRuntime提示Both TwinCA ...
- 倍福TwinCAT(贝福Beckhoff)基础教程1.1 TwinCAT背景知识
本节附件中有很多PPT介绍贝福TwinCAT和EtherCAT的相关技术,在此只做简单说明. 简单总结:EtherCAT就是一种总线技术,具有速度快,稳定性高,布线简单等优点,详细可以参考下面这个PP ...
- 倍福TwinCAT(贝福Beckhoff)应用教程12.1 TwinCAT控制松下伺服 连接和试运行
首先是用松下伺服自带的软件可以测试运行(驱动器,电机都连接好,然后用USB线连接到松下伺服驱动器的X1口),打开调试软件会自动提示连接到伺服 一般需要对驱动器清除绝对值编码器数据(驱动器可能报错4 ...
- 倍福TwinCAT(贝福Beckhoff)应用教程11.1 TwinCAT应用小程序1 如何读写数字量模拟量输入输出(DI,DO,AI,AO)
常见的模拟量模块(还有更高端和更低端的,使用方法都一样) EL3054和EL4024(4路模拟量输入和输出模块) 常见的数字量模块(还有更高端和更低端的,使用方法都一样) EL1809和EL280 ...
随机推荐
- 【转】java中的集合和数组
转载自:http://www.cnblogs.com/summers/p/4094260.html 数组Array和集合的区别: (1)数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型 ...
- js面向对象编程(三)非构造函数的继承(转载)
Javascript面向对象编程(三):非构造函数的继承 今天是最后一个部分,介绍不使用构造函数实现"继承". 一.什么是"非构造函数"的继承? 比如,现在有一 ...
- 更改yum源为网易的
更改yum源为网易的. mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup cd /etc/yu ...
- PHP实现innodb的数据回滚
//实例化的数据库对象$model = new Model();//开启事务$model->startTrans();//默认结果$judge = true;//数据操作$sql1 =" ...
- selenium grid 环境搭建
一.selenium grid简介 selenium grid可以同时在不同机器上测试不同浏览器,包含一个hub和多个node.node会发送配置信息到hub,hub记录并跟踪每一个node的配置信息 ...
- Codeforces 608 A. Saitama Destroys Hotel
A. Saitama Destroys Hotel time limit per test 1 second memory limit per test 256 megabytes input ...
- POJ 1988 Cube stacking【并查集高级应用+妙用deep数组】
Description Farmer John and Betsy are playing a game with N (1 <= N <= 30,000)identical cubes ...
- Codeforces 855E - Salazar Slytherin's Locket
855E - Salazar Slytherin's Locket 题意 给出一个区间,问这个区间内有多少个数满足,将这个数转化为某个进制后,所有数的数量都为偶数. 分析 谁能想到 数位DP 的裸题竟 ...
- 51nod 最长公共子序列问题(动态规划)(LCS)(递归)
最长公共子序列问题 输入 第1行:字符串A 第2行:字符串B (A,B的长度 <= 1000) 输出 输出最长的子序列,如果有多个,随意输出1个. 输入示例 abcicba abdkscab 输 ...
- [Hackerrank]时间转换Time Conversion
题目链接 大致要求是说给定一个十二小时制的时间,给出它的二十四小时制的形式. 输入格式:hh:mm:ssAM 或者 hh:mm:ssPM,其中01≤hh≤12,00≤mm,ss≤59 思路 判断字符串 ...