倍福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 ...
随机推荐
- [ Openstack ] OpenStack-Mitaka 高可用之 认证服务(keystone)
目录 Openstack-Mitaka 高可用之 概述 Openstack-Mitaka 高可用之 环境初始化 Openstack-Mitaka 高可用之 Mariadb-Galera集群 ...
- solr 启动过程分析
http://www.cnblogs.com/likehua/p/4353608.html#top
- 使用Bind服务配置DNS服务器
bind是什么 bind是DNS服务器软件 ,他的服务名称是named 功能区分: 正向解析:根据主机名查找对应的IP地址 反向解析:根据IP地址查找对应的主机名(域名) 工作形式上区分: 主服务器: ...
- c#实现Form窗体始终在桌面最前端显示
方法一 //调用API [System.Runtime.InteropServices.DllImport("user32", CharSet = System.Runtime.I ...
- 【原创】Maven cobertura整合多个子项目下的单测覆盖率报告
今天在调试一个UT job的时候发现找不到cobertural报告文件,后来发现在Maven的自项目里找到了对应的代码覆盖率报告,但都是是分散在每个子项目下面的,看起来很不方便.就在想是不是可以把这些 ...
- 【cocos2d-js官方文档】三、Bake功能使用说明
设计意图 在游戏开发的过程中,经常会遇到作为UI或者不怎么修改的背景的层(Layer), 这些层内容并不怎么变动. 而在游戏的渲染过程中,这些层往往又会消耗大量的渲染时间,特别是比较复杂的UI界面,比 ...
- 关于Promise 简单使用理解
在学一个新的知识的时候,我的总结是首先要具备相关的基础知识,其次就是可以静下心来能看进去去理解,看一两遍不懂,就看四五遍,甚至六七遍,每一遍都认真努力理解,总会学会的. Promise是一个构造函数, ...
- Qimage与IplImage的转换
QImage test2012::ImageCV2Qimg(IplImage* img){ assert(img!=NULL); int h = img->height; int w = img ...
- POJ 2367 Genealogical tree【拓扑排序/记录路径】
Genealogical tree Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7101 Accepted: 4585 Spe ...
- HDU 1236 排名(结构体+排序)
今天的上机考试虽然有实时的Ranklist,但上面的排名只是根据完成的题数排序,没有考虑 每题的分值,所以并不是最后的排名.给定录取分数线,请你写程序找出最后通过分数线的 考生,并将他们的成绩按降序打 ...